{"version":3,"sources":["components/deployments/services/WizardFormConfigurationStep5.module.less","components/deployments/compare/HostCompareDashboard.module.less","components/ccx/common/DotLabelStatus.module.less","components/deployments/dashboard/HaProxyLbDashboard.module.less","components/projects/dataStores/DatastoreScalingNodeInfoCard.module.less","components/deployments/dashboard/ProxySqlLbDashboard.module.less","components/FeedbackForm.module.less","components/ccx/charts/ChartCustomTooltip.module.less","components/vpc/VpcPeers.module.less","../node_modules/@ant-design/icons-svg/inline-namespaced-svg sync /^/.//.*/.svg$","components/logs/DataStoreViewLogs.module.less","components/ccx/common/AppGridTable.module.less","components/deployments/services/WizardFormConfigurationStep4.module.less","components/AppDeleteModal.module.less","components/projects/dataStores/services/ServiceResources.module.less","components/projects/Projects.module.less","components/dbUsers/DbUsers.module.less","components/account/PaymentCard.module.less","components/deployments/dashboard/HostDashboard.module.less","components/deployments/services/WizardFormConfigurationStep1.module.less","components/dbParameters/DeleteDbParametersPopover.module.less","components/deployments/compare/DeploymentCompare.module.less","components/account/AddCard.module.less","components/projects/dataStores/overview/DataStoreOverviewGeneralInformation.module.less","components/projects/dataStores/settings/DataStoreSettingsMaintenance.module.less","components/projects/dataStores/services/DataStoreServices.module.less","components/deployments/services/WizardFormConfigurationStep6.module.less","components/deployments/services/AddServiceCreateVPCStep.module.less","components/layout/AppNotificationItem.module.less","../node_modules/@severalnines/bar-frontend-components/build/lib/General/icons sync /^/.//.*$","App.module.less","components/LazyLoader.tsx","components/ccx/common/AppLabeledComponent.tsx","components/ccx/common/AppRangePicker.tsx","components/deployments/dashboard/DeploymentDashboardOptions.tsx","core/CcxEnv.tsx","types/Job.tsx","core/helpers.ts","services/ApiService.tsx","types/FriendlyDateTime.tsx","types/CloudInstance.tsx","types/DbNode.tsx","types/Deployment.tsx","services/DataStoreService.tsx","core/hooks/useDataStore.tsx","services/StatService.tsx","types/CmonCpuStat.tsx","types/CmonDiskStat.tsx","types/CmonMemoryStat.tsx","types/CmonNetStat.tsx","components/AppEmpty.tsx","types/FriendlyTimestamp.tsx","core/context/ChartsContext.tsx","components/AppChartArea.tsx","components/AppChartLiquid.tsx","components/AppChartLine.tsx","components/AppTable.tsx","components/AppChartSummary.tsx","components/AppLoading.tsx","components/AppChartHistogram.tsx","components/AppChartTinyArea.tsx","components/AppChartColumn.tsx","components/AppChart.tsx","components/ccx/charts/ChartCustomTooltip.tsx","components/ccx/charts/CpuUsageChart.tsx","components/ccx/charts/DiskIopsChart.tsx","components/ccx/charts/DiskIOUtilizationChart.tsx","components/ccx/charts/DiskSpaceUsageChart.tsx","components/ccx/charts/DiskThroughputChart.tsx","components/ccx/charts/LoadAvgChart.tsx","components/ccx/charts/NetworkUsageChart.tsx","components/ccx/charts/RamUsageChart.tsx","components/ccx/charts/RamUtilizationChart.tsx","components/deployments/compare/HostCompareDashboard.tsx","core/hooks/useMemoryStatsCompare.tsx","core/hooks/useCpuStatsCompare.tsx","core/hooks/useNetStatsCompare.tsx","core/hooks/useDiskStatsCompare.tsx","components/ccx/charts/MysqlConnectionsChart.tsx","components/ccx/charts/MysqlComDeleteChart.tsx","components/ccx/charts/MysqlComReplaceChart.tsx","components/ccx/charts/MysqlComSelectChart.tsx","components/ccx/charts/MysqlComUpdateChart.tsx","components/ccx/charts/MysqlComInsertChart.tsx","types/CmonSqlStat.tsx","core/hooks/useSqlStatsCompare.tsx","components/deployments/compare/MySqlDbCompareDashboard.tsx","components/ccx/charts/PostgreSqlConnectionsChart.tsx","components/ccx/charts/PostgreSqlCommitsChart.tsx","components/ccx/charts/PostgreSqlRollbacksChart.tsx","components/ccx/charts/PostgreSqlRowsDeletedChart.tsx","components/ccx/charts/PostgreSqlRowsFetchedChart.tsx","components/ccx/charts/PostgreSqlRowsInsertedChart.tsx","components/ccx/charts/PostgreSqlRowsUpdatedChart.tsx","components/deployments/compare/PostgreSqlDbCompareDashboard.tsx","components/deployments/compare/DbCompareDashboard.tsx","types/CmonProxySqlStat.tsx","components/ccx/charts/ProxySqlQuestionsChart.tsx","components/ccx/charts/ProxySqlSlowQueriesChart.tsx","components/ccx/charts/ProxySqlActiveTransactionsChart.tsx","components/ccx/charts/ProxySqlQueryCacheMemoryBytesChart.tsx","components/ccx/charts/ProxySqlClientConnectionsChart.tsx","components/ccx/charts/ProxySqlServerConnectionsChart.tsx","components/deployments/compare/ProxySqlLbCompareDashboard.tsx","core/hooks/useProxySqlStatsCompare.tsx","types/CmonHaProxyStat.tsx","components/ccx/charts/HaProxyFrontendTrafficChart.tsx","components/ccx/charts/HaProxyBackendTrafficChart.tsx","components/deployments/compare/HaProxyLbCompareDashboard.tsx","core/hooks/useHaProxyStatsCompare.tsx","components/deployments/compare/LbCompareDashboard.tsx","core/hooks/usePiwikPro.tsx","core/PiwikConstants.tsx","components/deployments/compare/DeploymentCompare.tsx","types/CloudProviderRegion.tsx","types/CloudProvider.tsx","types/Country.tsx","services/ContentService.tsx","core/hooks/useContentProviders.tsx","components/common/StretchedClick.tsx","components/AppConfirmDialog.tsx","services/Helpers.tsx","types/Vpc.tsx","types/VpcAwsAvailabilityZone.tsx","types/VpcAwsSubnet.tsx","types/VpcPeering.tsx","sdk/vpc/typescript-axios/base.ts","sdk/vpc/typescript-axios/common.ts","sdk/vpc/typescript-axios/api.ts","sdk/vpc/typescript-axios/configuration.ts","sdk/config.ts","sdk/VpcApi.ts","services/VpcService.tsx","components/ccx/common/AppLabeledIconStatus.tsx","components/ccx/icons/CcxIconCheckCircle.tsx","components/ccx/icons/CcxIconExclamationCircle.tsx","components/ccx/common/AppFormSlider.tsx","components/ccx/common/AppFormFlagSelect.tsx","components/ccx/icons/CcxIconInfoCircleOutlined.tsx","components/ccx/common/AppForm.tsx","components/ButtonModalForm.tsx","core/hooks/useContentCidrs.tsx","core/hooks/useVpcs.tsx","components/ccx/icons/CcxIconCloseCircleTwoTone.tsx","components/vpc/CreateVpcPeerButton.tsx","core/hooks/useVpcPeers.tsx","core/hooks/useHover.tsx","components/Hoverable.tsx","components/ccx/common/AppButton.tsx","components/CopyToClipboardText.tsx","components/ccx/icons/CcxIconInfoCircleTwoTone.tsx","components/vpc/VpcPeers.tsx","core/hooks/useVpc.tsx","types/BillingAddress.tsx","types/BillingUserData.tsx","types/SubscriptionBillingUser.tsx","types/Subscription.tsx","types/Card.tsx","types/Coupon.tsx","types/Invoice.tsx","types/SetupIntent.tsx","services/BillingService.tsx","components/ccx/common/AppGridTable.tsx","components/ccx/common/IconLabelStatusError.tsx","components/ccx/common/IconLabelStatusOk.tsx","components/ccx/common/PrettyNumber.tsx","core/hooks/useCards.tsx","services/CountryService.tsx","components/ccx/common/AppFlagIcon.tsx","components/deployments/services/BillingForm.tsx","types/Address.tsx","redux/hooks.tsx","components/account/AddCard.tsx","components/AppIcon.tsx","components/ccx/common/CcxLogo.tsx","components/ccx/icons/CcxContextualMenuIcon.tsx","components/account/PaymentCard.tsx","components/account/PromoCodeCard.tsx","components/account/PaymentMethodModal.tsx","core/hooks/useCoupons.tsx","components/ccx/common/AppSupportLink.tsx","components/account/paymentsInvoices/ChangePaymentMethod.tsx","components/account/paymentsInvoices/CurrentBalance.tsx","components/account/paymentsInvoices/CurrentBillingPeriod.tsx","components/account/paymentsInvoices/PaymentMethod.tsx","components/account/paymentsInvoices/PaymentsInvoices.tsx","core/hooks/useInvoices.tsx","core/hooks/useNextInvoice.tsx","components/ccx/common/AppBorderedPanel.tsx","components/account/accountInfo/ChangePasswordModal.tsx","errors/JsonError.ts","errors/UnauthorizedApiError.tsx","services/AuthService.tsx","components/account/accountInfo/AccountInfo.tsx","types/Credentials.tsx","services/AuthorizationService.tsx","components/ccx/common/DotLabelStatus.tsx","components/AppCodeCard.tsx","components/account/AuthorizationModal.tsx","components/account/authorization/CredentialsActions.tsx","components/account/authorization/Authorization.tsx","core/hooks/useCredentials.tsx","components/account/Account.tsx","services/ProvisionService.tsx","components/ExpandableText.tsx","components/ccx/common/SmallContainer.tsx","components/projects/dataStores/DataStoreInformation.tsx","core/hooks/useOnlineStatus.tsx","components/projects/dataStores/DataStoreStatus.tsx","components/projects/dataStores/CloudProviderLogo.tsx","components/projects/dataStores/DataStoreCloudProviderLogo.tsx","components/projects/dataStores/CloudInformation.tsx","components/ccx/common/AppCdnSvg.tsx","components/ccx/common/AppCdnIcon.tsx","components/ccx/icons/CcxIcon1NodeDeployment.tsx","components/ccx/common/AppCdnLogo.tsx","components/ccx/common/AppLogoBrand.tsx","components/ccx/common/AppLogoBrandMardiaDb.tsx","components/ccx/common/AppLogoBrandPostgreSql.tsx","components/ccx/common/AppLogoBrandPercona.tsx","components/ccx/common/AppLogoBrandRedis.tsx","components/ccx/common/AppLogoBrandMssql.tsx","components/projects/dataStores/DatabaseInformation.tsx","components/ccx/charts/TinyChartCustomTooltip.tsx","components/ccx/charts/QueriesPerSecondChart.tsx","components/projects/dataStores/DataStoreChart.tsx","core/hooks/useQueriesPerSecondStats.tsx","components/ccx/icons/CcxIconStopOutlined.tsx","components/ccx/common/NoChartAvailable.tsx","assets/icons/circle.svg","assets/icons/exclamationCircle.svg","components/AppDeleteModal.tsx","types/AdditionalFields.tsx","types/TermsAccepted.tsx","types/UesrScope.tsx","types/User.tsx","services/UsersService.tsx","services/ProfileService.tsx","slices/user.slice.tsx","types/DataStoreStatus.tsx","types/Db.tsx","types/DataStoreMaintenanceSettings.ts","types/DbAccount.tsx","types/DataStoreEmailNotifications.tsx","types/DataStoreSpec.ts","types/DbParameterSync.tsx","types/DeploymentsItem.tsx","types/Deployments.tsx","services/DataStoresService.tsx","slices/datastores.slice.tsx","core/PermissionRoles.tsx","core/hooks/useRBAC.tsx","core/providers/Can.tsx","components/projects/dataStores/DataStores.tsx","components/vpc/VpcListOptions.tsx","components/projects/vpcs/InstanceInformation.tsx","components/projects/vpcs/VpcStatus.tsx","components/projects/vpcs/VpcCidr.tsx","components/projects/vpcs/VpcPeerings.tsx","components/projects/vpcs/VpcDataStores.tsx","core/context/VpcsContext.tsx","components/projects/vpcs/Vpcs.tsx","components/vpc/CreateVpcButton.tsx","components/ccx/icons/CcxIconDownOutlined.tsx","components/layout/AppCreateButton.tsx","types/CmonStatus.tsx","services/CmonService.tsx","slices/cmon.slice.tsx","core/hooks/useCmonStatus.tsx","components/projects/DatastoreFilterPopover.tsx","types/Service.tsx","types/DbService.tsx","types/Jobs.tsx","services/ServiceService.tsx","slices/jobs.slice.tsx","types/DBparameterDefaults.tsx","types/DbParameterGroup.tsx","types/DbParametersGroup.tsx","types/LegacyDatastore.tsx","services/DbParameterGroupService.tsx","components/ccx/icons/CcxIconCheckCircleTwoTone.tsx","components/dbParameters/DeleteDbParametersPopover.tsx","components/dbParameters/UpdateDbParametersPopover.tsx","types/DbParameter.tsx","components/dbParameters/DbParametersModal.tsx","components/dbParameters/EditDBParametersModal.tsx","components/dbParameters/DbParametersActionsLists.tsx","components/dbParameters/CreateDbParameters.tsx","core/hooks/useDbParametersGroup.tsx","components/dbParameters/DbParametersTable.tsx","types/Invite.tsx","types/Invites.tsx","services/InvitesService.tsx","slices/restore.slice.tsx","components/projects/Projects.tsx","core/hooks/useInvites.tsx","types/FirewallRulePort.tsx","types/FirewallRule.tsx","services/FirewallService.tsx","core/hooks/useFirewalls.tsx","components/ccx/icons/CcxIconDeleteOutlined.tsx","components/firewalls/FirewallsPortsTable.tsx","services/IpifyService.tsx","core/hooks/useIpAddress.tsx","components/ccx/icons/CcxIconPlusCircleOutlined.tsx","components/firewalls/AddFirewallRule.tsx","components/firewalls/FirewallHeader.tsx","components/firewalls/Firewalls.tsx","types/QueryProcess.tsx","types/QueryProcesses.tsx","types/TopQuery.tsx","types/TopQueries.tsx","services/QueryMonitorService.tsx","core/hooks/useTopQueries.tsx","core/hooks/useQueryProcesses.tsx","components/queryStats/topQueries/TopQueriesTable.tsx","core/hooks/useDataStoreServices.tsx","components/SecretText.tsx","services/DsnService.tsx","components/projects/dataStores/services/useDatastoreServiceDsn.ts","components/projects/dataStores/services/ServiceDSNCopyButton.tsx","components/projects/dataStores/services/ServiceInstanceFormat.tsx","components/queryStats/QueryStats.tsx","components/ccx/common/AppFormTag.tsx","components/ccx/common/AppFormTags.tsx","components/projects/dataStores/overview/DataStoreOverviewGeneralInformation.tsx","components/ccx/icons/CcxIconCloseCircleOutlined.tsx","components/projects/dataStores/overview/DataStoreOverviewServicesState.tsx","components/projects/dataStores/overview/DataStoreOverviewNetworkInformation.tsx","components/projects/dataStores/overview/DataStoreOverviewCloudInformation.tsx","components/projects/dataStores/overview/DataStoreOverviewQueriesPerSecond.tsx","components/projects/dataStores/services/ServiceAccessConnectionInformation.tsx","components/projects/dataStores/overview/DataStoreOverviewAccessToServices.tsx","components/projects/dataStores/overview/DataStoreOverview.tsx","components/projects/ProjectBreadcrumb.tsx","types/DbParameters.tsx","services/DatabaseConfigurationService.tsx","components/projects/dataStores/settings/DataStoreMaintenanceTooltip.tsx","components/projects/dataStores/settings/DataStoreSettingsMaintenance.tsx","components/projects/dataStores/settings/DataStoreSettingsNameChange.tsx","types/BackupSettings.tsx","sdk/backups/typescript-axios/base.ts","sdk/backups/typescript-axios/common.ts","sdk/backups/typescript-axios/api.ts","sdk/BackupsApi.ts","sdk/backups/typescript-axios/configuration.ts","core/hooks/useBackupSettings.tsx","types/Backup.tsx","types/BackupSchedule.tsx","types/Restore.tsx","services/BackupService.tsx","core/hooks/useDataStoreJobs.tsx","services/DownloadingAuthService.tsx","components/projects/dataStores/settings/DatastoreSettingsAuthenticationTable.tsx","components/ccx/common/AppFormEmailTag.tsx","components/ccx/common/Form/AppEmailsNotification.tsx","components/projects/dataStores/settings/DatastoreEmailNotification.tsx","components/projects/dataStores/settings/DataStoreSettingsAutoScale.tsx","components/projects/dataStores/settings/DatastoreSettingsGeneral.tsx","components/projects/dataStores/settings/ParameterGroupDisplay.tsx","components/projects/dataStores/settings/AssignGroupModal.tsx","utils/dbParameterGroups.ts","components/projects/dataStores/settings/DatastoreSettingsDbParamters.tsx","core/hooks/useDbParameters.tsx","components/projects/dataStores/settings/DataStoreSettings.tsx","components/projects/dataStores/services/ServiceStatus.tsx","components/projects/dataStores/services/ServiceInformation.tsx","components/projects/dataStores/services/PromoteReplicaButton.tsx","assets/icons/cpu.svg","assets/icons/disk.svg","assets/icons/ram.svg","components/ccx/icons/Icons.tsx","components/projects/dataStores/services/ServiceResources.tsx","core/hooks/useContentInstanceSizes.tsx","components/projects/dataStores/DatastoreScalingStepHeader.tsx","components/projects/dataStores/DatastoreScalingCard.tsx","components/projects/dataStores/DatastoreScalingStep1.tsx","components/projects/dataStores/DatastoreScalingInfoCard.tsx","components/projects/dataStores/services/DataStoreExtendStorageModal.tsx","tmp/TypographyText.tsx","components/common/antd/Space.tsx","components/projects/dataStores/DatastoreScalingNodeInfoCard.tsx","components/projects/dataStores/DatastoreScalingStep2.tsx","components/projects/dataStores/services/DataStoreScaleNodeModal.tsx","components/projects/dataStores/services/RepairNodeButton.tsx","types/DbUser.tsx","types/DbUsers.tsx","types/DbDatabase.tsx","types/DbDatabases.tsx","services/DbUserService.tsx","core/hooks/useDatabases.tsx","core/hooks/useDbUsers.tsx","components/dbUsers/ConnectionAssistantFormStep1.tsx","components/dbUsers/ConnectionAssistantFormStep2.tsx","components/dbUsers/ConnectionAssistantForm.tsx","components/dbUsers/ConnectionAssistant.tsx","components/projects/dataStores/services/ConnectionAssistant.tsx","components/projects/dataStores/services/DatastoreVolumeCard.tsx","components/projects/dataStores/DatastoreScaling.tsx","components/projects/dataStores/services/DataStoreNodeConfiguration.tsx","services/DatastoreServiceSingle.tsx","slices/datastore.slice.tsx","types/PrometheusReplicaLag.tsx","types/PrometheusRelicaLagData.tsx","services/PrometheusStatService.tsx","core/hooks/useReplicaLag.tsx","components/projects/dataStores/services/RebootNodeButton.tsx","components/projects/dataStores/services/DataStoreServices.tsx","types/PrometheusLoadAvgStats.tsx","types/PrometheusCpuUsageStats.tsx","types/PrometheusRamUsageStats.tsx","types/PrometheusNetworkUsageStats.tsx","types/PrometheusDiskSpaceUsageStats.tsx","types/PrometheusDiskIOUtilStats.tsx","types/PrometheusDiskIopsStats.tsx","types/PrometheusDiskThroughputStats.tsx","components/ccx/charts/PrometheusLoadAvgChart.tsx","components/ccx/charts/PrometheusCpuUsageChart.tsx","components/ccx/charts/PrometheusDiskIopsChart.tsx","components/ccx/charts/PrometheusDiskIOUtilizationChart.tsx","components/ccx/charts/PrometheusDiskSpaceUsageChart.tsx","components/ccx/charts/PrometheusDiskThroughputChart.tsx","components/ccx/charts/PrometheusNetworkUsageChart.tsx","components/ccx/charts/PrometheusRamUsageChart.tsx","components/deployments/dashboard/HostDashboard.tsx","core/hooks/usePrometheusLoadAverageStats.tsx","core/hooks/usePrometheusCpuUsageStats.tsx","core/hooks/usePrometheusRamUsageStats.tsx","core/hooks/usePrometheusNetworkUsageStats.tsx","core/hooks/usePrometheusDiskSpaceUsageStats.tsx","core/hooks/usePrometheusDiskIOUtilStats.tsx","core/hooks/usePrometheusDiskIopsStats.tsx","core/hooks/usePrometheusDiskThroughputStats.tsx","types/PrometheusMySqlQueriesStats.tsx","core/hooks/usePrometheusMySqlQueriesStats.tsx","types/PrometheusMySqlAbortedConnectionsStats.tsx","core/hooks/usePrometheusMySqlAbortedConnectionsStats.tsx","types/PrometheusMySqlDbConnectionsStats.tsx","core/hooks/usePrometheusMySqlDbConnectionsStats.tsx","types/PrometheusMySqlHandlersStats.tsx","types/PrometheusMySqlHandlerTransactionsStats.tsx","types/PrometheusMySqlMemoryUtilizationStats.tsx","types/PrometheusMySqlScanOperationsStats.tsx","types/PrometheusMySqlSortingStats.tsx","core/hooks/usePrometheusMySqlSortingStats.tsx","types/PrometheusMySqlTableLockingStats.tsx","types/PrometheusMySqlTemporaryTablesStats.tsx","core/hooks/usePrometheusMySqlTemporaryTablesStats.tsx","components/ccx/charts/PrometheusMySqlHandlersChart.tsx","components/ccx/charts/PrometheusMySqlHandlerTransactionsChart.tsx","components/ccx/charts/PrometheusMySqlDbConnectionsChart.tsx","components/ccx/charts/PrometheusMySqlQueriesChart.tsx","components/ccx/charts/PrometheusMySqlScanOperationsChart.tsx","components/ccx/charts/PrometheusMySqlTableLockingChart.tsx","components/ccx/charts/PrometheusMySqlTemporaryTablesChart.tsx","components/ccx/charts/PrometheusMySqlSortingChart.tsx","components/ccx/charts/PrometheusMySqlAbortedConnectionsChart.tsx","components/ccx/charts/PrometheusMySqlMemoryUtilizationChart.tsx","components/deployments/dashboard/MysqlDbDashboard.tsx","core/hooks/usePrometheusMySqlHandlersStats.tsx","core/hooks/usePrometheusMySqlHandlerTransactionsStats.tsx","core/hooks/usePrometheusMySqlMemoryUtilizationStats.tsx","core/hooks/usePrometheusMySqlScanOperationsStats.tsx","core/hooks/usePrometheusMySqlTableLockingStats.tsx","types/PrometheusPostgreSqlActiveSessionsStats.tsx","core/hooks/usePrometheusPostgreSqlActiveSessionsStats.tsx","types/PrometheusPostgreSqlCheckpointsRequestedAndTimedStats.tsx","types/PrometheusPostgreSqlCheckpointSyncTimeStats.tsx","types/PrometheusPostgreSqlCheckpointWriteTimeStats.tsx","types/PrometheusPostgreSqlDeleteStats.tsx","core/hooks/usePrometheusPostgreSqlDeleteStats.tsx","types/PrometheusPostgreSqlDiskIOUtilizationStats.tsx","types/PrometheusPostgreSqlDiskLatencyStats.tsx","types/PrometheusPostgreSqlDiskUsageStats.tsx","types/PrometheusPostgreSqlIdleSessionsInTransactionAbortedStats.tsx","types/PrometheusPostgreSqlIdleSessionsInTransactionStats.tsx","types/PrometheusPostgreSqlIdleSessionsStats.tsx","types/PrometheusPostgreSqlInsertStats.tsx","core/hooks/usePrometheusPostgreSqlInsertStats.tsx","types/PrometheusPostgreSqlLockTablesStats.tsx","types/PrometheusPostgreSqlSelectFetchedStats.tsx","core/hooks/usePrometheusPostgreSqlSelectFetchedStats.tsx","types/PrometheusPostgreSqlSelectReturnedStats.tsx","core/hooks/usePrometheusPostgreSqlSelectReturnedStats.tsx","types/PrometheusPostgreSqlUpdateStats.tsx","core/hooks/usePrometheusPostgreSqlUpdateStats.tsx","components/ccx/charts/PrometheusPostgreSqlSelectFetchedChart.tsx","components/ccx/charts/PrometheusPostgreSqlInsertChart.tsx","components/ccx/charts/PrometheusPostgreSqlUpdateChart.tsx","components/ccx/charts/PrometheusPostgreSqlDeleteChart.tsx","components/ccx/charts/PrometheusPostgreSqlSelectReturnedChart.tsx","components/ccx/charts/PrometheusPostgreSqlActiveSessionsChart.tsx","components/ccx/charts/PrometheusPostgreSqlIdleSessionsChart.tsx","components/ccx/charts/PrometheusPostgreSqlDiskLatencyChart.tsx","components/ccx/charts/PrometheusPostgreSqlDiskUsageChart.tsx","components/ccx/charts/PrometheusPostgreSqlDiskIOUtilizationChart.tsx","components/ccx/charts/PrometheusPostgreSqlCheckpointWriteTimeChart.tsx","components/ccx/charts/PrometheusPostgreSqlCheckpointsRequestedAndTimedChart.tsx","components/ccx/charts/PrometheusPostgreSqlCheckpointSyncTimeChart.tsx","components/ccx/charts/PrometheusPostgreSqlLockTablesChart.tsx","components/ccx/charts/PrometheusPostgreSqlIdleSessionsInTransactionChart.tsx","components/ccx/charts/PrometheusPostgreSqlIdleSessionsInTransactionAbortedChart.tsx","components/deployments/dashboard/PostgreSqlDbDashboard.tsx","core/hooks/usePrometheusPostgreSqlCheckpointsRequestedAndTimedStats.tsx","core/hooks/usePrometheusPostgreSqlCheckpointSyncTimeStats.tsx","core/hooks/usePrometheusPostgreSqlCheckpointWriteTimeStats.tsx","core/hooks/usePrometheusPostgreSqlDiskIOUtilizationStats.tsx","core/hooks/usePrometheusPostgreSqlDiskLatencyStats.tsx","core/hooks/usePrometheusPostgreSqlDiskUsageStats.tsx","core/hooks/usePrometheusPostgreSqlIdleSessionsInTransactionAbortedStats.tsx","core/hooks/usePrometheusPostgreSqlIdleSessionsInTransactionStats.tsx","core/hooks/usePrometheusPostgreSqlIdleSessionsStats.tsx","core/hooks/usePrometheusPostgreSqlLockTablesStats.tsx","types/PrometheusRedisCommandsPerSecStats.tsx","types/PrometheusRedisTotalKeysStats.tsx","types/PrometheusRedisConnectedClientsStats.tsx","types/PrometheusRedisBlockedClientsStats.tsx","types/PrometheusRedisMemoryUsedStats.tsx","types/PrometheusRedisSlaveLagStats.tsx","components/ccx/charts/PrometheusRedisBlockedClientsChart.tsx","components/ccx/charts/PrometheusRedisMemoryUsedChart.tsx","components/ccx/charts/PrometheusRedisConnectedClientsChart.tsx","components/ccx/charts/PrometheusRedisCommandsPerSecChart.tsx","components/ccx/charts/PrometheusRedisTotalKeysChart.tsx","components/ccx/charts/PrometheusRedisSlaveLagChart.tsx","components/deployments/dashboard/RedisDashboard.tsx","core/hooks/usePrometheusRedisCommandsPerSecStats.tsx","core/hooks/usePrometheusRedisTotalKeysStats.tsx","core/hooks/usePrometheusRedisConnectedClientsStats.tsx","core/hooks/usePrometheusRedisBlockedClientsStats.tsx","core/hooks/usePrometheusRedisMemoryUsedStats.tsx","core/hooks/usePrometheusRedisSlaveLagStats.tsx","components/ccx/charts/PrometheusMssqlQueriesChart.tsx","components/ccx/charts/PrometheusMssqlHandlerTransactionsChart.tsx","types/PrometheusMssqlHandlerTransactionsStats.tsx","types/PrometheusMssqlQPSStats.tsx","components/deployments/dashboard/MssqlDbDashboard.tsx","core/hooks/usePrometheusMssqlQPSStats.tsx","core/hooks/usePrometheusMssqlProcessesStats.tsx","components/deployments/dashboard/MysqlDbDashboardSummary.tsx","components/deployments/dashboard/PostgresSqlDbDashboardSummary.tsx","components/deployments/dashboard/DbDashboard.tsx","types/PrometheusProxySqlActiveTransactionsStats.tsx","types/PrometheusProxySqlClientConnectionsStats.tsx","types/PrometheusProxySqlDataReceivedHostgroupDistributionStats.tsx","types/PrometheusProxySqlDataSentHostgroupDistributionStats.tsx","types/PrometheusProxySqlLatencyHostgroupDistributionStats.tsx","types/PrometheusProxySqlMemoryUtilizationStats.tsx","types/PrometheusProxySqlQueriesBackendStats.tsx","types/PrometheusProxySqlQueriesHostgroupDistributionStats.tsx","types/PrometheusProxySqlQueryCacheGetSetStats.tsx","types/PrometheusProxySqlQueryCacheInOutBytesStats.tsx","types/PrometheusProxySqlQueryCacheMemoryStats.tsx","types/PrometheusProxySqlQuestionsStats.tsx","types/PrometheusProxySqlServerConnectionsStats.tsx","types/PrometheusProxySqlSlowQueriesStats.tsx","components/ccx/charts/PrometheusProxySqlQuestionsChart.tsx","components/ccx/charts/PrometheusProxySqlSlowQueriesChart.tsx","components/ccx/charts/PrometheusProxySqlQueriesHostgroupDistributionChart.tsx","components/ccx/charts/PrometheusProxySqlLatencyHostgroupDistributionChart.tsx","components/ccx/charts/PrometheusProxySqlDataSentHostgroupDistributionChart.tsx","components/ccx/charts/PrometheusProxySqlDataReceivedHostgroupDistributionChart.tsx","components/ccx/charts/PrometheusProxySqlMemoryUtilizationChart.tsx","components/ccx/charts/PrometheusProxySqlQueryCacheInOutBytesChart.tsx","components/ccx/charts/PrometheusProxySqlQueryCacheGetSetChart.tsx","components/ccx/charts/PrometheusProxySqlQueryCacheMemoryChart.tsx","components/ccx/charts/PrometheusProxySqlServerConnectionsChart.tsx","components/ccx/charts/PrometheusProxySqlClientConnectionsChart.tsx","components/ccx/charts/PrometheusProxySqlQueriesBackendChart.tsx","components/ccx/charts/PrometheusProxySqlActiveTransactionsChart.tsx","components/deployments/dashboard/ProxySqlLbDashboard.tsx","core/hooks/usePrometheusProxySqlActiveTransactionsStats.tsx","core/hooks/usePrometheusProxySqlClientConnectionsStats.tsx","core/hooks/usePrometheusProxySqlDataReceivedHostgroupDistributionStats.tsx","core/hooks/usePrometheusProxySqlDataSentHostgroupDistributionStats.tsx","core/hooks/usePrometheusProxySqlLatencyHostgroupDistributionStats.tsx","core/hooks/usePrometheusProxySqlMemoryUtilizationStats.tsx","core/hooks/usePrometheusProxySqlQueriesBackendStats.tsx","core/hooks/usePrometheusProxySqlQueriesHostgroupDistributionStats.tsx","core/hooks/usePrometheusProxySqlQueryCacheGetSetStats.tsx","core/hooks/usePrometheusProxySqlQueryCacheInOutBytesStats.tsx","core/hooks/usePrometheusProxySqlQueryCacheMemoryStats.tsx","core/hooks/usePrometheusProxySqlQuestionsStats.tsx","core/hooks/usePrometheusProxySqlServerConnectionsStats.tsx","core/hooks/usePrometheusProxySqlSlowQueriesStats.tsx","types/PrometheusHaProxyBackendCurrentQueuedRequestsStats.tsx","types/PrometheusHaProxyBackendMaxQueuedRequestsStats.tsx","types/PrometheusHaProxyBackendServersTotalBytesInStats.tsx","types/PrometheusHaProxyBackendServersTotalBytesOutStats.tsx","types/PrometheusHaProxyBackendServersUpDownStats.tsx","types/PrometheusHaProxyBackendsUpDownStats.tsx","types/PrometheusHaProxyBackendTotalBytesInStats.tsx","types/PrometheusHaProxyBackendTotalNumberOfConnectionErrorsStats.tsx","types/PrometheusHaProxyBackendTotalBytesOutStats.tsx","types/PrometheusHaProxyCurrentSessionRateBackendsStats.tsx","types/PrometheusHaProxyCurrentSessionsBackendServersStats.tsx","types/PrometheusHaProxyCurrentSessionsByBackendStats.tsx","types/PrometheusHaProxyCurrentSessionRateBackendServersStats.tsx","types/PrometheusHaProxyMaxSessionBackendServersStats.tsx","types/PrometheusHaProxySessionsStats.tsx","types/PrometheusHaProxyTotalInOutStats.tsx","components/ccx/charts/PrometheusHaProxyBackendsUpDownChart.tsx","components/ccx/charts/PrometheusHaProxyBackendServersUpDownChart.tsx","components/ccx/charts/PrometheusHaProxyBackendTotalBytesInChart.tsx","components/ccx/charts/PrometheusHaProxyTotalInOutChart.tsx","components/ccx/charts/PrometheusHaProxyBackendServersTotalBytesInChart.tsx","components/ccx/charts/PrometheusHaProxyBackendServersTotalBytesOutChart.tsx","components/ccx/charts/PrometheusHaProxyBackendTotalBytesOutChart.tsx","components/ccx/charts/PrometheusHaProxyCurrentSessionsBackendServersChart.tsx","components/ccx/charts/PrometheusHaProxyCurrentSessionsByBackendChart.tsx","components/ccx/charts/PrometheusHaProxyCurrentSessionRateBackendsChart.tsx","components/ccx/charts/PrometheusHaProxyCurrentSessionRateBackendServersChart.tsx","components/ccx/charts/PrometheusHaProxyMaxSessionBackendServersChart.tsx","components/ccx/charts/PrometheusHaProxySessionsChart.tsx","components/ccx/charts/PrometheusHaProxyBackendTotalNumberOfConnectionErrorsChart.tsx","components/ccx/charts/PrometheusHaProxyBackendMaxQueuedRequestsChart.tsx","components/ccx/charts/PrometheusHaProxyBackendCurrentQueuedRequestsChart.tsx","components/deployments/dashboard/HaProxyLbDashboard.tsx","core/hooks/usePrometheusHaProxyBackendCurrentQueuedRequestsStats.tsx","core/hooks/usePrometheusHaProxyBackendMaxQueuedRequestsStats.tsx","core/hooks/usePrometheusHaProxyBackendServersTotalBytesInStats.tsx","core/hooks/usePrometheusHaProxyBackendServersTotalBytesOutStats.tsx","core/hooks/usePrometheusHaProxyBackendServersUpDownStats.tsx","core/hooks/usePrometheusHaProxyBackendTotalBytesInStats.tsx","core/hooks/usePrometheusHaProxyBackendTotalBytesOutStats.tsx","core/hooks/usePrometheusHaProxyBackendTotalNumberOfConnectionErrorsStats.tsx","core/hooks/usePrometheusHaProxyBackendsUpDownStats.tsx","core/hooks/usePrometheusHaProxyCurrentSessionRateBackendServersStats.tsx","core/hooks/usePrometheusHaProxyCurrentSessionRateBackendsStats.tsx","core/hooks/usePrometheusHaProxyCurrentSessionsBackendServersStats.tsx","core/hooks/usePrometheusHaProxyCurrentSessionsByBackendStats.tsx","core/hooks/usePrometheusHaProxyMaxSessionBackendServersStats.tsx","core/hooks/usePrometheusHaProxySessionsStats.tsx","core/hooks/usePrometheusHaProxyTotalInOutStats.tsx","components/deployments/dashboard/LbDashboard.tsx","components/deployments/dashboard/DeploymentDashboard.tsx","components/errors/NotFoundError404.ts","core/validation/formValidators.ts","core/validation/databaseValidation.ts","components/dbUsers/AddDbDatabase.tsx","components/dbUsers/Databases.tsx","types/DbGrowth.tsx","types/DbGrowthData.tsx","services/DatabaseGrowthService.tsx","components/dbUsers/DatabaseGrowthChart.tsx","components/dbUsers/DatabaseGrowthHeading.tsx","components/dbUsers/DatabaseGrowthTable.tsx","components/dbUsers/DatabaseGrowth.tsx","components/dbUsers/DbDatabase.tsx","components/ccx/icons/CcxIconUserAddOutlined.tsx","components/dbUsers/AddDbUser.tsx","components/ccx/common/CcxSectionHeader.tsx","components/dbUsers/UpdateDbUserDrawer.tsx","components/dbUsers/UpdateDbUserActionsMenu.tsx","components/dbUsers/DbUsers.tsx","components/common/ButtonWithOverlayDialog.tsx","components/backups/BackupStatus.tsx","core/hooks/useBackupRestores.tsx","components/backups/BackupColumns.tsx","components/backups/BackupsModal.tsx","components/backups/CreateDatastorePopover.tsx","components/backups/BackupsListCreateDatastoreButton.tsx","components/backups/IncrementalCreateDatastoreButton.tsx","components/backups/IncrementalRestoreButton.tsx","components/backups/IncrementalListActions.tsx","components/backups/IncrementalBackups.tsx","core/hooks/useBackupsIncremental.tsx","components/backups/RestoreStatus.tsx","components/backups/RestoringBackups.tsx","components/backups/BackupsListRestoreButton.tsx","components/backups/BackupsListActionsMenu.tsx","components/backups/BackupsList.tsx","core/hooks/useBackups.tsx","core/hooks/useBackupSchedules.tsx","tmp/FormFooter.tsx","components/backups/BackupsFormModal.tsx","components/backups/FormParts/BackupScheduleInfo.tsx","components/backups/BackupsScheduleEditIncrementalForm.tsx","components/backups/BackupsScheduleEditFullForm.tsx","components/backups/BackupsScheduleEditDrawer.tsx","components/backups/BackupsScheduleSwitchButton.tsx","components/backups/BackupsScheduleActionsMenu.tsx","components/backups/BackupScheduleStatusFormat.tsx","components/backups/BackupsScheduleList.tsx","components/backups/BackupsSettingsForm.tsx","core/hooks/useBackupRetention.tsx","components/backups/BackupsSettingsModal.tsx","components/backups/Backups.tsx","components/eventViewer/EventStatus.tsx","components/logs/DataStoreLogsActions.tsx","types/DbLog.tsx","types/DbLogs.tsx","types/DbLogEntry.tsx","types/DbLogsEnteries.tsx","services/DataStoreLogsService.tsx","core/hooks/useDataStoreEntries.tsx","components/logs/DataStoreViewLogs.tsx","components/logs/DatastoreLogs.tsx","core/hooks/useDataStoreLogs.tsx","components/eventViewer/EventsTable.tsx","components/eventViewer/EventViewer.tsx","components/projects/dataStores/DataStore.tsx","components/errors/useThrowError.ts","core/hooks/usePrevious.tsx","tmp/WizardConfiguration.tsx","tmp/WizardSelectTypeStep.tsx","components/deployments/services/AddServiceDatabaseVendorStep.tsx","components/deployments/services/WizardFormConfigurationStep1.tsx","components/ccx/common/Form/AppRadioGroupGrid.tsx","components/deployments/services/WizardFormConfigurationStep2.tsx","components/deployments/services/formParts/InstanceVolumeTypeForm.tsx","components/deployments/services/InstanceSizeForm.tsx","components/deployments/services/WizardFormConfigurationStep3.tsx","components/ccx/common/CardContentAvailabilityZoneMulti.tsx","components/deployments/services/WizardFormConfigurationStep4.tsx","components/deployments/services/WizardFormConfigurationStep5.tsx","components/deployments/services/WizardFormConfigurationStep6.tsx","components/deployments/services/AddServiceCreateDatastoreStep.tsx","components/deployments/services/AddServiceCreateVPCStep.tsx","core/hooks/usePageTracking.tsx","components/deployments/services/AddService.tsx","components/errors/Error404.tsx","components/errors/Error404Page.tsx","components/organization/organizationInfo/DeleteOrganizationPopover.tsx","components/organization/organizationInfo/OrganizationModal.tsx","types/Organization.tsx","types/Organizations.tsx","services/OrganizationsService.tsx","components/organization/organizationInfo/OrganizationsActionsList.tsx","types/Member.tsx","types/Members.tsx","services/MembersService.tsx","components/organization/organizationInfo/Organizations.tsx","core/hooks/UseOrganizations.tsx","components/organization/Organization.tsx","components/organization/organizationInfo/MemberFormModal.tsx","components/organization/organizationInfo/MemberDeletePopover.tsx","components/organization/organizationInfo/MembersActionsList.tsx","components/organization/organizationInfo/Members.tsx","core/hooks/useMembers.tsx","core/hooks/useOrganizationInvites.tsx","components/organization/organizationInfo/OrganizationMembers.tsx","AppRoute.tsx","components/layout/AppContentTemplate.tsx","types/DatabaseVendorType.tsx","types/DatabaseVendor.tsx","types/InstanceVolumeIopsValue.tsx","types/InstanceVolumeIops.tsx","types/InstanceVolumeType.tsx","types/InstanceVolumeTypes.tsx","types/InstanceVolumeSize.tsx","types/InstanceVolumeSizes.tsx","types/InstanceSize.tsx","types/InstanceSizes.tsx","types/CloudProviderGroup.tsx","types/DeploymentOptions.tsx","slices/deploymentOptions.slice.tsx","components/layout/AppContent.tsx","components/layout/AppLogo.tsx","components/ccx/icons/CcxIconUserOutlined.tsx","components/layout/UserMenu.tsx","components/layout/AppUserMenu.tsx","components/ccx/icons/CcxIconBellOutlined.tsx","components/ccx/icons/CcxIconClockCircle.tsx","components/layout/AppNotificationItem.tsx","components/layout/AppHeaderNotifications.tsx","components/layout/Organizations.tsx","components/layout/AppHeader.tsx","components/layout/AppFooter.tsx","components/layout/FloatingContent.tsx","components/ccx/common/TextFormat.tsx","components/ccx/icons/CcxIconMessageOutlined.tsx","components/FeedbackForm.tsx","services/FeedbackService.tsx","components/layout/AppLayoutTemplate.tsx","components/layout/AppLayout.tsx","components/errors/Error500.tsx","core/providers/reducer.tsx","core/context/StateContext.tsx","core/providers/StateProvider.tsx","core/providers/VpcsProvider.tsx","core/hooks/useVpcsCount.tsx","core/providers/ChartsProvider.tsx","AppProviders.tsx","components/errors/AppErrorBoundary.tsx","App.tsx","serviceWorker.ts","AppLoader.tsx","redux/store.tsx","index.tsx","components/backups/BackupsListCreateDatastoreButton.module.less","components/deployments/compare/MySqlDbCompareDashboard.module.less","components/deployments/compare/ProxySqlLbCompareDashboard.module.less","components/AppConfirmDialog.module.less","components/deployments/dashboard/RedisDashboard.module.less","components/ccx/common/TextFormat.module.less","components/projects/dataStores/DatastoreScalingStep1.module.less","components/organization/organizationInfo/DeleteOrganizationPopover.module.less","components/account/accountInfo/ChangePasswordModal.module.less","components/projects/dataStores/DataStoreInformation.module.less","components/dbParameters/DbParametersModal.module.less","components/projects/dataStores/services/ServiceInformation.module.less","components/organization/organizationInfo/OrganizationsActionsList.module.less","components/account/paymentsInvoices/PaymentsInvoices.module.less","components/projects/dataStores/overview/DataStoreOverviewNetworkInformation.module.less","components/projects/dataStores/overview/DataStoreOverviewCloudInformation.module.less","components/projects/dataStores/overview/DataStoreOverviewAccessToServices.module.less","components/projects/dataStores/settings/DataStoreMaintenanceTooltip.module.less","components/projects/dataStores/DatastoreScalingStep2.module.less","components/dbUsers/DatabaseGrowthHeading.module.less","components/deployments/services/AddServiceCreateDatastoreStep.module.less","components/ccx/common/CardContentAvailabilityZoneMulti.module.less","components/ccx/common/AppLabeledComponent.module.less","components/ccx/common/AppRangePicker.module.less","components/AppChart.module.less","components/projects/vpcs/Vpcs.module.less","components/dbParameters/DbParametersActionsLists.module.less","components/projects/dataStores/overview/DataStoreOverviewServicesState.module.less","components/dbUsers/DbDatabase.module.less","components/deployments/services/WizardFormConfigurationStep2.module.less","components/organization/organizationInfo/Organizations.module.less","components/layout/AppHeaderNotifications.module.less","components/deployments/compare/HaProxyLbCompareDashboard.module.less","components/CopyToClipboardText.module.less","components/ccx/common/SmallContainer.module.less","components/projects/DatastoreFilterPopover.module.less","components/dbParameters/DbParametersTable.module.less","components/queryStats/QueryStats.module.less","components/projects/dataStores/overview/DataStoreOverview.module.less","components/ccx/common/AppFormTag.module.less","components/projects/dataStores/DatastoreScalingCard.module.less","components/projects/dataStores/DatastoreScalingInfoCard.module.less","components/dbUsers/ConnectionAssistant.module.less","components/deployments/services/AddService.module.less","components/organization/organizationInfo/Members.module.less","components/layout/AppLayoutTemplate.module.less","components/ccx/common/AppLogoBrand.module.less","components/ccx/common/AppLabeledIconStatus.module.less","components/ButtonModalForm.module.less","components/ccx/common/AppButton.module.less","components/account/PaymentMethodModal.module.less","components/AppCodeCard.module.less","components/firewalls/Firewalls.module.less","components/projects/dataStores/services/ServiceAccessConnectionInformation.module.less","components/projects/dataStores/services/DatastoreVolumeCard.module.less","components/backups/BackupsModal.module.less","components/ccx/common/Form/AppRadioGroupGrid.module.less","components/deployments/services/formParts/InstanceVolumeTypeForm.module.less","components/errors/Error404.module.less","components/layout/UserMenu.module.less","components/AppEmpty.module.less","components/AppTable.module.less","components/account/Account.module.less","components/ccx/common/CcxLogo.module.less","components/account/PromoCodeCard.module.less","components/account/paymentsInvoices/PaymentMethod.module.less","components/account/authorization/Authorization.module.less","components/ccx/charts/QueriesPerSecondChart.module.less","components/layout/AppCreateButton.module.less","components/firewalls/FirewallsPortsTable.module.less","components/SecretText.module.less","components/projects/dataStores/services/ServiceInstanceFormat.module.less","components/projects/dataStores/settings/DatastoreEmailNotification.module.less","components/ccx/common/AppFormEmailTag.module.less","components/projects/dataStores/DatastoreScalingStepHeader.module.less","components/dbUsers/ConnectionAssistantFormStep2.module.less","components/deployments/dashboard/DeploymentDashboard.module.less","components/backups/IncrementalBackups.module.less","components/backups/BackupColumns.module.less","components/backups/BackupsListRestoreButton.module.less","components/backups/BackupsScheduleEditIncrementalForm.module.less","components/backups/BackupsScheduleEditFullForm.module.less","components/backups/Backups.module.less","components/logs/DatastoreLogs.module.less","components/deployments/services/InstanceSizeForm.module.less","components/organization/organizationInfo/OrganizationModal.module.less","components/organization/organizationInfo/AddNewMemberModal.module.less","components/layout/AppContentTemplate.module.less","components/layout/AppFooter.module.less","components/layout/FloatingContent.module.less","components/layout/AppContent.module.less","components/LazyLoader.module.less","components/deployments/dashboard/DeploymentDashboardOptions.module.less","components/AppChartArea.module.less","components/AppChartLiquid.module.less","components/AppChartLine.module.less","components/AppChartSummary.module.less","components/AppLoading.module.less","components/AppChartHistogram.module.less","components/AppChartTinyArea.module.less","components/deployments/compare/DbCompareDashboard.module.less","components/deployments/compare/LbCompareDashboard.module.less","components/common/StretchedClick.module.less","components/Hoverable.module.less","components/ccx/common/IconLabelStatusError.module.less","components/ccx/common/IconLabelStatusOk.module.less","components/ccx/common/PrettyNumber.module.less","components/account/paymentsInvoices/ChangePaymentMethod.module.less","components/ccx/common/AppFlagIcon.module.less","components/deployments/services/BillingForm.module.less","components/AppIcon.module.less","components/account/paymentsInvoices/CurrentBalance.module.less","components/account/paymentsInvoices/CurrentBillingPeriod.module.less","components/ccx/common/AppBorderedPanel.module.less","components/account/accountInfo/AccountInfo.module.less","components/account/AuthorizationModal.module.less","components/projects/dataStores/DataStores.module.less","components/ExpandableText.module.less","components/projects/dataStores/DataStoreStatus.module.less","components/projects/dataStores/CloudProviderLogo.module.less","components/ccx/common/AppCdnSvg.module.less","components/ccx/common/AppCdnIcon.module.less","components/ccx/common/NoChartAvailable.module.less","components/projects/vpcs/InstanceInformation.module.less","components/projects/vpcs/VpcCidr.module.less","components/projects/vpcs/VpcPeerings.module.less","components/projects/vpcs/VpcDataStores.module.less","components/vpc/CreateVpcButton.module.less","components/dbParameters/EditDbParametersModal.module.less","components/firewalls/AddFirewallRule.module.less","components/firewalls/FirewallHeader.module.less","components/queryStats/topQueries/TopQueriesTable.module.less","components/projects/dataStores/overview/DataStoreOverviewQueriesPerSecond.module.less","components/projects/ProjectBreadcrumb.module.less","components/projects/dataStores/settings/DataStoreSettings.module.less","components/projects/dataStores/settings/DataStoreSettingsNameChange.module.less","components/projects/dataStores/settings/DataStoreSettingsAutoScale.module.less","components/projects/dataStores/services/DataStoreScaleNodeModal.module.less","components/dbUsers/ConnectionAssistantForm.module.less","components/projects/dataStores/services/DataStoreNodeConfiguration.module.less","components/deployments/dashboard/DbDashboard.module.less","components/deployments/dashboard/LbDashboard.module.less","components/dbUsers/DatabaseGrowthChart.module.less","components/dbUsers/DatabaseGrowthTable.module.less","components/ccx/common/CcxSectionHeader.module.less","components/backups/IncrementalCreateDatastoreButton.module.less","components/backups/IncrementalRestoreButton.module.less","components/backups/RestoringBackups.module.less","components/eventViewer/EventViewer.module.less","components/eventViewer/EventsTable.module.css","components/deployments/services/AddServiceDatabaseVendorStep.module.less","components/deployments/services/WizardFormConfigurationStep3.module.less","components/organization/Organization.module.less","components/organization/organizationInfo/OrganizationMembers.module.less","components/layout/AppHeader.module.less","components/layout/AppLogo.module.less","components/layout/AppUserMenu.module.less","components/layout/Organizations.module.less","components/deployments/dashboard/PostgreSqlDbDashboard.module.less","components/deployments/dashboard/MysqlDbDashboard.module.less","components/ccx/common/AppForm.module.less","components/projects/dataStores/settings/DatastoreSettingsDbParameters.module.less","components/projects/dataStores/DataStore.module.less"],"names":["module","exports","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","LazyLoader","_ref","active","avatarShape","buttonShape","rows","size","type","testId","_jsx","children","_Skeleton","paragraph","className","styles","LazyLoaderMargin","Avatar","shape","Button","Image","Input","_Spin","AppLabeledComponent","label","isInline","softText","_jsxs","AppLabeledRowComponent","AppLabeledColComponent","AppLabeledComponentLabelSoft","AppLabeledComponentLabel","concat","AppLabeledComponentChildren","AppRangePicker","onChange","value","disabled","quickRanges","RangePicker","_DatePicker","_Space","_Radio","Group","optionType","target","AppRangePickerRadio","_ref2","index","DeploymentDashboardOptions","onSummaryChange","deployment","tabsOptions","setTabsOptions","useState","useEffect","DeploymentDashboardOptionsChartSetRadio","val","convertEnvToBoolean","envVar","CDN_URL","EXTERNAL_CSS_URL","window","FEAS_ENV","process","REACT_APP_EXTERNAL_CSS_URL","undefined","StripePK","STRIPE_PK","REACT_APP_STRIPE_PK","AppLogoUrl","BASE_DOMAIN","REACT_APP_BASE_DOMAIN","_window","REACT_APP_LOGO_URL","AppFaviconUrl","_window2","REACT_APP_FAVICON_URL","EULALink","_window3","EULA_URL","vpcDisabled","_window4","VPC_DISABLED","billingDisabled","_window5","BILLING_DISABLED","userMenuDisabled","_window6","ONBOARDING_DISABLED","_window7","USER_MENU_DISABLED","hideCloudProvider","_window8","VOLUME_SIZE_INPUT_UNIT_DISABLED","_window9","DEPLOYMENT_SUMMARY_NETWORK_VPC_DISABLED","_window10","DEPLOYMENT_SUMMARY_NETWORK_TYPE_DISABLED","_window11","DEPLOYMENT_SUMMARY_NETWORK_AZ_DISABLED","_window12","DEPLOYMENT_SUMMARY_IOPS_DISABLED","_window13","HIDE_CLOUD_PROVIDER","showNotification","_window14","SHOW_NOTIFICATION_BUTTON","eulaEnabled","_window15","HIDE_FOOTER","_window16","EULA","hideHeader","_window17","HIDE_HEADER","hideBreadcrumbs","_window18","HIDE_BREADCRUMBS","hideFeedback","_window19","HIDE_FEEDBACK","REACT_APP_HIDE_FEEDBACK","usePrivateIPs","_window20","HIDE_PROJECT_NAME","_window21","USE_PRIVATE_IPS","API_VPC_V2","API_AUTH","API_STAT","API_DEPLOYMENT_V2","API_DEPLOYMENT_V3","API_BACKUP","API_DB_CONFIGURATION","API_V2_DEPLOYMENT","DB_LOGS","DB_PARAMETERS_GROUP","LEGACY","ORGANIZATIONS","INVITES","MEMBERS","AUTH_APP_URL","_window22","RBAC_ENABLED","_window23","REACT_APP_RBAC_ENABLED","RBAC_DEBUG_MODE","_window24","REACT_APP_RBAC_DEBUG_MODE","AUTH_REDIRECT_URL","_window25","REACT_APP_AUTH_REDIRECT_URL","WRONG_GLOBAL_REDIRECT_URL","_window26","GLOBAL_REDIRECT_URL","_window27","AUTH_UI_APP_DISABLED","REACT_APP_AUTH_UI_APP_DISABLED","AUTOSCALE_STORAGE_PERCENTAGE","REACT_APP_AUTOSCALE_STORAGE_PERCENTAGE","AUTOSCALE_STORAGE_THRESHOLD","REACT_APP_AUTOSCALE_STORAGE_THRESHOLD","APP_THEME","REACT_APP_THEME","STATUS_OK","STATUS_ERROR","STATUS_RUNNING","STATUS_FINISHED","TYPE_ADD","TYPE_REMOVE","TYPE_VOLUME_SIZE","TYPE_PROMOTE_REPLICA","TYPE_UPGRADE_SERVERS","TYPE_WORK","TYPE_MODIFYDBCONFIG","TYPE_DEPLOY_DATASTORE","TYPE_DESTROY_DATASTORE","TYPE_REPAIR_NODE","TYPE_RESTORE_BACKUP","TYPE_CHANGE_VOLUME_TYPE","JOB_TYPE_CHANGE_VOLUME_TYPE","JOB_TYPE_FAILOVER","JOB_TYPE_REBOOT_NODE","JOB_TYPE_DISABLE_READONLY","JOB_TYPE_ENABLE_READONLY","Job","constructor","props","createdAt","data","finishedAt","jobId","startedAt","user","status","text","messages","this","finished_at","job_id","started_at","created_at","isStatusOk","toUpperCase","isStatusError","isStatusRunning","isStatusFinished","isAddNode","isRemoveNode","isVolumeScale","getStatusText","getStatusType","getRunningStatusTextByType","getDescription","relatedNode","forType","_this$data","nodesAdded","ToAdd","length","name","singularOrPlural","_this$data2","nodesRemoved","ToRemove","_this$data3","newSize","NewSize","nodeName","getHostnameOrIP","_this$data4","reason","getDateForEventViewer","fqdn","includes","split","splittedFqdn","normalizeHostPort","host","port","primaryRole","sortNodesByRole","nodes","primaryNodes","filter","node","role","otherNodes","sort","a","b","localeCompare","getNonErroredJobs","jobs","_jobs$filter","job","isRestoringDatastore","restoringJobs","find","isSyncingParameters","syncingJobs","count","excludeFakeAddresses","email","wrapDbParameterValues","recordValues","defaultParameters","result","key","entries","currentValue","defaultValue","default_value","description","min","max","getThemeIllustrationColor","getStripeErrorMessage","error","_errorMessage$split$","errorMessage","message","jsonStartIndex","lastIndexOf","jsonEndIndex","jsonStr","substring","JSON","parse","trim","parseError","_errorMessage$split$2","toString","isUserDisconnected","navigator","onLine","capitalizeFirstLetter","string","charAt","slice","setLocalStorage","localStorage","setItem","stringify","getLocalStorage","getItem","isActiveUser","userId","recordId","isAdmin","recordRole","replaceIfRedis","replaceAll","ApiService","getApiUrl","version","request","method","path","responseData","headers","response","fetch","credentials","body","json","admin","location","href","encodeURIComponent","err","ok","_responseData","statusText","error_fields","errorFields","dayjs","extend","relativeTime","FriendlyDateTime","date","Date","getFriendlyDate","fromNow","getFullDate","format","getDate","getTime","CMON_NODETYPE_GALERA","CloudInstance","adminPort","cloudProvider","clusterUuid","disks","formattedNodeType","hostStatus","hostType","hostUuid","hostname","icon","instance","instanceId","instanceType","lastSeen","lastSeenAt","lastSeenFull","listeningPort","listeningPortRo","nodeType","onlineFor","publicIp","privateIp","region","securityGroup","serviceStartedAt","subnet","uniqueId","updatedAt","vpc","admin_port","host_uuid","cluster_uuid","cloud_provider","host_type","instance_id","instance_type","public_ip","private_ip","security_group","updated_at","service_started_at","unique_id","last_seen_at","host_status","node_type","listening_port","listening_port_ro","getFormattedNodeType","getFqdn","_this$fqdn","arguments","getRoleName","isMaster","isSlave","getServiceConnectionName","getFqdnWithRole","short","getFqdnPortWithRole","isDb","isGalera","isPostgreSql","isLb","isProxySql","isHaProxy","isMySql","console","log","isMSSQL","isRedis","isOk","isError","getFqdnPort","DbNode","super","getHostPort","Deployment","_props$database_nodes","dataStoreUuid","dbNodes","uuid","database_nodes","n","getDbNodes","isClusterPostgreSql","getUniqueHostsByNodeType","dbHosts","v","i","indexOf","getHosts","getHostDetails","getNodeType","getHostName","dbNode","API_URL","DataStoreService","getDataStore","useDataStore","loading","setLoading","setError","dataStore","setDataStore","refresh","async","SingleDataStoreService","load","StatService","getMemoryStats","from","to","getQueryString","getNetStats","getDiskStats","getCpuStats","getSqlStats","getDbStats","getTcpStats","getNdbStats","getProxySqlStats","getMongoStats","getHaProxyStats","getAggregatedMySqlStats","queryStr","getAggregatedPostgreSqlStats","CmonCpuStat","busy","cpuId","cpuMhz","cpuModelName","cpuPhysicalId","cpuTemp","created","guest","idle","interval","ioWait","irq","loadAvg1","loadAvg15","loadAvg5","sampleEnds","sampleKey","serverId","steal","sys","uptime","cpuid","cpumhz","cpumodelname","cpuphysicalid","cputemp","iowait","loadavg1","loadavg15","loadavg5","sampleends","samplekey","serverid","CmonDiskStat","blocksize","device","free","mountpoint","reads","readsPerSec","sectorsRead","sectorsWritten","total","utilization","writes","writesPerSec","readspersec","sectorsread","sectorswritten","writespersec","CmonMemoryStat","memoryUtilization","pgpgIn","pgpgOut","pswpIn","pswpOut","ramBuffers","ramCached","ramFree","ramFreeMin","ramTotal","swapFree","swapTotal","swapUtilization","memoryutilization","pgpgin","pgpgout","pswpin","pswpout","rambuffers","ramcached","ramfree","ramfreemin","ramtotal","swapfree","swaptotal","swaputilization","CmonNetStat","interface","rxBytes","rxDrops","rxErrors","rxFrames","rxMulticasts","rxPackets","rxSpeed","txBytes","txDrops","txErrors","txPackets","txSpeed","AppEmpty","defaultImage","_Empty","AppEmptyMessage","image","EmptyState","style","width","color","FriendlyTimestamp","timestamp","getFormattedFullDate","getFormattedDate","getFormattedTime","ChartsContext","createContext","AppChartArea","config","chartConfig","setChartConfig","meta","xValue","tickMethod","chartsContext","useContext","chartRange","xAxis","mask","tickInterval","Area","AppChartLiquid","ref","useRef","Liquid","chartRef","AppChartLine","onClick","downloadImage","Line","AppTable","columns","rowKey","footer","bordered","expandedRowRender","rowExpandable","pagination","expandable","onRow","onExpand","customIcon","expandableIconVariant","scroll","x","_Table","dataSource","locale","emptyText","EmptyTableImage","NoArchive","record","expandableRowContent","expandIcon","expanded","_Button","UpOutlined","DownOutlined","RightOutlined","AppTableHeader","top","AppChartSummary","title","dataIndex","align","hideOnSinglePage","_Fragment","AppLoading","AppLoadingContainer","AppChartHistogram","Histogram","AppChartTinyArea","TinyArea","AppChartColumn","Column","AppChart","summary","displaySummary","getChartComponent","chart","_data","percent","_config$title","AppChartEmptyMessage","AppChartEmpty","AppChartEmptyHeader","_config$title2","_config$title3","_config$title4","_data2","_data3","yValue","Math","round","AppChartNoBorder","ChartCustomTooltip","content","ChartCustomTooltipTitle","ChartCustomTooltipContent","c","ChartCustomTooltipRow","ChartCustomTooltipColor","backgroundColor","ChartCustomTooltipLabel","ChartCustomTooltipValue","ChartCustomTooltipSummary","CpuUsageChart","height","chartData","setChartData","setSummary","formattedData","stat","series","flat","setChartSummary","sum","avg","forEach","s","d","dataSummary","serie","toFixed","visible","autoFit","xField","yField","yAxis","formatter","item","animation","seriesField","tooltip","customContent","tooltipData","getTitle","_data$","_d$data","_d$data2","getSummary","reduce","accumulator","DiskIopsChart","padding","DiskIOUtilizationChart","reducer","current","statistic","DiskSpaceUsageChart","numbro","parseInt","output","base","spaceSeparated","mantissa","DiskThroughputChart","prettyBytes","LoadAvgChart","NetworkUsageChart","RamUsageChart","RamUtilizationChart","HostCompareDashboard","hidden","selectedNodes","stats","memoryStats","memoryStatsRefresh","memoryStatsLoading","updating","setUpdating","setStats","details","Promise","all","dd","init","useMemoryStatsCompare","cpuStats","cpuStatsRefresh","cpuStatsLoading","useCpuStatsCompare","netStats","netStatsRefresh","netStatsLoading","useNetStatsCompare","diskStats","diskStatsRefresh","diskStatsLoading","useDiskStatsCompare","memoryInterval","setMemoryInterval","cpuInterval","setCpuInterval","netInterval","setNetInterval","diskInterval","setDiskInterval","refreshInterval","setRefreshInterval","setInterval","clearInterval","_Row","gutter","xs","sm","md","lg","xl","xxl","idx","_Col","HostCompareDashboardRow","HostCompareDashboardCol","MysqlConnectionsChart","connectionsMySql","MysqlComDeleteChart","comDelete","MysqlComReplaceChart","comReplace","MysqlComSelectChart","comSelect","MysqlComUpdateChart","comUpdate","MysqlComInsertChart","comInsert","CmonSqlStat","abortedClients","abortedConnects","bytesReceived","bytesSent","connectionsPostgreSql","createdTmpDiskTables","createdTmpFiles","createdTmpTables","handlerDelete","handlerReadFirst","handlerReadKey","handlerReadLast","handlerReadNext","handlerReadPrev","handlerReadRnd","handlerReadRndNext","handlerUpdate","handlerWrite","innodbBufferPoolPagesData","innodbBufferPoolPagesDirty","innodbBufferPoolPagesFlushed","innodbBufferPoolPagesFree","innodbBufferPoolPagesMisc","innodbBufferPoolPagesTotal","innodbDataFsyncs","innodbDataPendingFsyncs","innodbDataPendingReads","innodbDataPendingWrites","innodbDataRead","innodbDataReads","innodbDataWrites","innodbDataWritten","innodbLogWaits","innodbOsLogFsyncs","innodbOsLogPendingFsyncs","innodbOsLogPendingWrites","innodbOsLogWritten","innodbPagesCreated","innodbPagesRead","innodbPagesWritten","openedTables","openTables","queries","questions","replicationLag","selectFullJoin","selectFullRangeJoin","selectRange","selectRangeCheck","selectScan","slowQueries","threadsCached","threadsConnected","threadsCreated","threadsRunning","wsrepFlowControlPaused","wsrepFlowControlPausedNs","wsrepFlowControlRecv","wsrepFlowControlSent","wsrepLocalBfAborts","wsrepLocalRecvQueue","wsrepLocalRecvQueueAvg","wsrepLocalRcvQueueMax","wsrepLocalRcvQueueMin","wsrepLocalSendQueue","wsrepLocalSendQueueAvg","wsrepLocalSendQueueMax","wsrepLocalSendQueueMin","wsrepReceivedBytes","wsrepReplicatedBytes","wsrepReplDataBytes","wsrepReplKeysBytes","wsrepReplOtherBytes","blocksHit","blocksRead","commits","rollbacks","rowsDeleted","rowsFetched","rowsInserted","rowsUpdated","transactions","ABORTED_CLIENTS","ABORTED_CONNECTS","BYTES_RECEIVED","BYTES_SENT","COM_DELETE","COM_INSERT","COM_REPLACE","COM_SELECT","COM_UPDATE","connections","CREATED_TMP_DISK_TABLES","CREATED_TMP_FILES","CREATED_TMP_TABLES","HANDLER_DELETE","HANDLER_READ_FIRST","HANDLER_READ_KEY","HANDLER_READ_LAST","HANDLER_READ_NEXT","HANDLER_READ_PREV","HANDLER_READ_RND","HANDLER_READ_RND_NEXT","HANDLER_UPDATE","HANDLER_WRITE","INNODB_BUFFER_POOL_PAGES_DATA","INNODB_BUFFER_POOL_PAGES_DIRTY","INNODB_BUFFER_POOL_PAGES_FLUSHED","INNODB_BUFFER_POOL_PAGES_FREE","INNODB_BUFFER_POOL_PAGES_MISC","INNODB_BUFFER_POOL_PAGES_TOTAL","INNODB_DATA_FSYNCS","INNODB_DATA_PENDING_FSYNCS","INNODB_DATA_PENDING_READS","INNODB_DATA_PENDING_WRITES","INNODB_DATA_READ","INNODB_DATA_READS","INNODB_DATA_WRITES","INNODB_DATA_WRITTEN","INNODB_LOG_WAITS","INNODB_OS_LOG_FSYNCS","INNODB_OS_LOG_PENDING_FSYNCS","INNODB_OS_LOG_PENDING_WRITES","INNODB_OS_LOG_WRITTEN","INNODB_PAGES_CREATED","INNODB_PAGES_READ","INNODB_PAGES_WRITTEN","OPENED_TABLES","OPEN_TABLES","QUERIES","QUESTIONS","REPLICATION_LAG","SELECT_FULL_JOIN","SELECT_FULL_RANGE_JOIN","SELECT_RANGE","SELECT_RANGE_CHECK","SELECT_SCAN","SLOW_QUERIES","THREADS_CACHED","THREADS_CONNECTED","THREADS_CREATED","THREADS_RUNNING","WSREP_FLOW_CONTROL_PAUSED","WSREP_FLOW_CONTROL_PAUSED_NS","WSREP_FLOW_CONTROL_RECV","WSREP_FLOW_CONTROL_SENT","WSREP_LOCAL_BF_ABORTS","WSREP_LOCAL_RECV_QUEUE","WSREP_LOCAL_RECV_QUEUE_AVG","WSREP_LOCAL_RECV_QUEUE_MAX","WSREP_LOCAL_RECV_QUEUE_MIN","WSREP_LOCAL_SEND_QUEUE","WSREP_LOCAL_SEND_QUEUE_AVG","WSREP_LOCAL_SEND_QUEUE_MAX","WSREP_LOCAL_SEND_QUEUE_MIN","WSREP_RECEIVED_BYTES","WSREP_REPLICATED_BYTES","WSREP_REPL_DATA_BYTES","WSREP_REPL_KEYS_BYTES","WSREP_REPL_OTHER_BYTES","CONNECTIONS","useSqlStatsCompare","MySqlDbCompareDashboard","sqlStats","sqlStatsRefresh","sqlStatsLoading","sqlInterval","setSqlInterval","MysqlDbCompareDashboard","MysqlDbCompareDashboardRow","MysqlDbCompareDashboardCol","PostgreSqlConnectionsChart","PostgreSqlCommitsChart","PostgreSqlRollbacksChart","PostgreSqlRowsDeletedChart","PostgreSqlRowsFetchedChart","PostgreSqlRowsInsertedChart","PostgreSqlRowsUpdatedChart","PostgreSqlDbCompareDashboard","PostgreSqlDbCompareDashboardRow","PostgreSqlDbCompareDashboardCol","DbCompareDashboard","CmonProxySqlStat","activeTransactions","backendQueryTimeNsec","clientConnectionsAborted","clientConnectionsConnected","clientConnectionsCreated","comAutoCommit","comAutoCommitFiltered","comCommit","comCommitFiltered","comRollback","comRollbackFiltered","connPoolMemoryBytes","mysqlBackendBuffersBytes","mysqlFrontendBuffersBytes","mysqlMonitorWorkers","mysqlSessionInternalBytes","mysqlThreadWorkers","queriesBackendsBytesRecv","queriesBackendsBytesSent","queryCacheBytesIn","queryCacheBytesOut","queryCacheCountGet","queryCacheCountGetOk","queryCacheCountSet","queryCacheEntries","queryCacheMemoryBytes","queryCachePurged","queryProcessorTimeNsec","serversTableVersion","serverConnectionsAborted","serverConnectionsConnected","serverConnectionsCreated","sqlite3MemoryBytes","ACTIVE_TRANSACTIONS","BACKEND_QUERY_TIME_NSEC","CLIENT_CONNECTIONS_ABORTED","CLIENT_CONNECTIONS_CONNECTED","CLIENT_CONNECTIONS_CREATED","COM_AUTOCOMMIT","COM_AUTOCOMMIT_FILTERED","COM_COMMIT","COM_COMMIT_FILTERED","COM_ROLLBACK","COM_ROLLBACK_FILTERED","CONNPOOL_MEMORY_BYTES","MYSQL_BACKEND_BUFFERS_BYTES","MYSQL_FRONTEND_BUFFERS_BYTES","MYSQL_MONITOR_WORKERS","MYSQL_SESSION_INTERNAL_BYTES","MYSQL_THREAD_WORKERS","QUERIES_BACKENDS_BYTES_RECV","QUERIES_BACKENDS_BYTES_SENT","QUERY_CACHE_BYTES_IN","QUERY_CACHE_BYTES_OUT","QUERY_CACHE_COUNT_GET","QUERY_CACHE_COUNT_GET_OK","QUERY_CACHE_COUNT_SET","QUERY_CACHE_ENTRIES","QUERY_CACHE_MEMORY_BYTES","QUERY_CACHE_PURGED","QUERY_PROCESSOR_TIME_NSEC","SERVERS_TABLE_VERSION","SERVER_CONNECTIONS_ABORTED","SERVER_CONNECTIONS_CONNECTED","SERVER_CONNECTIONS_CREATED","SQLITE3_MEMORY_BYTES","ProxySqlQuestionsChart","ProxySqlSlowQueriesChart","ProxySqlActiveTransactionsChart","ProxySqlQueryCacheMemoryBytesChart","ProxySqlClientConnectionsChart","ProxySqlServerConnectionsChart","ProxySqlLbCompareDashboard","proxySqlStats","proxySqlStatsRefresh","proxySqlStatsLoading","useProxySqlStatsCompare","ProxySqlLbCompareDashboardRow","ProxySqlLbCompareDashboardCol","CmonHaProxyStat","bIn","bOut","compByp","compIn","compOut","compRsp","connRate","connRateMax","connTot","dCon","dReq","dResp","dSes","eReq","hrsp1xx","hrsp2xx","hrsp3xx","hrsp4xx","hrsp5xx","hrspOther","iId","intercepted","mode","pid","pxName","rate","rateLim","rateMax","reqRate","reqRateMax","reqTot","scur","sId","sLim","sMax","sTot","svName","bin","bout","comp_byp","comp_in","comp_out","comp_rsp","conn_rate","conn_rate_max","conn_tot","dcon","dreq","dresp","dses","ereq","hrsp_1xx","hrsp_2xx","hrsp_3xx","hrsp_4xx","hrsp_5xx","hrsp_other","iid","pxname","rate_lim","rate_max","req_rate","req_rate_max","req_tot","sid","slim","smax","stot","svname","isFrontend","isBackend","HaProxyFrontendTrafficChart","HaProxyBackendTrafficChart","HaProxyLbCompareDashboard","haProxyStats","haProxyStatsRefresh","haProxyStatsLoading","useHaProxyStatsCompare","HaProxyLbCompareDashboardRow","HaProxyLbCompareDashboardCol","LbCompareDashboard","usePiwikPro","trackPageView","pageName","PageViews","trackEvent","category","action","CustomEvent","INITIATED_ADDING_NEW_DATASTORE","ERROR_404_PAGE","CLICK_EVENT","DATASTORE_BACKUP_SETTINGS_UPDATED","DATASTORE_ADD_NEW_DB_USER_TRIGGERED_SUCCESSFULLY","CREATE_NEW_DATASTORE_SUCCESS","CREATE_NEW_DATASTORE_ERROR","CREATE_NEW_VPC_SUCCESS","CREATE_NEW_VPC_ERROR","DATASTORE_EXTEND_STORAGE_TRIGGERED_SUCCESSFULLY","DATASTORE_EXTEND_STORAGE_TRIGGERED_FAILED","withRouter","projectUuid","tab","useParams","setDisplaySummary","rangeFrom","setRangeFrom","rangeTo","setRangeTo","range","setRange","currentTab","setCurrentTab","setSelectedNodes","availableNodes","setAvailableNodes","hosts","field","setField","fieldSetup","placeholder","options","availableDbNodes","filteredDbHosts","newField","TabPane","_Tabs","Option","_Select","handleNodeChange","_message","extraTabContent","DeploymentCompareExtraTabContent","DeploymentCompareExtraTabContentSelect","showSearch","optionFilterProp","onDeselect","maxTagCount","filterOption","input","option","toLowerCase","DeploymentCompare","_Card","DeploymentCompareRangePickerCard","DeploymentCompareRangePickerCardContent","DeploymentCompareRangePickerCardContentLeft","DeploymentCompareRangePickerCardContentRight","handleRangeChange","minutes","hours","days","setTime","toISOString","StickyContainer","tabBarExtraContent","defaultActiveKey","DeploymentCompareTabs","t","renderTabBar","DefaultTabBar","Sticky","bottomOffset","DeploymentCompareCustomTabBar","tabBarGutter","CloudProviderRegion","countryCode","continentCode","city","displayCode","getMappedValue","CLOUD_PROVIDER_SAFESPRING","CLOUD_PROVIDER_CITYCLOUD","CLOUD_PROVIDER_VULTR","CLOUD_PROVIDER_LINTASARTA","CLOUD_PROVIDER_ELASTX","CLOUD_PROVIDER_SYSELEVEN","CloudProvider","_props$regions","regions","logo","full_name","group","r","getCloudProviderLogo","isAws","isSafespring","isCityCloud","isGoogle","isVMWare","isKubevirt","isVultr","isLintasarta","isElastx","isSyseleven","isPappaya","isOpenStack","getFullName","getRegionContinents","allContinents","Array","Set","getDefaultRegion","Country","ContentService","getCidrs","getProviders","getCountries","getClientIp","ip","getInstanceSize","cloudCode","getDeploymentWizardOptions","useContentProviders","cloudProviders","setCloudProviders","providerList","StretchedClick","handleClick","AppConfirmDialog","alertTitle","onOk","onCancel","stretchedClick","actionIcon","confirmPhrase","confirmHintText","confirmPlaceholder","critical","inLined","confirm","_Modal","setVisible","form","_Form","useForm","handleClickIcon","ExclamationCircleOutlined","AppConfirmationIcon","AppConfirmationModal","handleOk","phrase","getFieldValue","setFieldsValue","confirmation","textAlign","classNames","AppConfirmDialogDisabled","AppConfirmDialogCritical","_Tooltip","open","handleCancel","destroyOnClose","_Alert","AppConfirmDialogAlertMessage","AppConfirmDialogAlertDescription","showIcon","layout","scrollToFirstError","onKeyUp","event","Item","noStyle","_Input","autoComplete","AppConfirmationInput","Helpers","VpcStatus","Vpc","cloudspace","cloud","project","cidrIpv4Block","state","stateMessage","datastores","subnets","vpc_name","vpc_uuid","cidr_ipv4_block","state_message","getVpcName","_this$state","OK","_this$state2","ERROR","getName","isStatusWarning","_this$state3","WARNING","getStatusMessage","getCidrIpv4Block","getState","getVpcStatus","VpcAwsAvailabilityZone","availabilityZoneId","VpcAwsSubnet","availabilityZone","availableIpAddressCount","defaultForAz","subnetId","vpcId","available_ip_address_count","availability_zone","availability_zone_id","default_for_az","subnet_id","vpc_id","VpcPeeringState","VpcPeering","_props$state","targetCloudRegion","targetCloudUserId","targetCloudVpcId","targetCidr","target_cloud_region","target_cloud_user_id","target_cloud_vpc_id","target_cidr","getStatus","ACTIVE","FAILED","EXPIRED","REJECTED","DELETED","DELETING","PROVISIONING","isStatusDeleted","isStatusDeleting","isStatusPending","PENDING","getExpirationTime","BASE_PATH","replace","BaseAPI","configuration","basePath","axios","globalAxios","RequiredError","msg","DUMMY_BASE_URL","assertParamExists","functionName","paramName","paramValue","setFlattenedQueryParams","urlSearchParams","parameter","isArray","currentKey","has","append","set","setSearchParams","url","searchParams","URLSearchParams","search","_len","objects","_key","serializeDataIfNeeded","requestOptions","nonString","isJsonMime","toPathString","pathname","hash","createRequestFunction","axiosArgs","axiosRequestArgs","VPCApiFp","localVarAxiosParamCreator","vpcsGet","localVarUrlObj","URL","baseOptions","localVarRequestOptions","localVarQueryParameter","headersFromBaseOptions","vpcsPost","vpcsPostRequest","localVarHeaderParameter","vpcsVpcIdDelete","localVarPath","String","vpcsVpcIdGet","update","VPCApiAxiosParamCreator","localVarAxiosArgs","VPCPeeringApiFp","vpcsVpcIdPeeringsGet","vpcsVpcIdPeeringsPeeringIdDelete","peeringId","vpcsVpcIdPeeringsPeeringIdGet","vpcsVpcIdPeeringsPost","vpcsVpcIdPeeringsPostRequest","VPCPeeringApiAxiosParamCreator","Configuration","param","apiKey","username","password","accessToken","formDataCtor","mime","jsonMime","RegExp","test","SDK_AXIOS_DEFAULT_BASE_OPTIONS","validateStatus","transformResponse","_response","_response2","vpcApiInstance","then","vpcPeeringApiInstance","VpcService","getAllAvailabilityZone","az","getAllVpc","_response$data","vpcs","getTotalVpc","_response$data2","getVpc","_ref3","vpcUuid","createVpc","_ref4","vpcName","deleteVpc","_ref5","getAllSubnet","_ref6","createSubnet","_ref7","cidrBlock","requestData","cidr_block","deleteSubnet","_ref8","getAllPeer","_ref9","getVpcPeer","_response$data$peerin","peerings","createPeer","_ref10","accepterCidr","accepterOwnerId","accepterRegion","accepterVpcId","deletePeer","_ref11","AppLabeledIconStatus","AppLabeledIconStatusIcon","AppLabeledIconStatusLabel","CcxIconCheckCircle","twoToneColor","CheckCircleOutlined","CcxIconExclamationCircle","AppFormSlider","sliderInputValue","setSliderInputValue","baseTestId","showInputNumber","span","_Slider","marks","step","sliderStep","_InputNumber","AppFormInputNumber","parser","inputStep","AppFormFlagSelect","onPressEnter","AppFormInput","_option$props","CcxIconInfoCircleOutlined","InfoCircleOutlined","AppForm","fields","formClassName","useGrid","overideValidationFunction","formList","setFormList","sortedArray","sortByGroup","groupedItems","groupName","groupBy","push","hasOwnProperty","values","getFormComponent","_field$options","_field$options2","TextArea","allowClear","Password","onBlur","AppFormRadioGroupVertical","AppFormRadioGroupHorizontal","AppFormRadioGroupItemVertical","AppFormRadioGroupItemHorizontal","rawElement","_Switch","AppFormSwitch","AppFormInputNumberLeft","minValue","maxValue","addonAfter","maxLength","AppRow","getFieldErrors","f","hasErrors","helpText","errors","join","checkReservedIp","rule","validIpv4String","Validator","isValidIPv4String","ipV4","IPv4","valid","ipv4Range","IPv4CidrRange","fromCidr","isGreaterThanOrEquals","getFirst","isLessThanOrEquals","getLast","reject","checkCidr","isValidIPv4CidrNotation","checkIp","checkTimeDuration","checkPatterns","validators","pattern","validationRules","rules","required","validationName","minLength","validator","tips","AppFormTipIcon","help","GroupForm","extra","shouldUpdate","prevValues","currentValues","initialValue","ButtonModalForm","buttonText","buttonIcon","onSubmit","onSuccess","buttonType","buttonClassName","formValues","formLayout","disabledText","submitText","cancelText","leftCol","rightCol","onFormLoad","warningMessage","handleModalForcely","setErrorFields","initialFormValues","setInitialFormValues","resetFields","onSubmitButtonClick","validateFields","validateForm","getFieldsValue","onClose","onButtonClick","marginRight","ButtonModalFormTypeSimple","justify","initialValues","useContentCidrs","cidrs","setCidrs","resultList","useVpcs","setVpcs","CcxIconCloseCircleTwoTone","CloseCircleTwoTone","CreateVpcPeerButton","hideIcon","selectedVpcUuid","loadingProviders","loadingCidrs","loadingVpcs","refreshVpcs","fieldsSetup","step1","setFields","newStep1","newFields","newValues","newFormValues","CloudSyncOutlined","_notification","useVpcPeers","vpcIds","loaded","setLoaded","vpcPeers","setVpcPeers","ids","useHover","setValue","handleMouseOver","useCallback","handleMouseOut","removeEventListener","addEventListener","Hoverable","hoverRef","isHovered","HoverableIcon","AppButton","textSize","rest","CopyToClipboardText","preview","hoverable","nowrap","buttonProps","successMessage","showPreview","setIsHovered","handleMouseEnter","handleMouseLeave","copyMessage","selBox","document","createElement","position","left","opacity","appendChild","focus","select","execCommand","removeChild","onMouseEnter","onMouseLeave","CopyOutlined","placement","CopyToClipboardTextNowrap","CcxIconInfoCircleTwoTone","InfoCircleTwoTone","VpcPeers","history","useHistory","setCloud","setRegion","loadingPeers","peersLoaded","refreshPeers","setVpc","useVpc","tableData","setTableData","deleting","setDeleting","Panel","_Collapse","handleMenuOptionClick","_vpcPeers$filter","vpcPeering","vpcCidr","peerRegion","peerCidr","statusMessage","vpcPeeringConnectionId","ExpandableRowContent","header","_Descriptions","VpcPeersDescriptionItems","render","_record$statusMessage","statusClassName","statusIcon","VpcPeersStatusOk","VpcPeersStatusError","VpcPeersStatusWarning","VpcPeersExpirationTime","expirationTime","menu","_Menu","onConfirmDelete","destroyAll","catch","VpcPeersRowDropdownMenu","_Dropdown","overlay","trigger","MenuOutlined","_PageHeader","onBack","offset","VpcPeersButtons","VpcPeersContent","VpcPeersResults","VpcPeersCollapse","BillingAddress","country","line1","line2","postalCode","line_1","line_2","postal_code","BillingUserData","companyName","euVatId","firstName","lastName","company_name","eu_vat_id","first_name","last_name","SubscriptionBillingUser","stripeCustomerId","stripeSubscriptionId","userData","addressData","stripe_customer_id","stripe_subscription_id","user_data","address_data","user_id","getBillingAddress","getUserData","Subscription","billingUser","billing_user","isValid","Card","brand","default","expMonth","expYear","fingerprint","last4","exp_month","exp_year","getElegantBrandName","Coupon","amountOff","coupon","duration","durationInMonths","percentOff","amount_off","duration_in_months","percent_off","Invoice","amount","invoiceNumber","paymentMethod","pdf","currencyPrefix","currencySuffix","payment_method","currency_prefix","currency_suffix","getPaymentMethodString","_this$paymentMethod","_this$paymentMethod2","_this$paymentMethod3","card","SetupIntent","setupIntentID","paymentMethodID","setup_intent_id","payment_method_id","BillingService","checkUserSubscription","createBillingUser","address","createUserSubscription","editUserSubscription","deleteUserSubscription","getCards","_result$cards","cards","addCard","cardToken","token","createBillingIntent","deleteCard","cardId","checkCoupon","getCoupons","addCoupon","deleteCoupon","setDefaultCard","getInvoices","_result$invoices","invoices","getNextInvoice","invoice","AppGridTable","isDatastore","AppGridTableContainer","AppGridTableSmallContainer","AppGridTableHeader","AppGridTableHeaderCol","_r$columns","cssClassname","AppGridTableDataRow","borderAlert","AppGridTableDataRowAlert","AppGridTableDataRowNormal","row","cssClassName","AppGridTableDataColCenter","AppGridTableDataColEnd","AppGridTableDataColStart","AppGridTableDataColDisabled","AppGridTableDataCol","tip","statusOverlayText","indicator","LoadingOutlined","AppGridTableDeletingIcon","spin","IconLabelStatusError","IconLabelStatusOk","PrettyNumber","precision","prefix","sufix","formattedValue","useCards","setCards","setBillingUser","countries","isEu","CountryService","listCountries","getCountryName","countrycode","AppFlagIcon","flagCode","setFlagCode","Flag","hasBorderRadius","hasDropShadow","BillingForm","BillingFormChildren","Address","useAppDispatch","useDispatch","useAppSelector","useSelector","AddCard","drawer","setCardToken","submitDisabled","stripe","useStripe","elements","useElements","subscription","cardElementOptions","fontSize","lineHeight","fontSmoothing","iconColor","fontFamily","fontVariant","invalid","complete","hidePostalCode","CheckoutCardElementContainer","CardNumberElement","CardExpiryElement","CardCvcElement","vatFieldsSetup","login","billingFieldsSetup","setBillingFieldsSetup","setCountries","cardForm","setCardForm","billingForm","AppFormFlagsSelect","validateBillingForm","cardNumber","getElement","cardExpiry","cardCvc","createToken","_cardToken","subscriptionUser","handleCreateUser","intent","handleSetupIntent","AddCardFormFields","AddCardBilling","AppIcon","ICON_SIZE_SMALL","sizePx","sizeStr","ICON_SIZE_XSMALL","ICON_SIZE_MEDIUM","ICON_SIZE_LARGE","ICON_SIZE_XLARGE","ICON_SIZE_2XLARGE","Icon","component","src","alt","React","cloneElement","CcxLogo","cssSize","CcxLogoIconBackground","CcxContextualMenuIcon","EllipsisOutlined","PaymentCard","deleteIcon","cardObject","setCardObject","setShowIcon","makeDefault","expired","DeleteOutlined","defaultStatus","PaymentMethodDrawerStatus","PaymentMethodDrawerStatusDotGreen","expiryStatus","PaymentMethodDrawerStatusDotRed","month","expiry","substr","brandName","expirySpan","PaymentCardDetails","PaymentLogo","PromoCodeCard","couponObject","setCouponObject","PromoCodeCardDetails","PaymentMethodModal","promoForm","promoModal","setPromoModal","refreshCoupon","loadingCoupon","setCoupon","useCoupons","stripePromise","loadStripe","handleClose","handlePromoAdd","formCoupon","showModal","PaymentMethodModalTitle","Elements","PaymentMethodModalCards","PaymentMethodModalCouponTitle","AppSupportLink","ChangePaymentMethod","CreditCardOutlined","CustomerServiceOutlined","CurrentBalance","currentBalance","suffix","QuestionOutlined","CurrentBillingPeriod","currentBillingPeriod","PaymentMethod","PaymentMethodLogo","PaymentsInvoices","setCurrentBalance","setCurrentBillingPeriod","setPaymentMethod","setInvoices","useInvoices","nextInvoice","loadingNext","setNextInvoice","useNextInvoice","formatDate","mm","getMonth","yy","getFullYear","_lastInvoice$paymentM","_lastInvoice$paymentM2","lastInvoice","StatusComponent","tableColumns","PaymentsInvoicesStatus","PaymentsInvoicesStatusDotGreen","PaymentsInvoicesStatusDotRed","sorter","download","FilePdfOutlined","PaymentsInvoicesHeading","rel","FileTextOutlined","PaymentsInvoicesPaymentHistory","pageSize","AppBorderedPanel","ChangePasswordModal","isLoading","isVisible","onUpdatePassword","onChangeOldPassword","passwordValidations","setPasswordValidations","showPasswordRules","setShowPasswordRules","changeButton","setChangeButton","disableChangeButton","isFailed","validate","oldPassword","newPassword","confirmPassword","formValid","spinning","FormStyle","setFieldValue","ValidationFailure","FormDivider","_","onFocus","validatePasswordStrength","ValidationSuccess","marginTop","dependencies","JsonError","UnauthorizedApiError","AuthService","addr","assign","redirect","res","resData","updatePassword","AccountInfo","billingUserData","billingAddress","setIsVisible","showPasswordLoader","setShowPasswordLoader","direction","AccountInfoSpace","emailConfirmed","closeModal","isPasswordUpdated","Credentials","clientId","roles","revokedAt","lastUsedAt","expiresAt","secret","lastUsedFrom","client_id","revoked_at","last_used_at","expires_at","last_used_from","isActive","isExpired","now","isDisabled","isRevoked","canBeDisabled","canBeEnabled","canBeRevoked","canBeRemoved","AuthorizationService","getAllCredentials","clients","addCredentials","expirationHours","expires_in_hours","revokeCredentials","disableCredentials","enableCredentials","removeCredentials","DotLabelStatus","glow","dotCss","labelCss","DotLabelStatusDotGreenGlow","DotLabelStatusDotGreen","DotLabelStatusLabelGreen","DotLabelStatusDotRedGlow","DotLabelStatusDotRed","DotLabelStatusLabelRed","DotLabelStatusDotOrangeGlow","DotLabelStatusDotOrange","DotLabelStatusLabelOrange","DotLabelStatusDotBlueGlow","DotLabelStatusDotBlue","DotLabelStatusLabelBlue","DotLabelStatusDotGrayGlow","DotLabelStatusDotGray","DotLabelStatusLabelGray","AppCodeCard","usageExample","alignItems","AppCodeCardCol","AppCodeCardCopyIcon","AuthorizationModal","show","setShow","AuthorizationModalSecret","CredentialsActions","disableCrendentials","enableCrendentials","removeCrendentials","HOUR","Authorization","showResult","setShowResult","setExtra","newCredentials","setNewCredentials","setCredentials","useCredentials","selectedTimeUnit","setSelectedTimeUnit","timeDuration","setTimeDuration","SelectAfter","ExpirationAddon","unit","isValidDuration","convertTimeToHours","moment","Number","asHours","utc","AuthorizationTable","Account","AccountTabs","destroyInactiveTabPane","Suspense","fallback","ProvisionService","updateDeployment","dataStoreName","dayOfWeek","startHour","endHour","proxySqlAdminPassword","autoscaleStorage","notifications","cluster_name","maintenance_settings","day_of_week","start_hour","end_hour","new_proxy_sql_password","spec","autoscale_storage","enabled","updateDeploymentSettings","datastoreUuid","settings","updateDatastoreStorage","updateStorage","storage","scaleUpDatastoreNodes","nodeData","add_nodes","specs","scaleUpNodes","nodesData","scaleDownDatastoreNodes","nodeUuids","remove_nodes","node_uuids","scaleDownNodes","removeDeployment","addDeployment","clusterName","clusterType","dbVendor","instanceSize","deploymentSize","diskSize","iops","cluster_type","database_vendor","instance_size","cluster_size","disk_size","addDeploymentV2","numberOfNodes","databaseVendor","databaseVendorType","tags","cloudRegion","volumeType","volumeSize","volumeIops","networkType","haEnabled","availabilityZones","backupId","parameterGroupId","general","db_vendor","db_version","parameter_group_id","cloud_region","volume_type","volume_size","volume_iops","network","network_type","ha_enabled","availability_zones","from_backup","backup_id","datastore_uuid","addNode","imageId","image_id","promoteReplica","new_master_node_id","removeNode","upgradeDatastore","canUpgradeTo","new_server_version","repairNode","rebootNode","ExpandableText","collapsedText","expandedText","showDateOnHover","setExpanded","SmallContainer","bottomChildren","middleChildren","topChildren","SmallContainerTop","SmallContainerMiddle","SmallContainerBottom","DataStoreInformation","isOnline","useOnlineStatus","setIsOnline","handleOnline","handleOffline","tooltipContent","DataStoreInformationTooltip","isAccessible","isOperable","isUnreachable","isUnderMaintenance","DataStoreInformationTop","Link","DataStoreInformationTopLongName","DataStoreInformationTopName","middle","DataStoreInformationMiddle","getUUID","bottom","createdAtFull","DataStoreStatus","currentJob","getCurrentJobs","getDataStoreStatus","isDeleting","isDeploying","getDeploymentProgressText","tooltipTitle","getNotes","getDataStoreStatusText","getLatestRunningJob","runningJob","DatastoreJobStatusIndicator","CloudProviderLogo","p","extended","CloudInformation","getCloudProvider","getFullCloudProviderName","preferredRegion","display_code","AppCdnSvg","widthPx","heightPx","filename","AppCdnIcon","CcxIcon1NodeDeployment","AppCdnLogo","AppLogoBrand","AppLogoBrandMardiaDb","useExtended","AppLogoBrandPostgreSql","AppLogoBrandPercona","AppLogoBrandRedis","AppLogoBrandMssql","DatabaseInformation","ds","isMariaDb","isPercona","getDbVendorName","db","dbVersion","getNumberOfNodes","TinyChartCustomTooltip","TinyChartCustomTooltipTitle","QueriesPerSecondChart","tiny","areaStyle","fill","annotations","start","end","stroke","lineDash","tickCount","getContent","_data$2","MonitorInstallationSpinner","MonitorInstallationMessage","DataStoreChart","subtract","useQueriesPerSecondStats","CcxIconStopOutlined","StopOutlined","NoChartAvailable","_circle","_circle2","_circle3","_extends","bind","call","apply","SvgCircle","svgRef","titleId","viewBox","xmlns","cx","cy","strokeWidth","ForwardRef","_path","SvgExclamationCircle","AppDeleteModal","datastore","service","toDelete","Text","_Typography","setShowModal","AppDeleteModalCol","AppDeleteModalIconStack","Circle","CircleIcon","AppDeleteCircleIcon","AppDeleteLabelCol","AppDeleteModalTitle","AppDeleteModalSubTitle","AppDeleteServiceInfo","AppDeleteServiceLabel","AppDeleteService","AppDeleteModalLogo","getDbIconName","getFQDN","getDbVendorVersion","getPermission","getClusterTypeName","AppDeleteInputCol","AppDeleteInput","AdditionalFields","newUser","new_user","TermsAccepted","TermsAndConditionsV1","PrivacyPolicyV1","UserScope","isOrganization","User","accountId","verifiedLevel","maxDataStores","pendingRemoval","allowNewsletters","termsAccepted","additionalFields","scopes","scope","isNewUser","getOrganizationId","_this$scopes$find","getUserId","getDefaultScope","defaultScope","localStorageOrg","getUserScope","currentScope","organizationsOptions","AUTH_SERVICE_URL","UsersService","check","logout","ProfileService","updateProfile","additional_fields","initialState","isSuccess","userCheck","createAsyncThunk","userScope","condition","userSlice","createSlice","reducers","extraReducers","builder","addCase","pending","fulfilled","payload","rejected","_action","_action$payload","_action$payload2","DATA_STORE_STATUS_DEGRADED","DATA_STORE_STATUS_UNREACHABLE","DATA_STORE_STATUS_MGMD_NO_CONTACT","DATA_STORE_STATUS_UNKNOWN","DATA_STORE_STATUS_NOT_STARTED","DATA_STORE_STATUS_MAINTENANCE","DATA_STORE_STATUS_STARTED","DATA_STORE_STATUS_CREATED","DATA_STORE_STATUS_DEPLOY_FAILED","DATA_STORE_STATUS_FAILURE","DATA_STORE_STATUS_SETUP_FAILED","DATA_STORE_STATUS_PENDING","DATA_STORE_STATUS_DELETING","DATA_STORE_STATUS_CREATING_CLUSTER_INFRA","DATA_STORE_STATUS_CREATING_CLUSTER","DATA_STORE_STATUS_CREATING_CLUSTER_LB","DATA_STORE_STATUS_CREATING_CLUSTER_FINAL","DATA_STORE_STATUS_RESTORING_BACKUP","cmonStatus","cluster_status","cluster_status_text","isDeploymentFailed","isStatusStartedOrDegraded","DB_VENDOR_MARIADB","DB_VENDOR_POSTGRESQL","DB_VENDOR_POSTGRESQL_V2","DB_VENDOR_PERCONA","DB_VENDOR_REDIS","DB_VENDOR_MSSQL","MARIADB_ICON","PERCONA_ICON","POSTGRESQL_ICON","REDIS_ICON","MSSQL_ICON","CLUSTER_TYPE_EPHEMERAL","DatabaseType","DbVendor","dbEndpoint","dbVendorLogo","database_version","database_endpoint","getIconName","isMariadb","isPostgresql","getDatabaseType","MYSQL","POSTGRES","REDIS","MSSQL","UNKNOWN","getVendorName","getDbEndpoint","DataStoreMaintenanceSettings","getDayOfWeek","getEndHour","getStartHour","DbAccount","database","privileges","getUsername","getPassword","getHost","getDatabase","DataStoreEmailNotificationsSettings","emails","getEmailsList","isEmailNotificationEnabled","DataStoreSpec","DbParameterSync","parameters","sync","DeploymentsItem","deploymentOptions","_props$db_account","_props$db_account2","_props$db_account3","_props$db_account4","_props$db_account5","clusterId","clusterStatus","clusterTypeName","deployProgress","highAvailability","maintenanceSettings","notOperableReason","operable","seenAt","sslEnabled","dbAccount","notes","cloudProviderFullName","replica_url","primary_url","can_upgrade_to","license","isCAAvailable","parameterGroupSync","account_id","azs","getCloudProviderGroup","cluster_type_name","cluster_id","deploy_progress","effective_disk_size","disk_type","high_availability","current_job","not_operable_reason","seen_at","ssl_enabled","Db","db_account","database_username","database_password","database_host","database_database","database_privileges","preferred_region","is_ca_available","parameter_group_sync","getAutoscaleStorage","getDbVendorType","getProviderName","getCloudProviderCode","getVolumeIops","canScaleNodes","getClusterType","canChangeVolumeType","isEphemeral","getServiceName","getDeploymentSizeDescription","_this$vpc","getVpcCidr","_this$vpc2","getTruncatedName","getMaintenanceDayOfWeek","getMaintenanceEndHour","getNotificationsEmailList","getMaintenanceStartHour","getDbAccount","isSingleAZ","getPrimaryUrl","getReplicaUrl","getVolumeType","getVolumeSize","deployOptions","instanceSizes","matchOption","getPrimaryReplicaUrl","urlArr","getScalingSizes","getNewNodesKind","hasStorage","getDatastoreCreationData","getDatabaseVendor","getDatabaseVersion","getParameterGroupId","isDbParameterGroupSyncd","dbParameterGroupStatus","Deployments","clusters","deployments","isAnyCritical","getAllCritical","isAnyWarning","getAllWarning","areAllGood","getAllGood","notDeletingLength","getNotDeleting","getByUuid","filtered","getVendorsForFiltering","getTagsForFiltering","tag","getActiveJobs","activeJobs","DataStoresService","getDataStores","paramString","totalItems","page","per_page","db_vendors","getAllDataStores","params","_getState","obj","objectToQueryParams","datastoresSlice","_action$payload3","_action$payload4","_action$payload5","_action$payload6","_action$payload7","_action$payload8","CAN_ADD_VPC","CAN_INVITES","CAN_SEE_INVITES","CAN_ADD_MEMBERS","CAN_ADD_FIREWALL","CAN_ADD_DATABASE","CAN_ADD_DATASTORE","CAN_ADD_DB_PARAMS","CAN_ADD_DATABASE_USER","CAN_RESTORE_DATASTORE","CAN_MODIFY_VPC","CAN_MODIFY_DB_PARAMS","CAN_MODIFY_DATASTORE","CAN_MODIFY_ORG_MEMBERS","CAN_MODIFY_ORGANIZATION","CAN_MODIFY_DATABASE_USERS","CAN_MODIFY_BACKUP_SETTINGS","CAN_MODIFY_BACKUP_SCHEDULE","CAN_MODIFY_DATASTORE_SETTINGS","CAN_DELETE_VPC","CAN_DELETE_MEMBER","CAN_DELETE_INVITES","CAN_DELETE_DATABASE","CAN_DELETE_DB_PARAMS","CAN_DELETE_DATASTORE","CAN_DELETE_ORGANIZATION","CAN_DELETE_DATABASE_USER","CAN_DELETE_FIREWALL","PermissionRoles","read","write","useRBAC","activeOrg","hasPermission","permission","_activeOrg$role","Can","showTooltip","DeniedOutlined","DataStores","selectedFilters","filterCount","setIsLoading","setPagination","perPage","setRows","dispatch","processDataToDispatch","paginationData","dbVendors","onAlertClose","FileOutlined","Divider","danger","getCloudRegion","onChangePage","nextPage","scrollTo","_Pagination","showSizeChanger","defaultPageSize","defaultCurrent","DataStoresEmpty","VpcListOptions","clouds","onCloudChange","onRegionChange","display","flexWrap","InstanceInformation","VpcCidr","VpcPeerings","VpcDataStores","dataStores","VpcsContext","Vpcs","setClouds","setRegions","vpcContext","useMemo","_cloudProviders$filte","_deploymentOptions$ge","peeringData","vpcPeer","PlusCircleOutlined","VpcListMenuButton","getCloudRegions","VpcDropdownMenu","VpcList","VpcListResults","CreateVpcButton","IconTextMargin4","CcxIconDownOutlined","userReachedDatastoreLimit","AppCreateButton","limitReached","NavLink","AppCreateButtonCreateVpcLink","AppCreateButtonButton","CmonStatus","isFunctional","CmonService","getCmonStatus","fetchCmonStatus","cmonSlice","useCmonStatus","cmon","intervalId","DatastoreFilterPopover","onChangeTagsFilter","onChangeDbTypesFilter","FilterPopoverContent","_Checkbox","CheckboxStyle","datastoreTypes","TagsHeadingStyle","FilterInput","tokenSeparators","tagsList","Service","diskType","hostAvailabilityZone","userLogin","readonly","host_az","last_seen","user_login","getHostUuid","getRole","isRoleReplica","isRolePrimary","getServiceUuid","isLB","getAvailabilityZone","CMON_STATUS_ONLINE","CMON_STATUS_FAILED","CMON_STATUS_SHUTDOWN","CMON_STATUS_OFFLINE","CMON_STATUS_RECOVERY","CMON_STATUS_UNKNOWN","isStarting","getPort","getElegantNodeType","getNodeVersion","getFriendlyCreatedAt","getFullCreatedAt","getRegion","getRegionCode","getInstanceType","getDiskType","getDiskSizeInfo","setUserLogin","setClusterUuid","getClusterUuid","getHostname","DbService","getDiskSize","Jobs","_props$jobs","j","ServiceService","getAllServices","_response$database_no","_response$database_no2","dbServices","getAllJobs","limit","getDbServices","_response$database_no3","fetchJobs","rejectWithValue","refreshJobs","_getState2","clearIntervals","jobsSlice","initiallyLoaded","intervals","setIntervals","arg","actions","DBParameterDefaults","getParameter","getAllParameters","validation_options","matches","match","getParameterKeys","DbParameterGroup","databaseVersion","databaseType","dbParameters","database_type","db_parameters","data_stores","DbParametersGroup","parameterGroups","currentPage","metadata","current_page","page_size","firstPage","first_page","lastPage","last_page","totalRecords","total_records","parameter_groups","LegacyDatastore","isLegacyDatastore","has_legacy_parameters","hasLegacyParameters","DbParameterGroupService","getDbParameterGroups","getDefaultDbParameterGroup","createDbParameterGroup","reqData","updateDbParameterGroup","groupId","getSingleDbParameterGroup","applyDbParameterGroup","verifyLegacyDatastore","createLegacyDbParameterGroup","deleteDbParameterGroup","syncDbParameterGroup","CcxIconCheckCircleTwoTone","CheckCircleTwoTone","DeleteDbParametersPopover","_record$dataStores","_record$dataStores2","_record$dataStores3","isDeleteable","openPopover","setOpenPopover","_Popover","PopoverContentRow","InfoCircleFilled","ExclamationCircleFilledColor","PopoverActionsRow","handleDelete","DisabledDeleteDbParametersPopoverButton","DeleteDbParametersPopoverButton","overlayInnerStyle","maxWidth","UpdateDbParametersPopover","onOpenChange","Type","asInt","Parameter","_validationOpts$max","_validationOpts$min","_validationOpts$oneof","TEXT","NUMBER","BOOLEAN","SELECT","validationOpts","validationOptions","oneofMatch","oneof","minMatch","maxMatch","parseValidationOptions","DbParametersModal","operation","disableFields","tableForm","isSubmitting","setIsSubmitting","setDbVendor","setDbVersion","dbVersionOptions","setDbVersionOptions","filteredTableData","setFilteredTableData","dbConfigurationOptions","setDbConfigurationOptions","dbConfiguration","setDbConfiguration","datastoreList","setDatastoreList","setSearch","databaseVendorOptions","getDatabaseVendors","vendor","isMssql","processDbVendorOptions","vendorName","dbVersions","getDatabaseVersionOptions","databaseVendors","selectedVendor","isInList","versions","numeric","processDbConfigurationsOptions","dbConfigurations","getDatabaseConfigurationOptions","types","getVendorTypeName","getDBParameters","dbParametersDefaults","dbparameters","dbParametersForm","processDbParametersForTable","fieldsToSet","tableValues","updatedTableData","updateTableDataWithFormValues","submitData","formTableValues","updatedValues","acc","getMinMaxDefaultValues","DatastoreSettingDbParametersDefault","isDefault","commaCount","getFormattedValues","DatastoreSettingDbParametersName","InfoIcon","info","DbParameterFormInput","confirmLoading","maskClosable","DbParameterForm","selectedDbVendor","getDatabaseVendorByCode","_Tag","closable","DbParametersModalTag","_Divider","searchValue","EditDBParametersModal","isEditVisible","setIsEditVisible","editRecord","setEditRecord","handleOpenDbParametersModal","mappedParameters","_error$errorFields","EditDbParametersPopoverButton","EditOutlined","formData","DbParametersActionsLists","setIsDeleteable","DbParametersActionsListsMenu","DbParametersActionButton","DuplicateDbParametersPopoverButton","CreateDbParameters","openModal","setOpenModal","useDbParametersGroup","setDbParameters","fetchDbParameters","DbParametersTable","dbParametersGroup","loadingGroup","errorGroup","DbParametersHeader","DbParametersTitle","DbParametersTableHeader","Invite","declinedAt","acceptedAt","fromUser","toUser","organization","declined_at","accepted_at","from_user","to_user","Invites","invites","getAllPendingInvites","invite","getFirstPendingInvites","InviteMemberService","getAllInvites","getOrgInvites","orgId","inviteNewMember","member","acceptInvite","declineInvite","deleteInvite","inviteId","restoreDatastore","isBackupRestore","restoreDatastoreSlice","restoreDatastoreFromBackup","setInitialState","Projects","activeTab","setInvites","InvitesMemberService","useInvites","filterOptions","setFilterOptions","selectedFilterOptions","setSelectedFilterOptions","setFilterCount","operations","borderRadius","overlayStyle","_Badge","FilterBadge","FilterButton","FilterOutlined","ProjectsOperationButton","CmonStatusAlert","CmonStatusAlertMessage","ParameterGroupAlertAction","success","ProjectsTabs","activeKey","tabKey","FirewallRulePort","portNo","port_no","FirewallRule","ports","source","FirewallService","getAllRules","addRule","postData","deleteRule","deleteAllRule","useFirewalls","firewalls","setFirewalls","CcxIconDeleteOutlined","FirewallPortsTable","PortOptions","PortsTable","IpifyService","getIPAddress","useIPAddress","ipAddress","setIPAddress","fetchIpAddress","CcxIconPlusCircleOutlined","AddFirewallRule","currentDeployment","setForm","AddFirewallRuleSourceHelpText","FirewallHeader","Firewalls","FirewallsOptionsColumn","QueryProcess","client","query","queryTime","uniqueKey","query_time","QueryProcesses","_props$data","requestStatus","queryProcesses","request_status","TopQuery","digestText","sumTime","sumTimeFormatted","countStar","maxTime","minTime","avgTime","examinedRows","affectedRows","sentRows","disk","ram","digest_text","sum_time","count_star","max_time","min_time","avg_time","examined_rows","affected_rows","sent_rows","TopQueries","topQueries","totalExecutionTime","getTotalExecutionTime","prev","curr","QueryMonitorService","getQueryProcesses","getTopQueries","useTopQueries","setTopQueries","useQueryProcesses","setQueryProcesses","TopQueriesTable","useDataStoreServices","services","setServices","SecretText","visibleText","hiddenText","tooltipText","displayInline","SecretTextDisplay","DsnService","getDsn","hostPort","dsn","getDsnUsageExample","dsnForDisplay","protocol","dsnForCopy","passwordReplace","getPasswordForCopy","connectionString","line","connectionCodeDisplay","useDatastoreServiceDsn","dbType","ServiceDSNCopyButton","ServiceInstanceFormat","formatInstanceName","instanceName","instanceFqdn","TypographyText","ServiceInstanceFormat_instance","ellipsis","QueryStats","showConnections","setShowConnections","topQueryLoading","processLoading","servicesRefresh","servicesLoading","expandedKeys","setExpandedKeys","goBack","findInstanceService","_services$dbServices","topQueriesColumns","parseFloat","queryProcessesColumns","QueryStatsRadio","QueryStatsExpanded","tempExpandedKeys","k","QueryStatsHeader","AppFormTag","toolTip","onPreventMouseDown","preventDefault","stopPropagation","labelReplace","AppTagRadius","onMouseDown","AppFormTags","subTags","setSubTags","DataStoreOverviewGeneralInformation","DataStoreOverviewGeneralInformationLabel","DataStoreOverviewGeneralInformationName","CcxIconCloseCircleOutlined","CloseCircleOutlined","DataStoreOverviewServicesState","setTotal","failed","setFailed","_services$dbServices$","stopped","_services$dbServices$2","DataStoreOverviewServicesStateIconOk","DataStoreOverviewServicesStateIconError","DataStoreOverviewServicesStateIconWarning","DataStoreOverviewServicesStateContent","DataStoreOverviewNetworkInformation","DataStoreOverviewNetworkInformationLabel","pop","DataStoreOverviewNetworkInformationContent","DataStoreOverviewNetworkInformationColumns","DataStoreOverviewCloudInformation","setCountryCode","_dataStore$vpc","cardData","DataStoreOverviewCloudInformationLabel","DataStoreOverviewCloudInformationContent","DataStoreOverviewCloudInformationColumns","DataStoreOverviewQueriesPerSecond","ServiceAccessConnectionInformation","connectionMethod","ServiceAccessConnectionInformationCode","ServiceAccessConnectionInformationCodeContent","DataStoreOverviewAccessToServices","getRoleNameWithInfo","DataStoreOverviewAccessToServicesRoleName","uniqueRolesMap","accessibleServices","isMariaDBorMySQL","setConnectionMethod","DataStoreOverviewAccessToServicesRadioOptions","DataStoreOverviewAccessToServicesRole","DataStoreOverviewAccessToServicesConInfo","DataStoreOverview","isDataLoading","DataStoreOverviewSpace","ProjectBreadcrumb","setName","setVendor","setVersion","_deployment$db","_Breadcrumb","DbParameters","prop","DatabaseConfigurationService","getDatabaseParameters","updateDatabaseParameters","DataStoreMaintenanceTooltip","MaintenanceTooltip","overlayClassName","OverlayMaintenanceTooltip","arrowPointAtCenter","MaintenanceTooltipContainer","MaintenanceTooltipPoints","TooltipInfoIcon","timeSlots","DataStoreSettingsMaintenance","maintenanceDayOfWeek","maintenanceStartHour","onDayOfWeekChange","onTimeWindowChange","handleUpgradeTo","filteredJob","handleOnDayOfWeekChange","handleOnTimeWindowChange","dataStoreMaintenanceCard","DataStoreSettingsUpgradeLabel","DataStoreSettingsMaintenanceDescription","DataStoreSettingsUpgradeButton","_Popconfirm","okText","minWidth","onConfirm","DataStoreSettingsMaintenanceLabel","DataStoreSettingsMaintenanceAlert","DataStoreSettingsUpToDate","DataStoreSettingsNameChange","hasFeedback","handleOnChange","BackupSettings","fullFrequency","fullStartHour","incFrequency","fullCron","incCron","incNodeId","fullNodeId","fullHostName","incHostName","full_frequency","full_source","full_start_hour","inc_frequency","inc_source","full_cron","inc_cron","inc_node_id","full_node_id","inc_host","full_host","BackupApiFp","backupSchedulesDatastoreUuidGet","backupsDatastoreUuidGet","parentId","BackupApiAxiosParamCreator","RestoreApiFp","backupsDatastoreUuidBackupIdRestorePost","backupsDatastoreUuidBackupIdRestorePostRequest","restoresDatastoreUuidGet","RestoreApiAxiosParamCreator","SettingsApiFp","settingsDatastoreUuidGet","settingsDatastoreUuidPatch","settingsSet","settingsDatastoreUuidRetentionGet","settingsDatastoreUuidRetentionPost","retentionSettings","SettingsApiAxiosParamCreator","backupSettingsApiInterface","backupRestoreApiInterface","backupApiInterface","useBackupSettings","settingsDTO","backupSettings","setBackupSettings","_e$response","Backup","hasChildren","backupMethod","backupType","endedAt","parent_id","has_children","backup_method","backup_type","ended_at","BackupScheduleStatus","BackupScheduleType","BackupSchedule","recurrence","hostName","getCronString","_this$recurrence","Restore","_props$backup","_props$backup2","progress","backupSize","cmon_backup_id","status_text","seconds","backup","isStatusCompleted","isClosed","endDate","unix","minutesAgo","diff","BackupService","getAllBackups","backups","getFullBackups","getIncrementalBackups","getAllBackupSchedules","restoreBackup","pitr_stop_time","getBackupRetention","retention_days","updateBackupRetention","retention","getBackupSettings","updateBackupSettings","getBackupRestores","_data$restores","restores","useDataStoreJobs","datastoreJobs","DownloadingAuthCertificatesService","getDatastoreCertificate","certificateType","DatastoreSettingsAuthenticationTable","authColumns","onClickDownloadCertificate","DownloadAuthCertificatesService","report","blob","contentDisposition","get","exec","reportFile","fileName","createObjectURL","reportFileLink","click","revokeObjectURL","downloadCertificate","authDownloads","DownloadOutlined","Title","level","AppFormEmailTag","isValidEmail","DatastoreEmailNotificationTags","DatastoreEmailNotificationTagsError","AppEmailsNotification","emailsList","saveEmailNotifications","emailRegex","every","wrapperCol","tagRender","DatastoreEmailNotification","DataStoreSettingsEmailNotification","DataStoreSettingsEmailNotificationLabel","DataStoreSettingsAutoScale","DataStoreSettingsAutoScaleLabel","checkedChildren","unCheckedChildren","checked","DataStoreSettingsGeneral","setDataStoreName","setMaintenanceDayOfWeek","setMaintenanceStartHour","newDataStoreName","setNewDataStoreName","setAutoscaleStorage","newDayOfWeek","setNewDayOfWeek","newStartHour","setNewStartHour","newEndHour","setNewEndHour","setNewPassword","newPasswordConfirm","setNewPasswordConfirm","saving","setSaving","canSave","setCanSave","canSaveBackup","setCanSaveBackup","setEmailsList","full","setFull","incremental","setIncremental","frequency","setFrequency","time","jobsLoading","refreshBackupSettings","notificationRecipients","saveDataStoreSettings","debounce","settingsObj","handleSettingsChanged","DataStoreSettings","saveTimeWindow","ParameterGroupDisplay","createLegacyGroup","selectedGroup","isSyncing","syncGroup","mapDbParametersGroup","openParameterEditModal","isSynced","setIsSynced","DbParametersGroupRow","DBparametersGroupCard","DbParametersSelfCenter","DatastoreDbParametersIcon","DbParametersDetails","DbParametersEditButton","DbParametersEnd","DbParametersActions","LinkOutlined","ParameterGroupAlert","AssignGroupModal","dbParametersList","setSelectedGroup","modalContent","DbParametersGroupSelect","AddDBParametersButton","strong","Paragraph","handleSubmit","mapDbParameterGroupsToOptions","dbParameterGroups","dataStoreParameterGroupId","_dbParameterGroups$fi","DatastoreSettingDbParameters","isEditMode","editableFields","setEditableFields","isDataStoreLoading","isAssignGroupModalVisible","setIsAssignGroupModalVisible","isDbParametersModalVisible","setIsDbParametersModalVisible","isDbParameterEditable","setIsDbParameterEditable","dbParametersTableData","setDbParametersTableData","setRecord","setIsSyncing","dbParameterForm","setDbParametersList","editableParameter","defaultDbParameters","getDefaultDbParameters","formattedRecord","getAttachedDbParameterGroup","attachedGroup","showNotifications","databasesColumns","_record$options","defaultChecked","DatastoreSettingDbParametersSelect","onKeyDown","DatastoreSettingDbParametersField","renderInputField","DatastoreSettingDbParametersEdit","DatastoreSettingDbParametersEditIcon","toggleEditableField","fieldName","groupDbParams","updateDbParametersWithGroupValues","groupSelected","dataStoreUUID","useDbParameters","_dbParameters$paramet","setIsEditMode","dbParametersData","setDbParametersData","formRef","_formRef$current","reportValidity","paddingTop","_tempDbParametersData","tempDbParametersData","findIndex","ServiceStatus","ServiceInformation","deploying","copyButton","copyDsn","replicaLag","ipSection","ServiceInformationMiddle","copyDsnSection","ServiceInformationDsnBottom","serviceStatus","ServiceInformationServiceStatus","BadgeIcon","ServiceInformationStatusDot","PromoteReplicaButton","PromoteOutlined","SvgCpu","fillRule","clipRule","fillOpacity","SvgDisk","SvgRam","CcxIconCpu","CpuIcon","CcxIconDisk","DiskIcon","CcxIconRam","RamIcon","ServiceResources","_instanceSize$","_instanceSize$2","_instanceSize$3","setInstanceSize","setInstanceSizes","useContentInstanceSizes","_instanceSizes$","production","dbInfo","ServiceResourcesSection","DatabaseInformationVersion","lbInfo","ApartmentOutlined","instance_Size","ServiceResourcesInstance","ServiceResourcesDetail","cpu","volumeInfo","ServiceResourcesRow","DatastoreScalingStepHeader","subtitle","DatastoreScalingStepHeaderInfo","DatastoreScalingCard","stepScalingTitle","stepScalingCount","DatastoreScalingCardVolumeRow","DatastoreScalingCardVolumeCol","DatastoreScalingCardVolumeInfo","DatastoreScalingCardVolumeCount","DatastoreScalingStep1","handleStorage","DatastoreScalingStep1SliderRow","DatastoreScalingStep2Alert","DatastoreScalingStepFormInputNumber","DatastoreScalingInfoCard","DatastoreScalingInfoCardLogo","DatastoreScalingInfoCardName","DatastoreScalingInfoCardRow","_createElement","ExtendNodeStorageModal","pendingJobs","startStoreInterval","clearStoreInterval","setIsButtonDisabled","isButtonDisabled","monthlyCost","setMonthlyCost","setStorage","getVolumeTypePrice","_deploymentOptions$in","_datastore$cloudProvi","_volumeTypes$find","volumeTypes","price","instanceNumber","storageMonthlyPrice","volume_sizes","fontWeight","new_volume_size","setTimeout","muted","primary","white","Space","wide","justifyContent","DatastoreScalingNodeInfoCard","roleName","showCheckbox","numberOfNodesToRemove","onCheckChange","checkedCount","setCheckedCount","isPrimary","isChecked","setIsChecked","canRemoveNode","handleCheckChange","DatastoreScalingNodeInfoCardRole","DatastoreScalingNodeInfoCardCol","DatastoreScalingCheckboxRow","DatastoreScalingCheckbox","DatastoreScalingNodeRemove","DatastoreScalingInstance","instanceSizeName","DatastoreScalingSpace","DatastoreScalingSpecIcon","DatastoreScalingNodeAddCard","_azs$","kind","setAz","filteredFields","DatastoreScalingNodeInfoCardRoleSecondary","DatastoreScalingNodeIcon","DatastoreScalingNodeInfoCards","numNodes","onUpdate","nodesForRemoval","setNodesForRemoval","newNodes","setNewNodes","needNodes","setNeedNodes","existingNodes","setExistingNodes","tempNeededNodes","addNewNode","removeNodes","availabilityZoneOpts","instanceOpts","instanceDetails","Map","nodesToAdd","tempNodes","newNodesNumber","newNodesNeeded","nodesToRemove","tempNewNodes","emitChanges","addNodes","scalingType","scaling_type","_availabilityZoneOpts","nodeIndex","newKind","AppExistingNodesCard","_db$getRegion$country","_db$getRegion","updatedUuids","AppNewNodesCard","nodeToString","DatastoreScalingStep2","nodeValue","setNodeValue","setMarks","setStep","sliderValue","setSliderValue","setNumberOfNodes","steps","sizes","lastValue","at","ceil","nodeText","CurrentConfigurationText","CurrentConfigurationTextLast","makeMarks","maxNodes","sliderVal","adjustedSliderVal","DatastoreScalingStep2SliderRow","Slider","trackStyle","railStyle","handleStyle","DatastoreScalingStep2NodeInfo","ScaleNodeModal","isScalingModalVisible","setIsScalingModalVisible","setScalingType","checkedValues","setCheckedValues","newNodeData","setNewNodeData","newNodeDataWithPrices","index_no","deployOption","getInstanceSizes","getPriceByType","existingIndex","sumOfInstancesPrice","instanceMonthlyPrice","ScaleNodesModal","newArr","RepairNodeButton","ToolOutlined","DEFAULT_DATABASE_USER","DbUser","grants","hostAllow","uniqueGrants","authPlugin","host_allow","user_name","auth_plugin","getUniqueGrants","regex","g","isDefaultUser","DbUsers","accounts","DbDatabase","databaseName","databaseSize","numberOfTables","database_name","database_size","number_of_tables","isDefaultDatabase","DbDatabases","databases","DbUserService","getPrivileges","getAllUsers","addUser","dbUsername","dbPassword","allowedHost","dbName","dbPrivileges","dbAuthPlugin","isSuperUser","ownDatabase","create_admin_user","own_database","getAllDatabases","addDatabase","dbOwner","database_owner","deleteDatabase","deleteUser","dbHost","useDatabases","setDatabases","useDbUsers","dbUsers","setDbUsers","ConnectionAssistantFormStep1","ConnectionAssistantFormStep2","_getUsageExample2","technology","setTechnology","account","getUsageExample","targetLanguage","technologies","ConnectionAssistantFormStep2Select","_getUsageExample","getCodeCardContent","ConnectionAssistantForm","users","showConnectionString","setShowConnectionString","getHostOptions","_hosts$dbHosts","allHosts","lbHosts","some","setFormData","onValuesChange","dbuser","ConnectionAssistant","connectionStringsVisible","setConnectionStringsVisible","hide","ConnectionAssistantButton","ApiOutlined","ConnectionAssistantText","ButtonDrawerFormButtonRight","setHosts","dbService","setDbService","usersHosts","setUsersHosts","_dbUsers$accounts","_dbUsers$accounts2","u","ConnectionAssistantWidget","DatastoreVolumeCard","selectOptions","onChangeConfigurations","InstanceVolumeTypeCol","InstanceVolumeTypeForm","storageType","InstanceVolumeTypeFormInputNumber","DatastoreScaling","_configuration$storag","_dataStore$volumeSize","showSubtitle","isUpgradeStorageValid","displayValue","cleanedValue","unitToRemove","cleanValue","DataStoreNodeConfiguration","_services$dbServices2","setConfiguration","setSelectOptions","volumeSizes","processOptions","_dataStore$cloudProvi","cloudProviderCode","_getVolumeTypePrice","numberOfGB","upgradeStorage","_configuration$storag2","isFieldTouched","processData","successNotification","isStorageTypeSame","isStorageIops","new_volume_iops","change_volume","new_volume_type","showNodesConfiguration","SaveOutlined","openScaleModal","CompressOutlined","onSubmitForm","DataStoreServiceSingle","getCurrentDataStore","datastoreSlice","PrometheusPostgreSqlReplicaLagStats","replica_lag","PrometheusReplicaLagData","PrometheusReplicaLag","DEFAULT_STEP","PrometheusStatService","getLoadAverage","queryPrometheusApi","getCpuUsage","getRamUsage","getDiskSpaceUsage","getNetworkUsage","getDiskIops","getDiskIOUtil","getDiskThroughput","getReplicaLag","getMySqlHandlers","getMySqlHandlerTransactions","getMySqlDbConnections","getMySqlQueries","getMySqlScanOperations","getMySqlTableLocking","getMySqlTemporaryTables","getMySqlSorting","getMySqlAbortedConnections","getMySqlMemoryUtilization","getMssqlQPS","getMssqlProcesses","getProxySqlQuestions","getProxySqlSlowQueries","getProxySqlQueriesHostgroupDistribution","getProxySqlLatencyHostgroupDistribution","getProxySqlDataSentHostgroupDistribution","getProxySqlDataReceivedHostgroupDistribution","getProxySqlActiveTransactions","getProxySqlQueriesBackend","getProxySqlClientConnections","getProxySqlServerConnections","getProxySqlQueryCacheMemory","getProxySqlQueryCacheGetSet","getProxySqlQueryCacheInOutBytes","getProxySqlMemoryUtilization","getPostgreSqlSelectFetched","getPostgreSqlInsert","getPostgreSqlUpdate","getPostgreSqlDelete","getPostgreSqlSelectReturned","getPostgreSqlActiveSessions","getPostgreSqlIdleSessions","getPostgreSqlIdleSessionsInTransaction","getPostgreSqlIdleSessionsInTransactionAborted","getPostgreSqlLockTables","getPostgreSqlCheckpointsRequestedAndTimed","getPostgreSqlCheckpointSyncTime","getPostgreSqlCheckpointWriteTime","getPostgreSqlDiskIOUtilization","getPostgreSqlDiskUsage","getPostgreSqlDiskLatency","getHaProxyBackendsUpDown","getHaProxyBackendServersUpDown","getHaProxyTotalInOut","getHaProxyBackendTotalBytesIn","getHaProxyBackendTotalBytesOut","getHaProxyBackendServersTotalBytesIn","getHaProxyBackendServersTotalBytesOut","getHaProxyCurrentSessionsByBackend","getHaProxyCurrentSessionRateBackends","getHaProxyCurrentSessionsBackendServers","getHaProxyCurrentSessionRateBackendServers","getHaProxyMaxSessionBackendServers","getHaProxySessions","getHaProxyBackendTotalNumberOfConnectionErrors","getHaProxyBackendMaxQueuedRequests","getHaProxyBackendCurrentQueuedRequests","getRedisCommandsPerSec","getRedisTotalKeys","getRedisConnectedClients","getRedisBlockedClients","getRedisMemoryUsed","getRedisSlaveLag","returnFormatted","metrics","z","getPrometheusApiQueryString","useReplicaLag","setReplicaLag","findLatest","lags","replicaLagObject","lag","RebootNodeButton","ReloadOutlined","ActionMenu","showPromote","showRepair","RebootButton","DataStoreServices","switchTab","setDbCount","currentPath","isNodesAvailable","setIsNodesAvailable","refreshReplicaLag","setIntervalId","dbRows","setDbRows","prevIds","sortedDbServices","tempDBRows","_dataStore$clusterSta","menuDisabled","DataStoresDropdownMenu","runningJobs","statusComponent","runningRows","DataStoreServicesJobRunningAlert","DataStoreServicesSwitchToEventViewerLink","AppTableHeadingBar","paddingBottom","AppGridTableWrapper","PrometheusLoadAvgStats","PrometheusCpuUsageStats","system","softIrq","nice","softirq","PrometheusRamUsageStats","available","used","PrometheusNetworkUsageStats","transmit","receive","transmit_bytes","receive_bytes","PrometheusDiskSpaceUsageStats","PrometheusDiskIOUtilStats","ioTime","io_time","PrometheusDiskIopsStats","PrometheusDiskThroughputStats","readBytes","writtenBytes","read_bytes","written_bytes","PrometheusLoadAvgChart","PrometheusCpuUsageChart","PrometheusDiskIopsChart","PrometheusDiskIOUtilizationChart","formatMilliseconds","parsedValue","isNaN","PrometheusDiskSpaceUsageChart","PrometheusDiskThroughputChart","maximumFractionDigits","PrometheusNetworkUsageChart","PrometheusRamUsageChart","HostDashboard","onLoading","loadAvgStats","loadAvgStatsRefresh","loadAvgStatsLoading","usePrometheusLoadAverageStats","cpuUsageStats","cpuUsageStatsRefresh","cpuUsageStatsLoading","usePrometheusCpuUsageStats","ramUsageStats","ramUsageStatsRefresh","ramUsageStatsLoading","usePrometheusRamUsageStats","networkUsageStats","networkUsageStatsRefresh","networkUsageStatsLoading","usePrometheusNetworkUsageStats","diskSpaceUsageStats","diskSpaceUsageStatsRefresh","diskSpaceUsageStatsLoading","usePrometheusDiskSpaceUsageStats","diskIOUtilStats","diskIOUtilStatsRefresh","diskIOUtilStatsLoading","usePrometheusDiskIOUtilStats","diskIopsStats","diskIopsStatsRefresh","diskIopsStatsLoading","usePrometheusDiskIopsStats","diskThroughputStats","diskThroughputStatsRefresh","diskThroughputStatsLoading","usePrometheusDiskThroughputStats","loadAvgInterval","setLoadAvgInterval","cpuUsageInterval","setCpuUsageInterval","ramUsageInterval","setRamUsageInterval","networkUsageInterval","setNetworkUsageInterval","diskSpaceUsageInterval","setDiskSpaceUsageInterval","diskIOUtilInterval","setDiskIOUtilInterval","diskIopsInterval","setDiskIopsInterval","diskThroughputInterval","setDiskThroughputInterval","HostDashboardRow","HostDashboardCol","PrometheusMySqlQueriesStats","usePrometheusMySqlQueriesStats","tempStats","PrometheusMySqlAbortedConnectionsStats","accessDeniedErrors","aborted_connects","aborted_clients","access_denied_errors","usePrometheusMySqlAbortedConnectionsStats","PrometheusMySqlDbConnectionsStats","threadConnected","maxUsedConnections","maxConnections","thread_connected","max_used_connections","max_connections","usePrometheusMySqlDbConnectionsStats","PrometheusMySqlHandlersStats","handlersReadRnd","handlersReadRndNext","handlersReadNext","handlersReadKey","handlersReadFirst","handlersReadLast","handlersDelete","handlersUpdate","handlersWrite","handlers_read_rnd","handlers_read_rnd_next","handlers_read_next","handlers_read_key","handlers_read_first","handlers_read_last","handlers_delete","handlers_update","handlers_write","PrometheusMySqlHandlerTransactionsStats","handlersRollback","handlersSavepoint","handlersCommit","handlersSavepointRollback","handlersPrepare","handlers_rollback","handlers_savepoint","handlers_commit","handlers_savepoint_rollback","handlers_prepare","PrometheusMySqlMemoryUtilizationStats","innodbMemAdaptiveHash","innodbBufferPoolSize","queryCacheSize","keyBufferSize","innodbLogBufferSize","innodb_mem_adaptive_hash","innodb_buffer_pool_size","query_cache_size","key_buffer_size","innodb_log_buffer_size","PrometheusMySqlScanOperationsStats","deleteScan","updateScan","select_scan","delete_scan","update_scan","PrometheusMySqlSortingStats","sortMergePasses","sortScan","sortRange","sortRows","sort_merge_passes","sort_scan","sort_range","sort_rows","usePrometheusMySqlSortingStats","PrometheusMySqlTableLockingStats","tableLocksImmediate","tableLocksWaited","table_locks_immediate","table_locks_waited","PrometheusMySqlTemporaryTablesStats","created_tmp_tables","created_tmp_disk_tables","usePrometheusMySqlTemporaryTablesStats","PrometheusMySqlHandlersChart","PrometheusMySqlHandlerTransactionsChart","PrometheusMySqlDbConnectionsChart","hostUUIDs","PrometheusMySqlQueriesChart","PrometheusMySqlScanOperationsChart","PrometheusMySqlTableLockingChart","PrometheusMySqlTemporaryTablesChart","PrometheusMySqlSortingChart","PrometheusMySqlAbortedConnectionsChart","PrometheusMySqlMemoryUtilizationChart","MysqlDbDashboard","queriesStats","queriesStatsRefresh","queriesStatsLoading","abortedConnectionsStats","abortedConnectionsStatsRefresh","abortedConnectionsStatsLoading","connectionsStats","connectionsStatsRefresh","connectionsStatsLoading","handlersStats","handlersStatsRefresh","handlersStatsLoading","usePrometheusMySqlHandlersStats","handlerTransactionsStats","handlerTransactionsStatsRefresh","handlerTransactionsStatsLoading","usePrometheusMySqlHandlerTransactionsStats","memoryUtilizationStats","memoryUtilizationStatsRefresh","memoryUtilizationStatsLoading","usePrometheusMySqlMemoryUtilizationStats","scanOperationsStats","scanOperationsStatsRefresh","scanOperationsStatsLoading","usePrometheusMySqlScanOperationsStats","sortingStats","sortingStatsRefresh","sortingStatsLoading","tableLockingStats","tableLockingStatsRefresh","tableLockingStatsLoading","usePrometheusMySqlTableLockingStats","temporaryTablesStats","temporaryTablesStatsRefresh","temporaryTablesStatsLoading","queriesStatsInterval","setQueriesStatsInterval","abortedConnectionsStatsInterval","setAbortedConnectionsStatsInterval","connectionsStatsInterval","setConnectionsStatsInterval","handlersStatsInterval","setHandlersStatsInterval","handlerTransactionsStatsInterval","setHandlerTransactionsStatsInterval","memoryUtilizationStatsInterval","setMemoryUtilizationStatsInterval","scanOperationsStatsInterval","setScanOperationsStatsInterval","sortingStatsInterval","setSortingStatsInterval","tableLockingStatsInterval","setTableLockingStatsInterval","temporaryTablesStatsInterval","setTemporaryTablesStatsInterval","MysqlDbDashboardRow","MysqlDbDashboardCol","PrometheusPostgreSqlActiveSessionsStats","usePrometheusPostgreSqlActiveSessionsStats","PrometheusPostgreSqlCheckpointsRequestedAndTimedStats","pgStatBgwriterCheckpointsReq","pgStatBgwriterCheckpointsTimed","pg_stat_bgwriter_checkpoints_req","pg_stat_bgwriter_checkpoints_timed","PrometheusPostgreSqlCheckpointSyncTimeStats","pgStatBgwriterCheckpointSyncTime","pg_stat_bgwriter_checkpoint_sync_time","PrometheusPostgreSqlCheckpointWriteTimeStats","pgStatBgwriterCheckpointWriteTime","pg_stat_bgwriter_checkpoint_write_time","PrometheusPostgreSqlDeleteStats","pgStatDatabaseTupDeleted","pg_stat_database_tup_deleted","usePrometheusPostgreSqlDeleteStats","PrometheusPostgreSqlDiskIOUtilizationStats","diskIOTimeSecondsTotal","disk_io_time_seconds_total","PrometheusPostgreSqlDiskLatencyStats","readTimeSeconds","writeTimeSeconds","read_time_seconds","write_time_seconds","PrometheusPostgreSqlDiskUsageStats","diskUsage","disk_usage","PrometheusPostgreSqlIdleSessionsInTransactionAbortedStats","idleInTransactionAborted","idle_in_transaction_aborted","PrometheusPostgreSqlIdleSessionsInTransactionStats","idleInTransaction","idle_in_transaction","PrometheusPostgreSqlIdleSessionsStats","PrometheusPostgreSqlInsertStats","pgStatDatabaseTupInserted","pg_stat_database_tup_inserted","usePrometheusPostgreSqlInsertStats","PrometheusPostgreSqlLockTablesStats","pgLocksCount","pg_locks_count","PrometheusPostgreSqlSelectFetchedStats","pgStatDatabaseTupFetched","pg_stat_database_tup_fetched","usePrometheusPostgreSqlSelectFetchedStats","PrometheusPostgreSqlSelectReturnedStats","pgStatDatabaseTupReturned","pg_stat_database_tup_returned","usePrometheusPostgreSqlSelectReturnedStats","PrometheusPostgreSqlUpdateStats","pgStatDatabaseTupUpdated","pg_stat_database_tup_updated","usePrometheusPostgreSqlUpdateStats","PrometheusPostgreSqlSelectFetchedChart","PrometheusPostgreSqlInsertChart","combinedData","chartDataList","PrometheusPostgreSqlUpdateChart","PrometheusPostgreSqlDeleteChart","PrometheusPostgreSqlSelectReturnedChart","PrometheusPostgreSqlActiveSessionsChart","PrometheusPostgreSqlIdleSessionsChart","PrometheusPostgreSqlDiskLatencyChart","PrometheusPostgreSqlDiskUsageChart","PrometheusPostgreSqlDiskIOUtilizationChart","PrometheusPostgreSqlCheckpointWriteTimeChart","PrometheusPostgreSqlCheckpointsRequestedAndTimedChart","PrometheusPostgreSqlCheckpointSyncTimeChart","PrometheusPostgreSqlLockTablesChart","PrometheusPostgreSqlIdleSessionsInTransactionChart","PrometheusPostgreSqlIdleSessionsInTransactionAbortedChart","PostgreSqlDbDashboard","activeSessionsStats","activeSessionsStatsRefresh","activeSessionsStatsLoading","checkpointsRequestedAndTimedStats","checkpointsRequestedAndTimedStatsRefresh","checkpointsRequestedAndTimedStatsLoading","usePrometheusPostgreSqlCheckpointsRequestedAndTimedStats","checkpointSyncTimeStats","checkpointSyncTimeStatsRefresh","checkpointSyncTimeStatsLoading","usePrometheusPostgreSqlCheckpointSyncTimeStats","checkpointWriteTimeStats","checkpointWriteTimeStatsRefresh","checkpointWriteTimeStatsLoading","usePrometheusPostgreSqlCheckpointWriteTimeStats","deleteStats","deleteStatsRefresh","deleteStatsLoading","diskIOUtilizationStats","diskIOUtilizationStatsRefresh","diskIOUtilizationStatsLoading","usePrometheusPostgreSqlDiskIOUtilizationStats","diskLatencyStats","diskLatencyStatsRefresh","diskLatencyStatsLoading","usePrometheusPostgreSqlDiskLatencyStats","diskUsageStats","diskUsageStatsRefresh","diskUsageStatsLoading","usePrometheusPostgreSqlDiskUsageStats","idleSessionsInTransactionAbortedStats","idleSessionsInTransactionAbortedStatsRefresh","idleSessionsInTransactionAbortedStatsLoading","usePrometheusPostgreSqlIdleSessionsInTransactionAbortedStats","idleSessionsInTransactionStats","idleSessionsInTransactionStatsRefresh","idleSessionsInTransactionStatsLoading","usePrometheusPostgreSqlIdleSessionsInTransactionStats","idleSessionsStats","idleSessionsStatsRefresh","idleSessionsStatsLoading","usePrometheusPostgreSqlIdleSessionsStats","insertStats","insertStatsRefresh","insertStatsLoading","lockTablesStats","lockTablesStatsRefresh","lockTablesStatsLoading","usePrometheusPostgreSqlLockTablesStats","selectFetchedStats","selectFetchedStatsRefresh","selectFetchedStatsLoading","selectReturnedStats","selectReturnedStatsRefresh","selectReturnedStatsLoading","updateStats","updateStatsRefresh","updateStatsLoading","activeSessionsStatsInterval","setActiveSessionsStatsInterval","checkpointsRequestedAndTimedStatsInterval","setCheckpointsRequestedAndTimedStatsInterval","checkpointSyncTimeStatsInterval","setCheckpointSyncTimeStatsInterval","checkpointWriteTimeStatsInterval","setCheckpointWriteTimeStatsInterval","deleteStatsInterval","setDeleteStatsInterval","diskIOUtilizationStatsInterval","setDiskIOUtilizationStatsInterval","diskLatencyStatsInterval","setDiskLatencyStatsInterval","diskUsageStatsInterval","setDiskUsageStatsInterval","idleSessionsInTransactionAbortedStatsInterval","setIdleSessionsInTransactionAbortedStatsInterval","idleSessionsInTransactionStatsInterval","setIdleSessionsInTransactionStatsInterval","idleSessionsStatsInterval","setIdleSessionsStatsInterval","insertStatsInterval","setInsertStatsInterval","lockTablesStatsInterval","setLockTablesStatsInterval","selectFetchedStatsInterval","setSelectFetchedStatsInterval","selectReturnedStatsInterval","setSelectReturnedStatsInterval","updateStatsInterval","setUpdateStatsInterval","PostgreSqlDbDashboardRow","PostgreSqlDbDashboardCol","PrometheusRedisCommandsPerSecStats","commandsPerSec","commands_per_sec","PrometheusRedisTotalKeysStats","dbKeys","db_keys","PrometheusRedisConnectedClientsStats","connectedClients","connected_clients","PrometheusRedisBlockedClientsStats","blockedClients","blocked_clients","PrometheusRedisMemoryUsedStats","memoryUsed","memory_used","PrometheusRedisSlaveLagStats","connectedSlaveLag","connected_slave_lag","PrometheusRedisBlockedClientsChart","PrometheusRedisMemoryUsedChart","PrometheusRedisConnectedClientsChart","PrometheusRedisCommandsPerSecChart","PrometheusRedisTotalKeysChart","PrometheusRedisSlaveLagChart","RedisDashboard","commandsPerSecStats","commandsPerSecStatsRefresh","commandsPerSecStatsLoading","usePrometheusRedisCommandsPerSecStats","totalKeysStats","totalKeysStatsRefresh","totalKeysStatsLoading","usePrometheusRedisTotalKeysStats","connectedClientsStats","connectedClientsStatsRefresh","connectedClientsStatsLoading","usePrometheusRedisConnectedClientsStats","blockedClientsStats","blockedClientsStatsRefresh","blockedClientsStatsLoading","usePrometheusRedisBlockedClientsStats","memoryUsedStats","memoryUsedStatsRefresh","memoryUsedStatsLoading","usePrometheusRedisMemoryUsedStats","slaveLagStats","slaveLagStatsRefresh","slaveLagStatsLoading","usePrometheusRedisSlaveLagStats","commandsPerSecStatsInterval","setCommandsPerSecStatsInterval","totalKeysStatsInterval","setTotalKeysStatsInterval","connectedClientsStatsInterval","setConnectedClientsStatsInterval","blockedClientsStatsInterval","setBlockedClientsStatsInterval","memoryUsedStatsInterval","setMemoryUsedStatsInterval","slaveLagStatsInterval","setSlaveLagStatsInterval","RedisDashboardRow","RedisDashboardCol","PrometheusMssqlQueriesChart","PrometheusMssqlHandlerTransactionsChart","background","dormant","runnable","sleeping","done","running","PrometheusMssqlHandlerTransactionsStats","PrometheusMssqlQPSStats","usePrometheusMssqlQPSStats","usePrometheusMssqlHandlerTransactionsStats","AllMySqlDbDashboard","PostgreSqlDbDashboardSummary","DbDashboard","MssqlDbDashboard","MySqlDbDashboardSummary","PrometheusProxySqlActiveTransactionsStats","active_transactions","PrometheusProxySqlClientConnectionsStats","clientConnectionsNonIdle","client_connections_aborted","client_connections_connected","client_connections_created","client_connections_non_idle","PrometheusProxySqlDataReceivedHostgroupDistributionStats","dataRecv","data_recv","PrometheusProxySqlDataSentHostgroupDistributionStats","dataSent","data_sent","PrometheusProxySqlLatencyHostgroupDistributionStats","latencyUs","latency_us","PrometheusProxySqlMemoryUtilizationStats","connpoolMemoryBytes","sqlite3_memory_bytes","connpool_memory_bytes","mysql_backend_buffers_bytes","mysql_frontend_buffers_bytes","mysql_session_internal_bytes","PrometheusProxySqlQueriesBackendStats","queries_backends_bytes_sent","queries_backends_bytes_recv","PrometheusProxySqlQueriesHostgroupDistributionStats","PrometheusProxySqlQueryCacheGetSetStats","query_cache_count_get_ok","query_cache_count_get","query_cache_count_set","PrometheusProxySqlQueryCacheInOutBytesStats","query_cache_bytes_in","query_cache_bytes_out","PrometheusProxySqlQueryCacheMemoryStats","query_cache_memory_bytes","PrometheusProxySqlQuestionsStats","PrometheusProxySqlServerConnectionsStats","serverConnectionsDelayed","server_connections_aborted","server_connections_connected","server_connections_created","server_connections_delayed","SlowQueries","slow_queries","PrometheusProxySqlQuestionsChart","PrometheusProxySqlSlowQueriesChart","PrometheusProxySqlQueriesHostgroupDistributionChart","PrometheusProxySqlLatencyHostgroupDistributionChart","PrometheusProxySqlDataSentHostgroupDistributionChart","PrometheusProxySqlDataReceivedHostgroupDistributionChart","PrometheusProxySqlMemoryUtilizationChart","PrometheusProxySqlQueryCacheInOutBytesChart","PrometheusProxySqlQueryCacheGetSetChart","PrometheusProxySqlQueryCacheMemoryChart","PrometheusProxySqlServerConnectionsChart","PrometheusProxySqlClientConnectionsChart","PrometheusProxySqlQueriesBackendChart","PrometheusProxySqlActiveTransactionsChart","ProxySqlLbDashboard","activeTransactionsStats","activeTransactionsStatsRefresh","activeTransactionsStatsLoading","usePrometheusProxySqlActiveTransactionsStats","clientConnectionsStats","clientConnectionsStatsRefresh","clientConnectionsStatsLoading","usePrometheusProxySqlClientConnectionsStats","dataReceivedHostgroupDistributionStats","dataReceivedHostgroupDistributionStatsRefresh","dataReceivedHostgroupDistributionStatsLoading","usePrometheusProxySqlDataReceivedHostgroupDistributionStats","dataSentHostgroupDistributionStats","dataSentHostgroupDistributionStatsRefresh","dataSentHostgroupDistributionStatsLoading","usePrometheusProxySqlDataSentHostgroupDistributionStats","latencyHostgroupDistributionStats","latencyHostgroupDistributionStatsRefresh","latencyHostgroupDistributionStatsLoading","usePrometheusProxySqlLatencyHostgroupDistributionStats","usePrometheusProxySqlMemoryUtilizationStats","queriesBackendStats","queriesBackendStatsRefresh","queriesBackendStatsLoading","usePrometheusProxySqlQueriesBackendStats","queriesHostgroupDistributionStats","queriesHostgroupDistributionStatsRefresh","queriesHostgroupDistributionStatsLoading","usePrometheusProxySqlQueriesHostgroupDistributionStats","queryCacheGetSetStats","queryCacheGetSetStatsRefresh","queryCacheGetSetStatsLoading","usePrometheusProxySqlQueryCacheGetSetStats","queryCacheInOutBytesStats","queryCacheInOutBytesStatsRefresh","queryCacheInOutBytesStatsLoading","usePrometheusProxySqlQueryCacheInOutBytesStats","queryCacheMemoryStats","queryCacheMemoryStatsRefresh","queryCacheMemoryStatsLoading","usePrometheusProxySqlQueryCacheMemoryStats","questionsStats","questionsStatsRefresh","questionsStatsLoading","usePrometheusProxySqlQuestionsStats","serverConnectionsStats","serverConnectionsStatsRefresh","serverConnectionsStatsLoading","usePrometheusProxySqlServerConnectionsStats","slowQueriesStats","slowQueriesStatsRefresh","slowQueriesStatsLoading","PrometheusProxySqlSlowQueriesStats","usePrometheusProxySqlSlowQueriesStats","activeTransactionsStatsInterval","setActiveTransactionsStatsInterval","clientConnectionsStatsInterval","setClientConnectionsStatsInterval","dataReceivedHostgroupDistributionStatsInterval","setDataReceivedHostgroupDistributionStatsInterval","dataSentHostgroupDistributionStatsInterval","setDataSentHostgroupDistributionStatsInterval","latencyHostgroupDistributionStatsInterval","setLatencyHostgroupDistributionStatsInterval","queriesBackendStatsInterval","setQueriesBackendStatsInterval","queriesHostgroupDistributionStatsInterval","setQueriesHostgroupDistributionStatsInterval","queryCacheGetSetStatsInterval","setQueryCacheGetSetStatsInterval","queryCacheInOutBytesStatsInterval","setQueryCacheInOutBytesStatsInterval","queryCacheMemoryStatsInterval","setQueryCacheMemoryStatsInterval","questionsStatsInterval","setQuestionsStatsInterval","serverConnectionsStatsInterval","setServerConnectionsStatsInterval","slowQueriesStatsInterval","setSlowQueriesStatsInterval","ProxySqlLbDashboardRow","ProxySqlLbDashboardCol","PrometheusHaProxyBackendCurrentQueuedRequestsStats","haproxyBackendCurrentQueue","haproxy_backend_current_queue","PrometheusHaProxyBackendMaxQueuedRequestsStats","haproxyBackendMaxQueue","haproxy_backend_max_queue","PrometheusHaProxyBackendServersTotalBytesInStats","haproxyServerBytesInTotal","haproxy_server_bytes_in_total","PrometheusHaProxyBackendServersTotalBytesOutStats","haproxyServerBytesOutTotal","haproxy_server_bytes_out_total","PrometheusHaProxyBackendServersUpDownStats","haproxyServerDown","haproxyServerUp","haproxy_server_down","haproxy_server_up","PrometheusHaProxyBackendsUpDownStats","haproxyBackendUp","haproxyBackendDown","haproxy_backend_up","haproxy_backend_down","PrometheusHaProxyBackendTotalBytesInStats","PrometheusHaProxyBackendTotalNumberOfConnectionErrorsStats","haproxyBackendConnectionErrorsTotal","haproxy_backend_connection_errors_total","PrometheusHaProxyBackendTotalBytesOutStats","PrometheusHaProxyCurrentSessionRateBackendsStats","haproxyServerCurrentSessionRate","haproxy_server_current_session_rate","PrometheusHaProxyCurrentSessionsBackendServersStats","haproxyServerCurrentSessions","haproxy_server_current_sessions","PrometheusHaProxyCurrentSessionsByBackendStats","PrometheusHaProxyCurrentSessionRateBackendServersStats","PrometheusHaProxyMaxSessionBackendServersStats","haproxyServerMaxSessions","haproxy_server_max_sessions","PrometheusHaProxySessionsStats","haproxyFrontendCurrentSessions","haproxyFrontendCurrentSessionRate","haproxyBackendCurrentSessions","haproxyBackendCurrentSessionRate","haproxy_frontend_current_sessions","haproxy_frontend_current_session_rate","haproxy_backend_current_sessions","haproxy_backend_current_session_rate","PrometheusHaProxyTotalInOutStats","haproxyFrontendBytesInTotal","haproxyFrontendBytesOutTotal","haproxyBackendBytesInTotal","haproxyBackendBytesOutTotal","haproxy_frontend_bytes_in_total","haproxy_frontend_bytes_out_total","haproxy_backend_bytes_in_total","haproxy_backend_bytes_out_total","PrometheusHaProxyBackendsUpDownChart","PrometheusHaProxyBackendServersUpDownChart","PrometheusHaProxyBackendTotalBytesInChart","PrometheusHaProxyTotalInOutChart","PrometheusHaProxyBackendServersTotalBytesInChart","PrometheusHaProxyBackendServersTotalBytesOutChart","PrometheusHaProxyBackendTotalBytesOutChart","PrometheusHaProxyCurrentSessionsBackendServersChart","PrometheusHaProxyCurrentSessionsByBackendChart","PrometheusHaProxyCurrentSessionRateBackendsChart","PrometheusHaProxyCurrentSessionRateBackendServersChart","PrometheusHaProxyMaxSessionBackendServersChart","PrometheusHaProxySessionsChart","PrometheusHaProxyBackendTotalNumberOfConnectionErrorsChart","PrometheusHaProxyBackendMaxQueuedRequestsChart","PrometheusHaProxyBackendCurrentQueuedRequestsChart","HaProxyLbDashboard","backendCurrentQueuedRequestsStats","backendCurrentQueuedRequestsStatsRefresh","backendCurrentQueuedRequestsStatsLoading","usePrometheusHaProxyBackendCurrentQueuedRequestsStats","backendMaxQueuedRequestsStats","backendMaxQueuedRequestsStatsRefresh","backendMaxQueuedRequestsStatsLoading","usePrometheusHaProxyBackendMaxQueuedRequestsStats","backendServersTotalBytesInStats","backendServersTotalBytesInStatsRefresh","backendServersTotalBytesInStatsLoading","usePrometheusHaProxyBackendServersTotalBytesInStats","backendServersTotalBytesOutStats","backendServersTotalBytesOutStatsRefresh","backendServersTotalBytesOutStatsLoading","usePrometheusHaProxyBackendServersTotalBytesOutStats","backendServersUpDownStats","backendServersUpDownStatsRefresh","backendServersUpDownStatsLoading","usePrometheusHaProxyBackendServersUpDownStats","backendTotalBytesInStats","backendTotalBytesInStatsRefresh","backendTotalBytesInStatsLoading","usePrometheusHaProxyBackendTotalBytesInStats","backendTotalBytesOutStats","backendTotalBytesOutStatsRefresh","backendTotalBytesOutStatsLoading","usePrometheusHaProxyBackendTotalBytesOutStats","backendTotalNumberOfConnectionErrorsStats","backendTotalNumberOfConnectionErrorsStatsRefresh","backendTotalNumberOfConnectionErrorsStatsLoading","usePrometheusHaProxyBackendTotalNumberOfConnectionErrorsStats","backendsUpDownStats","backendsUpDownStatsRefresh","backendsUpDownStatsLoading","usePrometheusHaProxyBackendsUpDownStats","currentSessionRateBackendServersStats","currentSessionRateBackendServersStatsRefresh","currentSessionRateBackendServersStatsLoading","usePrometheusHaProxyCurrentSessionRateBackendServersStats","currentSessionRateBackendsStats","currentSessionRateBackendsStatsRefresh","currentSessionRateBackendsStatsLoading","usePrometheusHaProxyCurrentSessionRateBackendsStats","currentSessionsBackendServersStats","currentSessionsBackendServersStatsRefresh","currentSessionsBackendServersStatsLoading","usePrometheusHaProxyCurrentSessionsBackendServersStats","currentSessionsByBackendStats","currentSessionsByBackendStatsRefresh","currentSessionsByBackendStatsLoading","usePrometheusHaProxyCurrentSessionsByBackendStats","maxSessionBackendServersStats","maxSessionBackendServersStatsRefresh","maxSessionBackendServersStatsLoading","usePrometheusHaProxyMaxSessionBackendServersStats","sessionsStats","sessionsStatsRefresh","sessionsStatsLoading","usePrometheusHaProxySessionsStats","totalInOutStats","totalInOutStatsRefresh","totalInOutStatsLoading","usePrometheusHaProxyTotalInOutStats","backendCurrentQueuedRequestsStatsInterval","setBackendCurrentQueuedRequestsStatsInterval","backendMaxQueuedRequestsStatsInterval","setBackendMaxQueuedRequestsStatsInterval","backendServersTotalBytesInStatsInterval","setBackendServersTotalBytesInStatsInterval","backendServersTotalBytesOutStatsInterval","setBackendServersTotalBytesOutStatsInterval","backendServersUpDownStatsInterval","setBackendServersUpDownStatsInterval","backendTotalBytesInStatsInterval","setBackendTotalBytesInStatsInterval","backendTotalBytesOutStatsInterval","setBackendTotalBytesOutStatsInterval","backendTotalNumberOfConnectionErrorsStatsInterval","setBackendTotalNumberOfConnectionErrorsStatsInterval","backendsUpDownStatsInterval","setBackendsUpDownStatsInterval","currentSessionRateBackendServersStatsInterval","setCurrentSessionRateBackendServersStatsInterval","currentSessionRateBackendsStatsInterval","setCurrentSessionRateBackendsStatsInterval","currentSessionsBackendServersStatsInterval","setCurrentSessionsBackendServersStatsInterval","currentSessionsByBackendStatsInterval","setCurrentSessionsByBackendStatsInterval","maxSessionBackendServersStatsInterval","setMaxSessionBackendServersStatsInterval","sessionsStatsInterval","setSessionsStatsInterval","totalInOutStatsInterval","setTotalInOutStatsInterval","HaProxyLbDashboardRow","HaProxyLbDashboardCol","LbDashboard","DeploymentDashboard","setHost","setAllHost","hostUUID","setHostUUID","setPort","currentHost","setCurrentHost","currentNode","setCurrentNode","loadingData","setLoadingData","hostUUIDS","setHostUUIDs","setPorts","setChartRange","selectDbNode","selectInstanceHost","createOption","selected","found","isSelectedHost","isAllSelected","filteredNodes","h","newHost","handleLoadingData","DeploymentDashboardHostSelect","NotFoundError404","getDatabaseUsernameValidators","getDatabaseNameValidators","AddDbDatabase","DatabaseOutlined","Databases","dbRefresh","dbLoading","setMessage","checkRestoringBackup","DbDatabaseOptionsColumn","DbUsersStop","DbDatabaseAlert","DbDatabaseLabel","GrowthDbs","dataSize","indexSize","rowCount","tableCount","db_name","data_size","row_count","index_size","table_count","DbGrowth","databaseCount","dataDir","freeDataSize","totalDirSize","dbs","class_name","database_count","free_datadir_size","datadir","total_datadir_size","dbsProps","DbGrowthData","dbGrowthData","DatabaseGrowthService","getDatabaseGrowths","dateRange","fromDate","toDate","ChartTypeFree","ChartTypeOther","ChartTypeIndexSize","ChartTypeDataSize","DatabaseGrowthChart","activeDate","onClickChartColumn","getColor","defaultColors","currentDateColors","DatabasesGrowthChart","isStack","interactions","enable","legend","marker","symbol","columnStyle","onEvent","plot","appendPadding","minLimit","tickLine","_d$data3","_d$data4","realValue","DatabaseGrowthHeading","dateFormat","disabledDate","onChangeDateRange","DbGrowthChartHeading","ChartTip","DatePickerContainer","HistoryOutlined","HistoryOutlinedIcon","DatePicker","clearIcon","suffixIcon","Range","startOf","endOf","DatabaseGrowthTable","renderValue","databaseColumns","DatabasesGrowthTable","DatabaseGrowth","databaseGrowthChartData","setDatabaseGrowthChartData","databaseTable","setDatabaseTable","storeCreatedDate","setStoreCreatedDate","setDateRange","setActiveDate","setDbGrowthData","growthLoading","setGrowthLoading","fetchData","sortedData","ascendingSort","dbGrowthList","dateToday","createdDate","createdStore","utcOffset","getCreatedDate","processChartData","processDBData","databaseGrowth","getRelateValue","isBetween","other","findMatchedDate","isSame","earliestDate","newDate","isAfter","CcxIconUserAddOutlined","UserAddOutlined","isDefaultAdmin","AddDbUser","defaultAdmin","setTitle","setIsSuperUser","setOwnDatabase","isModalVisible","setIsModalVisible","superUserField","toggleSuperUser","ownDatabaseField","toggleOwnDatabase","addDbUserRequest","dbUserDbCommandCategories","dbUserDbCommands","dbUserDbKeys","dbUserDbChannels","dbUser","isUserExists","checkUsernameAvailability","okButtonProps","CcxSectionHeader","UpdateDbUserDrawer","categories","commands","channels","grant","startsWith","UpdateDbUserActionsMenu","dbUsersRefresh","dbUsersLoading","databasesLoading","dbUsersData","setDbUsersData","setDefaultAdmin","rebootingJobs","isRebootingNode","sortedUsers","usersColumns","_record$grants","separator","privilege","PrivilegesContainer","priv","_priv$privileges","DbUsersSegmentedData","DbUsersSegmentedFirstItem","DbUserPopoverCol","DBUserPopoverTitle","destroyTooltipOnHide","DbUsersSegmentedSecondItem","DbUsersOptionsColumn","ConnectionHeaderButtons","DbUsersLabel","tableFooter","ButtonWithOverlayDialog","button","handleButtonClick","_button$props","_button$props$onClick","buttonRender","_overlay$props2","_overlay$props2$onSuc","_len2","args","_key2","_overlay$props","_overlay$props$onCanc","BackupStatus","useBackupRestores","backupRestores","setBackupRestores","BackupColumns","subTitle","last","BackupColumnsLast","BackupsModal","currentBackup","onclose","point","setPoint","formattedDate","setFormattedDate","pointDateTime","setPointDateTime","buttonDisabled","setButtonDisabled","getDisabledHours","increment","disabledHours","hour","getDisabledMinutes","selectedHour","referenceHour","referenceMinute","isPast","minute","PointDateTime","handleSaveClick","BackupsModalSettings","BackupsModalSwitchText","showTime","BackupsModalDatePicker","currentDate","isSameOrAfter","isSameOrBefore","disabledTime","_currentDate","currentBackupStartedAt","isToday","currentHour","currentMinute","startMinute","getCurrentDayDisabledHours","disabledMinutes","getCurrentDayDisabledMinutes","getDisabledHoursForStartedAt","getDisabledMinutesForStartedAt","CreateDatastorePopover","BackupsListCreateDatastoreButton","onCreateDatastore","getAzsFromNodes","backupToCreateDatastore","PopoverContainer","PopoverActions","BorderRadius","IncrementalCreateDatastoreButton","BackupActionCreateDatastoreButton","IncrementalRestoreButton","restoring","onConfirmRestore","RestoreButton","RedoOutlined","IncrementalListActions","IncrementalBackups","setCurrentPage","currentPageSize","setCurrentPageSize","setBackups","useBackupsIncremental","openRestore","setOpenRestore","restoreObj","setRestoreObj","backupsColumns","secs","IncrementalBackupsExpandableTable","RestoreStatus","restore","RestoringBackups","currentRestore","progressBar","_Progress","BackupsListRestoreButton","refreshRestores","BackupsActionsColumn","BackupActionRestoreButton","BackupsListActionsMenu","BackupsList","setIsBackupInProcess","setCurrentRestore","backupsLoading","useBackups","determineButtonStatus","isBackupJobRunning","submitted","useBackupSchedules","backupSchedules","setBackupSchedules","FormFooter","right","center","showCancelButton","cancelButtonText","cancelButtonProps","showSubmitButton","submitButtonText","submitButtonProps","noDivider","extraLeft","htmlType","BackupsFormModal","submit","BackupScheduleInfo","CronFormat","SCHEDULE_OPTIONS","BackupsScheduleEditIncrementalForm","nodesOptions","inOptions","cron","invalidOption","onFinish","IncrementalRadioOptions","AppFormSelect","BackupsScheduleEditFullForm","BackupScheduleModal","CronInput","enableMinutely","enableWeekly","enableMonthly","enableYearly","BackupsScheduleEditDrawer","schedule","setNodesOptions","BackupsScheduleSwitchButton","applyEnabled","FULL","INCREMENTAL","handlePause","handleEnable","PauseCircleOutlined","PlayCircleOutlined","BackupsScheduleActionsMenu","onActionPerformed","BackupScheduleStatusFormat","getBackupScheduleStatusType","getBackupScheduleStatusLabel","SCHEDULED","PAUSED","BackupsScheduleList","auto","auto_prefer_replica","handleActionPerformed","BackupsSettingsForm","setRetention","useBackupRetention","AppFormWithAddonInput","BackupSettingsModal","Backups","isBackupInProcess","items","BackupSettingsButton","SettingOutlined","EventStatus","showTooltips","DataStoreLogsActions","handleViewLogs","downloadDataStoreLogs","DbLog","DbLogs","files","DbLogEntry","DbLogsEntries","sortEntriesByTimestamp","entry","valueOf","DataStoreLogsService","getDataStoreLogs","getDataStoreLogsEntries","useDataStoreEntries","dataStoreEntries","setDataStoreEntries","_record$files","results","combinedEntries","DataStoreViewLogs","downloadLogs","onCloseModal","latestEntry","setLatestEntry","hostNamesOptions","setHostNamesOptions","filteredEntries","setFilteredEntries","selectedHostname","setSelectedHostname","showAllLogs","setShowAllLogs","_entries$entries","filteredAndSlicedEntries","entriesToFilter","entriesToSlice","tempLatestEntry","findLatestEntry","tempHostNames","getUniqueHostnames","logEntries","hostnameSet","add","logsTable","formatLogMessage","LogInnerHeading","DownloadLogsButton","DataStoreDetailsCard","DataStoreViewLogsIcon","LogDetailsLabel","LogDetailsText","LogsDivider","LogsEntriesHeader","HostsSelect","LogsEntriesTable","dateMatch","DatastoreLogs","logs","setLogsTable","logsFileName","setLogsFilename","setEntries","isClicked","setIsClicked","groupedLogs","newData","seenFiles","when","_latestEntry","logsColumns","onCell","timeStamp","DbLogsLabel","useDataStoreLogs","dataStoreLogs","setDataStoreLogs","EventsTable","eventColumns","Labels","EventViewer","_nodes$dbServices2","loadingNodes","loadingLogs","_nodes$dbServices","_record$data","_record$data2","HostUUID","HostName","DataStore","throwError","useThrowError","setActiveKey","dbCount","runningJobsCount","setRunningJobsCount","prevJobs","usePrevious","TabsStyle","HomeOutlined","IconStyle","ClusterOutlined","LineChartOutlined","AlertInfoOutlined","TabsBadge","SnippetsOutlined","UserOutlined","BoxOutlined","SafetyCertificateOutlined","DataStoreTabs","DataStoreBackRow","WizardConfiguration","activeStep","animated","DetailEmptyState","imgAlt","NoTopologySingle","WizardSelectTypeStep","onSelect","emptyState","defaultIconComponent","selectedItem","setSelectedItem","hoveredItem","setHoveredItem","handleItemMouseOut","handleChange","currentItem","BoxSelect","cols","itemBodyStyle","beta","extensions","onMouseOver","handleItemMouseOver","onMouseOut","Detail","onContinue","handleConfirm","DefaultIcon","Component","getDefaultIconSvgFile","getAntIconSvgFile","getIconSvgFile","require","DeploymentUnitOutlined","marginLeft","margin","TextFormat","warning","implicitContinue","showExtension","visibility","documentationLink","dangerouslySetInnerHTML","__html","getStatusFormatColor","StatusFormatStatus","AddServiceDatabaseVendorStep","selectedTechType","selectedTech","handleTechTypeSelect","handleTechTypeContinueClick","handleBackClick","actionType","AddServiceDatabaseVendorStepContainer","PER_PAGE","PAGE","WizardFormConfigurationStep1","handleTagChange","handleDeselect","handleVendorTypeChange","handleNumberOfNodesChange","notificationEmails","setValidNotificationEmails","isMicrosoft","showAdvancedSettings","setShowAdvancedSettings","newNumberOfNodes","vendorTypes","getVendorTypes","_vendorTypes$","_vendorTypes$2","ConfigurationOptionSubInfo","WizardFormConfigurationStep1ConfigRow","getSortedVendorTypes","WizardFormConfigurationStep1ConfigCol","WizardFormConfigurationStep1ConfigColWithHover","WizardFormConfigurationColSelected","WizardFormConfigurationStep1ConfigCard","WizardFormConfigurationStep1ConfigOpt","Fragment","getRecommendedConfiguration","WizardFormConfigurationStep1MarkerGreen","getSortedNumberOfNodes","_selectedTech$getVend","_selectedTech$getVend2","_selectedTech$getVend3","getVendorTypeByCode","getSizeHintsName","getSizeHintsInfoByNumber","WizardFormConfigurationAdvancedSettings","WizardFormConfigurationAdvancedSettingsButton","parameterGroup","WizardFormConfigurationEmailNotification","AppRadioGroupGrid","AppRadioGridButton","AppRadioGridButtonLarge","WizardFormConfigurationStep2","handleCloudProviderChange","handleRegionChange","selectedCloudProvider","cloudProviderDetails","cloudProviderRegionDetails","getCloudRegionDetails","SelectedCloudProvider","ProviderRadioButton","ProviderLogo","WizardFormConfigurationStep2RegionFlag","WizardFormConfigurationStep2RegionLabel","handleVolumeTypeChange","storageItems","enteredVolumeSize","onVolumeSizeChange","onIOPSChange","setStorageType","localStorageType","marginBottom","getVolumeSizesInfo","InstanceVolumeTypeFormAlertBox","hasIops","handleIopsValidation","maxPerGb","InstanceSizeForm","handleInstanceSizeChange","setEnteredVolumeSize","setEnteredIOPS","setVolumeSize","handleVolumeIopsChange","_storageItems$find","getVolumeTypes","ephemeral","localVolumeTypes","restoreVolumeType","_s$volumeTypes","selectedInstanceSize","selectedVolumeType","defaultVolumeSize","instanceSizeFieldAlert","instanceSizeAndStorageFieldAlert","InstanceSizeFormInstanceSize","InstanceSizeFormAlert","WizardFormConfigurationStep3","StepsExtra","StepsExtraSmallScreen","CardContentAvailabilityZoneMulti","selectedZones","radio","handleOnChange1","handleOnChange2","handleOnChange3","getOnChange","CardContentAvailabilityZoneMultiSelect","CardContentAvailabilityZoneMultiTitle","CardContentAvailabilityZoneMultiTitleSelect","CardContentAvailabilityZoneMultiZones","CardContentAvailabilityZoneMultiRadioGroup","WizardFormConfigurationStep4","_restoreDatastore$ava5","handleNetworkChange","selectedNetwork","setNetwork","handleNetworkTypeChange","handleVpcChange","zones","handleAvailabilityZoneChange","localAz","setLocalAz","localNetworkType","setLocalNetworkType","selectedAvailabilityZones","networkCode","selectedNetworkCode","selectedNetworkType","availabilityZones1","availabilityZones2","availabilityZones3","tempNetworkType","setRestoreBackupValues","_restoreDatastore$ava","selectedVpc","restoreNetworkType","_restoreDatastore$ava2","availabilityZoneFields","_restoreDatastore$ava3","onAvailabilityZoneChange","WizardFormConfigurationStep4Group","getNetworks","WizardFormConfigurationStep4RadioItem","WizardFormConfigurationStep4Item","EyeOutlined","EyeInvisibleOutlined","getNetworkTypeInfo","isRegular","_restoreDatastore$ava4","onChangeNetworkType","WizardFormConfigurationStep4RadioTypeItem","WizardFormConfigurationStep4NetworkTypeItem","vpc_available","WizardFormConfigurationStep4VPC","handleMultiAvailabilityZoneChange","WizardFormConfigurationStep5","_form$getFieldValue","_form$getFieldValue2","_form$getFieldValue3","_form$getFieldValue4","_form$getFieldValue5","_form$getFieldValue6","_form$getFieldValue7","_form$getFieldValue8","_form$getFieldValue9","_deploymentOptions$ge2","_form$getFieldValue10","_form$getFieldValue11","providerLogo","setEULA","eula","hideCloudProviderStep","setInstanceDetails","showNetwork","WizardFormConfigurationStep5Row","WizardFormConfigurationStep5Col","wrap","getVendorTypeNameByCode","getInstanceSizeInfo","getInstanceStorageType","getVolumeTypeInfo","getAvailabilityZoneName","handleEulaChange","WizardFormConfigurationStep6","_billingUser$addressD","_billingUser$addressD2","_billingUser$addressD3","_billingUser$addressD4","_subscription$billing2","_subscription$billing3","_subscription$billing4","_subscription$billing5","_subscription$billing6","_subscription$billing7","_subscription$billing8","_subscription$billing9","setCheckedCoupon","checkedCoupon","setSelectedCard","selectedCard","isCardAttached","promo","setPromo","addNewCard","setAddNewCard","editAddress","setEditAddress","setRow","validCards","setValidCards","WizardFormConfigurationStep6Row","_subscription$billing","WizardFormConfigurationStep6Title","WizardFormConfigurationStep6CreateUserButton","WizardFormConfigurationStep6NewCard","LockOutlined","WizardFormConfigurationStep6Coupon","WizardFormConfigurationStep6CouponText","AddServiceCreateDatastoreStep","handleOnValuesChange","intentResponse","setSelectedTechType","setSelectedTech","showCloudProviderStep","validNotificationEmails","setSubmitDisabled","networkStep","WizardFormConfiguration","Step","AddServiceCreateDatastorePricing","hasRequiredFields","nextButtonDisabled","getCloudProviders","AddServiceCreateDatastoreStepContainer","AddServiceCreateDatastoreDivider","autoFocusFirstInput","onStepChange","selectedRegion","hasOnlyOneCloudProviderAndRegion","datastoreData","defaultActiveStep","stepsExtra","stepKey","stepIndex","AddServiceCreateVPCStep","doApiRequest","AddServiceCreateVPCConfiguration","AddServiceCreateVPCStepRow","AddServiceCreateVPCStepCol","AddServiceCreateVPCStepContainer","AddServiceCreateVPCDivider","usePageTracking","useLocation","gtag","page_path","page_search","page_hash","AddService","setDbVendors","vpcForm","vpcWizardForm","setDatabaseVendorType","setCloudProvider","setSelectedCloudProvider","setInstance","setVolumeType","setNetworkType","setVolumeIops","setAvailabilityZones","setZones","vpcModal","setVpcModal","enteredIOPS","setSelectedNetwork","allNetworks","networkDefault","getLogo","AddServiceModalCIDRIcon","setSubscriptionUser","setNotificationEmails","setIntentResponse","getMonthlyPrice","iopsMonthlyPrice","getMonthlyIOPSPrice","networks","getVersionButtons","availableNetworks","isOnlyPublicNetworkEnabled","setDefaultRegion","getAvailabilityZones","vs","_vpcs$","updateFormValues","localNetworkCode","isHaAvailable","_availabilityZones$","_vpcs$2","setDefaultCloudProvider","defaultCloudProvider","getDefaultCloudProviders","defaultRegion","handleVersionChange","AddServiceVersion","AddServiceVersions","versionOpt","backupRestoreWizardInitialStep","selectedDBVendor","maxNumberOfNodes","recommendedNumberOfNodes","restoreNumberOfNodes","deploymentName","maxHeight","uniqueTags","selectedNumberOfNodes","getSelectedNode","tempCloudProviders","selectedProvider","provider","seletedInstanceVolumeType","localNetwork","cp","vt","vi","Error404","onHomeClick","Error404Base","NotFound","Error404Details","Error404DetailsTitle","Error404Page","handleHomeClick","DeleteOrganizationPopover","isDeleteVisible","setIsDeleteVisible","OrganizationModal","isEditing","isValueUpdated","setIsValueUpdated","identifier","setIdentifier","formatText","inputString","identifierValue","OrganizationModalInput","onIdentifierChange","Organization","Organizations","organizations","orgs","org","OrganizationsService","getAllOrganizations","getOrganization","addNewOrganization","updateOrganization","deleteOrganization","OrganizationsActionsList","setOrganizationData","handleEdit","OrganizationActionButton","organizationId","organizationName","DeleteOrganizationPopoverButton","handleDeleteOrganization","Member","Members","members","getAdminEmail","_this$members$find","MembersService","getAllMembers","deleteMember","memberId","leaveOrganization","updateMember","setOrganization","useOrganization","isAddingOrganization","setIsAddingOrganization","organizationData","isAddOrganizationModalVisible","setIsAddOrganizationModalVisible","MembersTag","totalMembers","totalInvites","any","invitesCount","membersCount","getOrganizationData","OrganizationsHeaderButton","handleAddOrganization","OrganizationsTable","MemberFormModal","handleFormSubmit","AddNewMemberModalInput","MemberRoleSelect","MemberDeletePopover","MembersActionsList","refreshInvites","handleRemoveMember","handleLeaveOrg","handleDeleteInvite","UserDeleteOutlined","LogoutOutlined","handleDeleteMember","locationState","setMembers","useMembers","useOrganizationInvites","setIsAdmin","membersAndInvitesTable","setMembersAndInvitesTable","isAddNewMemberModalVisible","setIsAddNewMemberModalVisible","isDeclined","filteredMembersList","pendingInvites","processTableData","tableArray","isUserAdmin","configs","Expired","Declined","Pending","Active","getStatusConfig","MembersHeaderButton","MembersTable","OrganizationMembers","AppRoute","userReducer","Switch","Route","exact","Redirect","AppContentTemplate","alert","Content","AppContent","AppContentContainer","DatabaseVendorType","sizeHints","size_hints","getSizeHintsByNumber","_this$sizeHints$value","_this$sizeHints$value3","_this$sizeHints$value2","_this$sizeHints$value4","DatabaseVendor","num_nodes","getExtensionTypes","getVendorNameWithVersion","isBeta","priorityOrder","customSort","indexA","indexB","vendorType","sizeHintsKeys","_type$name","InstanceVolumeIopsValue","max_per_gb","InstanceVolumeIops","prototype","InstanceVolumeType","iopsPrice","has_iops","verified_level","iops_price","InstanceVolumeTypes","InstanceVolumeSize","InstanceVolumeSizes","InstanceSize","InstanceSizes","CloudProviderGroup","getCloudProviderGroupLogo","getCloudProviderGroupName","getCloudProviderGroupLabel","DeploymentOptions","cloud_providers","cloudGroups","cloud_groups","vendors","volume_types","instance_sizes","_this$cloud","_this$cloud2","tempCloudProvidersWithoutGroups","cloudGroupName","getCloudProviderGroupByName","temp","getCloudProvidersGroups","_this$cloud3","_this$cloud4","_this$cloud5","_this$getCloudRegions","_this$getCloudRegions2","_this$cloud6","_this$cloud7","_this$cloud8","_this$cloud9","_this$cloud10","is_open_stack","_this$database","_this$database2","getDatabaseVendorsWithVersion","getDatabaseInfo","_this$database3","deployment_types_info","getNumberOfNodesInfo","_this$database4","num_nodes_info","_this$instance","getInstanceSizesInfo","_this$instance2","instance_sizes_info","_this$instance5","_this$instance3","_this$instance4","firstCleuraKey","getFirstCleuraKey","_this$instance6","getVolumeIopsInfo","_this$instance7","volume_iops_info","_this$instance10","_this$instance8","_this$instance9","_this$instance11","volume_sizes_info","_this$instance12","getVolumeTypesInfo","_this$instance13","volume_types_info","_this$instance14","instanceVolumeType","_this$instance17","_this$instance15","_this$instance16","_this$network","_this$network2","_this$network3","getNetworkInfo","_this$network4","network_info","_this$network5","type_info","getNetworkVpcInfo","_this$network6","vpc_info","_this$cloud11","isGrouped","objectWithKeys","getDeploymentOptions","deploymentOptionSlice","AppContentContainerAlert","AppLogo","CcxIconUserOutlined","UserMenu","removeLocalStorageOnLogout","removeItem","logoutLink","handleLogoutClick","dot","UserMenuBadge","UserMenuName","AppUserMenu","CcxIconBellOutlined","BellOutlined","CcxIconClockCircle","ClockCircleOutlined","AppNotificationItem","notification","setStatus","AppNotificationItemMessage","AppNotificationItemStateIconOk","AppNotificationItemStateIconRunning","AppNotificationItemStateIconError","AppNotificationItemStateIconFinished","AppHeaderNotifications","setActiveJobs","_jobs$dataStoreUuid","AppHeaderNotificationsMenu","AppHeaderNotificationsTitle","AppHeaderNotificationsDivider","AppHeaderNotificationsBadge","setOrg","OrganizationSelect","selectedOption","reload","AppHeader","Header","_Layout","AppFooter","Footer","FooterTop","FloatingContent","FloatingContentPlacementBottomLeft","breakWord","bold","css","TextFormatInfo","TextFormatDanger","TextFormatWarning","TextFormatSuccess","TextFormatBreakWord","TextFormatBold","TextFormatMuted","CcxIconMessageOutlined","MessageOutlined","FeedbackForm","onVisibleChange","showThanks","showError","thanksText","errorText","feedbackTypes","defaultFeedbackType","onError","onComplete","popoverVisible","setPopoverVisible","submitting","setSubmitting","feedbackType","setFeedbackType","feedbackMessage","setFeedbackMessage","handlePopoverCloseClick","popoverContent","FeedbackFormTabs","FeedbackFormTabContent","FeedbackFormBody","FeedbackFormRadioGroup","FeedbackFormFooter","handleNextClick","FeedbackFormTextArea","autoFocus","showCount","_Result","FeedbackFormThanks","FeedbackFormPopover","FeedbackFormPopoverTitle","FeedbackFormPopoverClose","CloseOutlined","FeedbackService","sendFeedback","feedbackProps","feedback_message","feedback_props","feedback_type","AppLayoutTemplate","showHeader","AppLayout","AppLayoutContentWrap","AppLayoutContentFeedback","Error500","SubTitle","StateContext","StateProvider","Provider","useReducer","VpcsProvider","vpcsCount","setVpcsCount","totalVpc","useVpcsCount","ChartsProvider","AppProviders","icons","querySelectorAll","parent","referrer","AppErrorFallback","resetErrorBoundary","isLocalhost","Boolean","AppErrorBoundary","ErrorBoundary","FallbackComponent","onErrorHandler","componentStack","onReset","hot","Router","AppLoader","isReady","setIsReady","_fonts","fonts","store","configureStore","dataStoresReducer","jobsReducer","cmonReducer","deploymentOptionsReducer","dataStoreReducer","restoreBackupReducer","middleware","getDefaultMiddleware","serializableCheck","thunk","link","head","REACT_APP_PIWIK_PRO_ID","REACT_APP_PIWIK_PRO_URL","PiwikPro","initialize","ReactDOM","BrowserRouter","App","getElementById","serviceWorker","ready","registration","unregister"],"mappings":"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,mBACdr9G,EACAjD,EACA,cACA+E,EACAC,EACAm7G,GAER,CAEA,wBAAaI,CACTt9G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,WACA+E,EACAC,EACAm7G,GAER,CAEA,wBAAaK,CACTv9G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,WACA+E,EACAC,EACAm7G,GAER,CAEA,8BAAaM,CACTx9G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,iBACA+E,EACAC,EACAm7G,GAER,CAEA,4BAAaO,CACTz9G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,eACA+E,EACAC,EACAm7G,GAER,CAEA,wBAAaQ,CACT19G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,WACA+E,EACAC,EACAm7G,GAER,CAEA,0BAAaS,CACT39G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,aACA+E,EACAC,EACAm7G,GAER,CAEA,8BAAaU,CACT59G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,iBACA+E,EACAC,EACAm7G,GAER,CAEA,0BAAaW,CACT79G,EACAjD,EACA+E,EACAC,GAEA,MAAM3I,QAAiB5H,KAAK6rH,mBACxBr9G,EACAjD,EACA,aACA+E,EACAC,EACAm7G,IAEJ,OAAO,IAAIF,GAAyB5jH,EACxC,CAEA,6BAAa0kH,CACT99G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,gBACA+E,EACAC,EACAm7G,GAER,CAEA,wCAAaa,CACT/9G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,2BACA+E,EACAC,EACAm7G,GAER,CAEA,kCAAac,CACTh+G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,qBACA+E,EACAC,EACAm7G,GAER,CAEA,4BAAae,CACTj+G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,eACA+E,EACAC,EACAm7G,GAER,CAEA,mCAAagB,CACTl+G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,sBACA+E,EACAC,EACAm7G,GAER,CAEA,iCAAaiB,CACTn+G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,oBACA+E,EACAC,EACAm7G,GAER,CAEA,oCAAakB,CACTp+G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,uBACA+E,EACAC,EACAm7G,GAER,CAEA,4BAAamB,CACTr+G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,eACA+E,EACAC,EACAm7G,GAER,CAEA,uCAAaoB,CACTt+G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,0BACA+E,EACAC,EACAm7G,GAER,CAEA,sCAAaqB,CACTv+G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,yBACA+E,EACAC,EACAm7G,GAER,CAEA,wBAAasB,CACTx+G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,WACA+E,EACAC,EACAm7G,GAER,CAEA,8BAAauB,CACTz+G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,iBACA+E,EACAC,EACAm7G,GAER,CAEA,iCAAawB,CACT1+G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,oBACA+E,EACAC,EACAm7G,GAER,CAEA,mCAAayB,CACT3+G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,sBACA+E,EACAC,EACAm7G,GAER,CAEA,oDAAa0B,CACT5+G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,uCACA+E,EACAC,EACAm7G,GAER,CAEA,oDAAa2B,CACT7+G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,uCACA+E,EACAC,EACAm7G,GAER,CAEA,qDAAa4B,CACT9+G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,wCACA+E,EACAC,EACAm7G,GAER,CAEA,yDAAa6B,CACT/+G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,4CACA+E,EACAC,EACAm7G,GAER,CAEA,0CAAa8B,CACTh/G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,6BACA+E,EACAC,EACAm7G,GAER,CAEA,sCAAa+B,CACTj/G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,yBACA+E,EACAC,EACAm7G,GAER,CAEA,yCAAagC,CACTl/G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,4BACA+E,EACAC,EACAm7G,GAER,CAEA,yCAAaiC,CACTn/G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,4BACA+E,EACAC,EACAm7G,GAER,CAEA,wCAAakC,CACTp/G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,2BACA+E,EACAC,EACAm7G,GAER,CAEA,wCAAamC,CACTr/G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,2BACA+E,EACAC,EACAm7G,GAER,CAEA,4CAAaoC,CACTt/G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,+BACA+E,EACAC,EACAm7G,GAER,CAEA,yCAAaqC,CACTv/G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,4BACA+E,EACAC,EACAm7G,GAER,CAEA,uCAAasC,CACTx/G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,0BACA+E,EACAC,EACAm7G,GAER,CAEA,gCAAauC,CACTz/G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,mBACA+E,EACAC,EACAm7G,GAER,CAEA,gCAAawC,CACT1/G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,mBACA+E,EACAC,EACAm7G,GAER,CAEA,gCAAayC,CACT3/G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,mBACA+E,EACAC,EACAm7G,GAER,CAEA,wCAAa0C,CACT5/G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,2BACA+E,EACAC,EACAm7G,GAER,CAEA,wCAAa2C,CACT7/G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,2BACA+E,EACAC,EACAm7G,GAER,CAEA,sCAAa4C,CACT9/G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,yBACA+E,EACAC,EACAm7G,GAER,CAEA,mDAAa6C,CACT//G,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,sCACA+E,EACAC,EACAm7G,GAER,CAEA,0DAAa8C,CACThgH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,6CACA+E,EACAC,EACAm7G,GAER,CAEA,oCAAa+C,CACTjgH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,uBACA+E,EACAC,EACAm7G,GAER,CAEA,sDAAagD,CACTlgH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,yCACA+E,EACAC,EACAm7G,GAER,CAEA,4CAAaiD,CACTngH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,+BACA+E,EACAC,EACAm7G,GAER,CAEA,6CAAakD,CACTpgH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,gCACA+E,EACAC,EACAm7G,GAER,CAEA,2CAAamD,CACTrgH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,8BACA+E,EACAC,EACAm7G,GAER,CAEA,mCAAaoD,CACTtgH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,sBACA+E,EACAC,EACAm7G,GAER,CAEA,qCAAaqD,CACTvgH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,wBACA+E,EACAC,EACAm7G,GAER,CAEA,qCAAasD,CACTxgH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,wBACA+E,EACAC,EACAm7G,GAER,CAEA,2CAAauD,CACTzgH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,8BACA+E,EACAC,EACAm7G,GAER,CAEA,iCAAawD,CACT1gH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,oBACA+E,EACAC,EACAm7G,GAER,CAEA,0CAAayD,CACT3gH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,6BACA+E,EACAC,EACAm7G,GAER,CAEA,2CAAa0D,CACT5gH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,8BACA+E,EACAC,EACAm7G,GAER,CAEA,iDAAa2D,CACT7gH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,oCACA+E,EACAC,EACAm7G,GAER,CAEA,kDAAa4D,CACT9gH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,qCACA+E,EACAC,EACAm7G,GAER,CAEA,+CAAa6D,CACT/gH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,kCACA+E,EACAC,EACAm7G,GAER,CAEA,iDAAa8D,CACThhH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,oCACA+E,EACAC,EACAm7G,GAER,CAEA,oDAAa+D,CACTjhH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,uCACA+E,EACAC,EACAm7G,GAER,CAEA,uDAAagE,CACTlhH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,0CACA+E,EACAC,EACAm7G,GAER,CAEA,+CAAaiE,CACTnhH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,kCACA+E,EACAC,EACAm7G,GAER,CAEA,+BAAakE,CACTphH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,kBACA+E,EACAC,EACAm7G,GAER,CAEA,2DAAamE,CACTrhH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,8CACA+E,EACAC,EACAm7G,GAER,CAEA,+CAAaoE,CACTthH,EACAjD,EACA+E,EACAC,GAEA,aAAavQ,KAAK6rH,mBACdr9G,EACAjD,EACA,kCACA+E,EACAC,EACAm7G,GAER,CAEA,mDAAaqE,CACTvhH,EACAjD,EACA+E,EACAC,GAEA,aAAav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","file":"static/js/main.43c0d49a.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"WizardFormConfigurationStep5Col\":\"WizardFormConfigurationStep5Col_Cg9+t\",\"WizardFormConfigurationStep5Row\":\"WizardFormConfigurationStep5Row_ixBF8\",\"WizardFormConfigurationStep5Flag\":\"WizardFormConfigurationStep5Flag_fDQ4t\",\"StepsExtraSmallScreen\":\"StepsExtraSmallScreen_igkLv\",\"ant-modal-header\":\"ant-modal-header_D42Iy\",\"ant-modal-content\":\"ant-modal-content_0gCo0\",\"ant-modal-footer\":\"ant-modal-footer_tJzmB\",\"ant-message-notice-content\":\"ant-message-notice-content_G3w5F\",\"ant-tooltip-inner\":\"ant-tooltip-inner_zruvD\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"HostCompareDashboard\":\"HostCompareDashboard_XDra+\",\"ant-modal-header\":\"ant-modal-header_uOgha\",\"ant-modal-content\":\"ant-modal-content_rYLFn\",\"ant-modal-footer\":\"ant-modal-footer_VGXmX\",\"ant-message-notice-content\":\"ant-message-notice-content_3yGuU\",\"ant-tooltip-inner\":\"ant-tooltip-inner_EDbgs\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DotLabelStatus\":\"DotLabelStatus_HiHYS\",\"DotLabelStatusDot\":\"DotLabelStatusDot_8+vl-\",\"DotLabelStatusDotGreen\":\"DotLabelStatusDotGreen_yuCPy\",\"DotLabelStatusDotRed\":\"DotLabelStatusDotRed_EjP+T\",\"DotLabelStatusDotOrange\":\"DotLabelStatusDotOrange_vbfVw\",\"DotLabelStatusDotBlue\":\"DotLabelStatusDotBlue_iMGpU\",\"DotLabelStatusDotGray\":\"DotLabelStatusDotGray_8MqxT\",\"DotLabelStatusDotBlack\":\"DotLabelStatusDotBlack_-RpBv\",\"DotLabelStatusDotGreenGlow\":\"DotLabelStatusDotGreenGlow_URTcH\",\"DotLabelStatusDotRedGlow\":\"DotLabelStatusDotRedGlow_D3O8j\",\"DotLabelStatusDotOrangeGlow\":\"DotLabelStatusDotOrangeGlow_vcZie\",\"DotLabelStatusDotBlueGlow\":\"DotLabelStatusDotBlueGlow_4HaRB\",\"DotLabelStatusDotGrayGlow\":\"DotLabelStatusDotGrayGlow_abkTf\",\"DotLabelStatusDotBlackGlow\":\"DotLabelStatusDotBlackGlow_NIHqj\",\"DotLabelStatusLabel\":\"DotLabelStatusLabel_DGv+Y\",\"DotLabelStatusLabelGreen\":\"DotLabelStatusLabelGreen_0-LgV\",\"DotLabelStatusLabelRed\":\"DotLabelStatusLabelRed_05rh1\",\"DotLabelStatusLabelOrange\":\"DotLabelStatusLabelOrange_4G-eS\",\"DotLabelStatusLabelBlue\":\"DotLabelStatusLabelBlue_oXLEt\",\"DotLabelStatusLabelGray\":\"DotLabelStatusLabelGray_nC6x+\",\"DotLabelStatusLabelBlack\":\"DotLabelStatusLabelBlack_DKIr4\",\"ant-modal-header\":\"ant-modal-header_VUWmz\",\"ant-modal-content\":\"ant-modal-content_6ViKi\",\"ant-modal-footer\":\"ant-modal-footer_OM7KC\",\"ant-message-notice-content\":\"ant-message-notice-content_1o+yD\",\"ant-tooltip-inner\":\"ant-tooltip-inner_xEDdy\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"HaProxyLbDashboard\":\"HaProxyLbDashboard_QxXlZ\",\"ant-modal-header\":\"ant-modal-header_jmLF7\",\"ant-modal-content\":\"ant-modal-content_1SP7U\",\"ant-modal-footer\":\"ant-modal-footer_OMS33\",\"ant-message-notice-content\":\"ant-message-notice-content_kAYQl\",\"ant-tooltip-inner\":\"ant-tooltip-inner_IyMwJ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DatastoreScalingNodeInfoCardCol\":\"DatastoreScalingNodeInfoCardCol_qMda7\",\"DatastoreScalingNodeInfoCardRole\":\"DatastoreScalingNodeInfoCardRole_ByEKu\",\"DatastoreScalingNodeInfoCardRoleSecondary\":\"DatastoreScalingNodeInfoCardRoleSecondary_YvnwB\",\"DatastoreScalingNodeInfoCard\":\"DatastoreScalingNodeInfoCard_5uhsU\",\"DatastoreScalingNodeName\":\"DatastoreScalingNodeName_cW58a\",\"DatastoreScalingNodeIcon\":\"DatastoreScalingNodeIcon_1y4Fq\",\"DatastoreScalingSpecIcon\":\"DatastoreScalingSpecIcon_tD2C6\",\"DatastoreScalingSpace\":\"DatastoreScalingSpace_FvXQW\",\"DatastoreScalingInstance\":\"DatastoreScalingInstance_85+rn\",\"DatastoreScalingNodeCheckbox\":\"DatastoreScalingNodeCheckbox_Oexsh\",\"DatastoreScalingNodeRemove\":\"DatastoreScalingNodeRemove_DajO-\",\"DatastoreScalingCheckbox\":\"DatastoreScalingCheckbox_2t0sK\",\"DatastoreScalingCheckboxRow\":\"DatastoreScalingCheckboxRow_QyfJ0\",\"AppExistingNodesCard\":\"AppExistingNodesCard_XOyxp\",\"AppNewNodesCard\":\"AppNewNodesCard_KGSEJ\",\"ant-modal-header\":\"ant-modal-header_XjDj7\",\"ant-modal-content\":\"ant-modal-content_l3gE6\",\"ant-modal-footer\":\"ant-modal-footer_9Fd4R\",\"ant-message-notice-content\":\"ant-message-notice-content_TfpT7\",\"ant-tooltip-inner\":\"ant-tooltip-inner_lHGmF\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ProxySqlLbDashboard\":\"ProxySqlLbDashboard_NRHzc\",\"ant-modal-header\":\"ant-modal-header_kMfaG\",\"ant-modal-content\":\"ant-modal-content_m79wO\",\"ant-modal-footer\":\"ant-modal-footer_D822K\",\"ant-message-notice-content\":\"ant-message-notice-content_HBfmc\",\"ant-tooltip-inner\":\"ant-tooltip-inner_RMlxD\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"FeedbackFormPopover\":\"FeedbackFormPopover_pbLYv\",\"FeedbackFormPopoverTitle\":\"FeedbackFormPopoverTitle_tiLtf\",\"FeedbackFormPopoverClose\":\"FeedbackFormPopoverClose_Xy1aZ\",\"FeedbackFormTypeRadio\":\"FeedbackFormTypeRadio_RrS4w\",\"FeedbackFormTabs\":\"FeedbackFormTabs_Wqwel\",\"FeedbackFormBody\":\"FeedbackFormBody_-nsFy\",\"FeedbackFormRadioGroup\":\"FeedbackFormRadioGroup_aALgb\",\"FeedbackFormTextArea\":\"FeedbackFormTextArea_8tlgr\",\"FeedbackFormTabContent\":\"FeedbackFormTabContent_-5+u-\",\"FeedbackFormFooter\":\"FeedbackFormFooter_yhC8v\",\"FeedbackFormThanks\":\"FeedbackFormThanks_wSn1x\",\"ant-result-icon\":\"ant-result-icon_J+aTK\",\"anticon\":\"anticon_iYocQ\",\"ant-modal-header\":\"ant-modal-header_-esv3\",\"ant-modal-content\":\"ant-modal-content_bJwgY\",\"ant-modal-footer\":\"ant-modal-footer_j5+kz\",\"ant-message-notice-content\":\"ant-message-notice-content_8rBPM\",\"ant-tooltip-inner\":\"ant-tooltip-inner_qnbNv\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ChartCustomTooltip\":\"ChartCustomTooltip_EzK8v\",\"ChartCustomTooltipTitle\":\"ChartCustomTooltipTitle_GkquT\",\"TinyChartCustomTooltipTitle\":\"TinyChartCustomTooltipTitle_28QLg\",\"ChartCustomTooltipContent\":\"ChartCustomTooltipContent_HuS5i\",\"ChartCustomTooltipRow\":\"ChartCustomTooltipRow_uSwb5\",\"ChartCustomTooltipSummary\":\"ChartCustomTooltipSummary_1kQJo\",\"ChartCustomTooltipColor\":\"ChartCustomTooltipColor_yV8o5\",\"ChartCustomTooltipLabel\":\"ChartCustomTooltipLabel_KUvVX\",\"ChartCustomTooltipValue\":\"ChartCustomTooltipValue_Tvnj6\",\"ant-modal-header\":\"ant-modal-header_3xiDm\",\"ant-modal-content\":\"ant-modal-content_iu-0m\",\"ant-modal-footer\":\"ant-modal-footer_Pbvsz\",\"ant-message-notice-content\":\"ant-message-notice-content_mpCtb\",\"ant-tooltip-inner\":\"ant-tooltip-inner_e-jz6\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"VpcPeersCollapse\":\"VpcPeersCollapse_7chuK\",\"VpcPeersCollapsePanel\":\"VpcPeersCollapsePanel_MEzlw\",\"VpcPeersButtons\":\"VpcPeersButtons_D00Hs\",\"VpcPeersOptionsColumn\":\"VpcPeersOptionsColumn_EGBv7\",\"VpcPeersContent\":\"VpcPeersContent_bdrvZ\",\"VpcPeersOptions\":\"VpcPeersOptions_NJBeR\",\"VpcPeersStatusError\":\"VpcPeersStatusError_3LiiD\",\"VpcPeersStatusOk\":\"VpcPeersStatusOk_Lga7a\",\"VpcPeersStatusWarning\":\"VpcPeersStatusWarning_w6cu-\",\"ExpandedRowContent\":\"ExpandedRowContent_3dVJR\",\"VpcPeersRowDropdownMenu\":\"VpcPeersRowDropdownMenu_U6bPC\",\"VpcPeersExpirationTime\":\"VpcPeersExpirationTime_pkMk5\",\"VpcPeersDescriptionItems\":\"VpcPeersDescriptionItems_NWbHF\",\"ant-modal-header\":\"ant-modal-header_LqMon\",\"ant-modal-content\":\"ant-modal-content_c5WlT\",\"ant-modal-footer\":\"ant-modal-footer_DxCw5\",\"ant-message-notice-content\":\"ant-message-notice-content_jn7DK\",\"ant-tooltip-inner\":\"ant-tooltip-inner_jV6cO\"};","var map = {\n\t\"./filled/account-book.svg\": 1372,\n\t\"./filled/alert.svg\": 1373,\n\t\"./filled/alipay-circle.svg\": 1374,\n\t\"./filled/alipay-square.svg\": 1375,\n\t\"./filled/aliwangwang.svg\": 1376,\n\t\"./filled/amazon-circle.svg\": 1377,\n\t\"./filled/amazon-square.svg\": 1378,\n\t\"./filled/android.svg\": 1379,\n\t\"./filled/api.svg\": 1380,\n\t\"./filled/apple.svg\": 1381,\n\t\"./filled/appstore.svg\": 1382,\n\t\"./filled/audio.svg\": 1383,\n\t\"./filled/backward.svg\": 1384,\n\t\"./filled/bank.svg\": 1385,\n\t\"./filled/behance-circle.svg\": 1386,\n\t\"./filled/behance-square.svg\": 1387,\n\t\"./filled/bell.svg\": 1388,\n\t\"./filled/bilibili.svg\": 1389,\n\t\"./filled/book.svg\": 1390,\n\t\"./filled/box-plot.svg\": 1391,\n\t\"./filled/bug.svg\": 1392,\n\t\"./filled/build.svg\": 1393,\n\t\"./filled/bulb.svg\": 1394,\n\t\"./filled/calculator.svg\": 1395,\n\t\"./filled/calendar.svg\": 1396,\n\t\"./filled/camera.svg\": 1397,\n\t\"./filled/car.svg\": 1398,\n\t\"./filled/caret-down.svg\": 1399,\n\t\"./filled/caret-left.svg\": 1400,\n\t\"./filled/caret-right.svg\": 1401,\n\t\"./filled/caret-up.svg\": 1402,\n\t\"./filled/carry-out.svg\": 1403,\n\t\"./filled/check-circle.svg\": 1404,\n\t\"./filled/check-square.svg\": 1405,\n\t\"./filled/chrome.svg\": 1406,\n\t\"./filled/ci-circle.svg\": 1407,\n\t\"./filled/clock-circle.svg\": 1408,\n\t\"./filled/close-circle.svg\": 1409,\n\t\"./filled/close-square.svg\": 1410,\n\t\"./filled/cloud.svg\": 1411,\n\t\"./filled/code-sandbox-circle.svg\": 1412,\n\t\"./filled/code-sandbox-square.svg\": 1413,\n\t\"./filled/code.svg\": 1414,\n\t\"./filled/codepen-circle.svg\": 1415,\n\t\"./filled/codepen-square.svg\": 1416,\n\t\"./filled/compass.svg\": 1417,\n\t\"./filled/contacts.svg\": 1418,\n\t\"./filled/container.svg\": 1419,\n\t\"./filled/control.svg\": 1420,\n\t\"./filled/copy.svg\": 1421,\n\t\"./filled/copyright-circle.svg\": 1422,\n\t\"./filled/credit-card.svg\": 1423,\n\t\"./filled/crown.svg\": 1424,\n\t\"./filled/customer-service.svg\": 1425,\n\t\"./filled/dashboard.svg\": 1426,\n\t\"./filled/database.svg\": 1427,\n\t\"./filled/delete.svg\": 1428,\n\t\"./filled/diff.svg\": 1429,\n\t\"./filled/dingtalk-circle.svg\": 1430,\n\t\"./filled/dingtalk-square.svg\": 1431,\n\t\"./filled/discord.svg\": 1432,\n\t\"./filled/dislike.svg\": 1433,\n\t\"./filled/dollar-circle.svg\": 1434,\n\t\"./filled/down-circle.svg\": 1435,\n\t\"./filled/down-square.svg\": 1436,\n\t\"./filled/dribbble-circle.svg\": 1437,\n\t\"./filled/dribbble-square.svg\": 1438,\n\t\"./filled/dropbox-circle.svg\": 1439,\n\t\"./filled/dropbox-square.svg\": 1440,\n\t\"./filled/edit.svg\": 1441,\n\t\"./filled/environment.svg\": 1442,\n\t\"./filled/euro-circle.svg\": 1443,\n\t\"./filled/exclamation-circle.svg\": 1444,\n\t\"./filled/experiment.svg\": 1445,\n\t\"./filled/eye-invisible.svg\": 1446,\n\t\"./filled/eye.svg\": 1447,\n\t\"./filled/facebook.svg\": 1448,\n\t\"./filled/fast-backward.svg\": 1449,\n\t\"./filled/fast-forward.svg\": 1450,\n\t\"./filled/file-add.svg\": 1451,\n\t\"./filled/file-excel.svg\": 1452,\n\t\"./filled/file-exclamation.svg\": 1453,\n\t\"./filled/file-image.svg\": 1454,\n\t\"./filled/file-markdown.svg\": 1455,\n\t\"./filled/file-pdf.svg\": 1456,\n\t\"./filled/file-ppt.svg\": 1457,\n\t\"./filled/file-text.svg\": 1458,\n\t\"./filled/file-unknown.svg\": 1459,\n\t\"./filled/file-word.svg\": 1460,\n\t\"./filled/file-zip.svg\": 1461,\n\t\"./filled/file.svg\": 1462,\n\t\"./filled/filter.svg\": 1463,\n\t\"./filled/fire.svg\": 1464,\n\t\"./filled/flag.svg\": 1465,\n\t\"./filled/folder-add.svg\": 1466,\n\t\"./filled/folder-open.svg\": 1467,\n\t\"./filled/folder.svg\": 1468,\n\t\"./filled/format-painter.svg\": 1469,\n\t\"./filled/forward.svg\": 1470,\n\t\"./filled/frown.svg\": 1471,\n\t\"./filled/fund.svg\": 1472,\n\t\"./filled/funnel-plot.svg\": 1473,\n\t\"./filled/gift.svg\": 1474,\n\t\"./filled/github.svg\": 1475,\n\t\"./filled/gitlab.svg\": 1476,\n\t\"./filled/gold.svg\": 1477,\n\t\"./filled/golden.svg\": 1478,\n\t\"./filled/google-circle.svg\": 1479,\n\t\"./filled/google-plus-circle.svg\": 1480,\n\t\"./filled/google-plus-square.svg\": 1481,\n\t\"./filled/google-square.svg\": 1482,\n\t\"./filled/hdd.svg\": 1483,\n\t\"./filled/heart.svg\": 1484,\n\t\"./filled/highlight.svg\": 1485,\n\t\"./filled/home.svg\": 1486,\n\t\"./filled/hourglass.svg\": 1487,\n\t\"./filled/html5.svg\": 1488,\n\t\"./filled/idcard.svg\": 1489,\n\t\"./filled/ie-circle.svg\": 1490,\n\t\"./filled/ie-square.svg\": 1491,\n\t\"./filled/info-circle.svg\": 1492,\n\t\"./filled/instagram.svg\": 1493,\n\t\"./filled/insurance.svg\": 1494,\n\t\"./filled/interaction.svg\": 1495,\n\t\"./filled/layout.svg\": 1496,\n\t\"./filled/left-circle.svg\": 1497,\n\t\"./filled/left-square.svg\": 1498,\n\t\"./filled/like.svg\": 1499,\n\t\"./filled/linkedin.svg\": 1500,\n\t\"./filled/lock.svg\": 1501,\n\t\"./filled/mac-command.svg\": 1502,\n\t\"./filled/mail.svg\": 1503,\n\t\"./filled/medicine-box.svg\": 1504,\n\t\"./filled/medium-circle.svg\": 1505,\n\t\"./filled/medium-square.svg\": 1506,\n\t\"./filled/meh.svg\": 1507,\n\t\"./filled/merge.svg\": 1508,\n\t\"./filled/message.svg\": 1509,\n\t\"./filled/minus-circle.svg\": 1510,\n\t\"./filled/minus-square.svg\": 1511,\n\t\"./filled/mobile.svg\": 1512,\n\t\"./filled/money-collect.svg\": 1513,\n\t\"./filled/moon.svg\": 1514,\n\t\"./filled/muted.svg\": 1515,\n\t\"./filled/notification.svg\": 1516,\n\t\"./filled/open-a-i.svg\": 1517,\n\t\"./filled/open-ai.svg\": 1518,\n\t\"./filled/pause-circle.svg\": 1519,\n\t\"./filled/pay-circle.svg\": 1520,\n\t\"./filled/phone.svg\": 1521,\n\t\"./filled/picture.svg\": 1522,\n\t\"./filled/pie-chart.svg\": 1523,\n\t\"./filled/pinterest.svg\": 1524,\n\t\"./filled/play-circle.svg\": 1525,\n\t\"./filled/play-square.svg\": 1526,\n\t\"./filled/plus-circle.svg\": 1527,\n\t\"./filled/plus-square.svg\": 1528,\n\t\"./filled/pound-circle.svg\": 1529,\n\t\"./filled/printer.svg\": 1530,\n\t\"./filled/product.svg\": 1531,\n\t\"./filled/profile.svg\": 1532,\n\t\"./filled/project.svg\": 1533,\n\t\"./filled/property-safety.svg\": 1534,\n\t\"./filled/pushpin.svg\": 1535,\n\t\"./filled/qq-circle.svg\": 1536,\n\t\"./filled/qq-square.svg\": 1537,\n\t\"./filled/question-circle.svg\": 1538,\n\t\"./filled/read.svg\": 1539,\n\t\"./filled/reconciliation.svg\": 1540,\n\t\"./filled/red-envelope.svg\": 1541,\n\t\"./filled/reddit-circle.svg\": 1542,\n\t\"./filled/reddit-square.svg\": 1543,\n\t\"./filled/rest.svg\": 1544,\n\t\"./filled/right-circle.svg\": 1545,\n\t\"./filled/right-square.svg\": 1546,\n\t\"./filled/robot.svg\": 1547,\n\t\"./filled/rocket.svg\": 1548,\n\t\"./filled/safety-certificate.svg\": 1549,\n\t\"./filled/save.svg\": 1550,\n\t\"./filled/schedule.svg\": 1551,\n\t\"./filled/security-scan.svg\": 1552,\n\t\"./filled/setting.svg\": 1553,\n\t\"./filled/shop.svg\": 1554,\n\t\"./filled/shopping.svg\": 1555,\n\t\"./filled/signal.svg\": 1556,\n\t\"./filled/signature.svg\": 1557,\n\t\"./filled/sketch-circle.svg\": 1558,\n\t\"./filled/sketch-square.svg\": 1559,\n\t\"./filled/skin.svg\": 1560,\n\t\"./filled/skype.svg\": 1561,\n\t\"./filled/slack-circle.svg\": 1562,\n\t\"./filled/slack-square.svg\": 1563,\n\t\"./filled/sliders.svg\": 1564,\n\t\"./filled/smile.svg\": 1565,\n\t\"./filled/snippets.svg\": 1566,\n\t\"./filled/sound.svg\": 1567,\n\t\"./filled/spotify.svg\": 1568,\n\t\"./filled/star.svg\": 1569,\n\t\"./filled/step-backward.svg\": 1570,\n\t\"./filled/step-forward.svg\": 1571,\n\t\"./filled/stop.svg\": 1572,\n\t\"./filled/sun.svg\": 1573,\n\t\"./filled/switcher.svg\": 1574,\n\t\"./filled/tablet.svg\": 1575,\n\t\"./filled/tag.svg\": 1576,\n\t\"./filled/tags.svg\": 1577,\n\t\"./filled/taobao-circle.svg\": 1578,\n\t\"./filled/taobao-square.svg\": 1579,\n\t\"./filled/thunderbolt.svg\": 1580,\n\t\"./filled/tik-tok.svg\": 1581,\n\t\"./filled/tool.svg\": 1582,\n\t\"./filled/trademark-circle.svg\": 1583,\n\t\"./filled/trophy.svg\": 1584,\n\t\"./filled/truck.svg\": 1585,\n\t\"./filled/twitch.svg\": 1586,\n\t\"./filled/twitter-circle.svg\": 1587,\n\t\"./filled/twitter-square.svg\": 1588,\n\t\"./filled/unlock.svg\": 1589,\n\t\"./filled/up-circle.svg\": 1590,\n\t\"./filled/up-square.svg\": 1591,\n\t\"./filled/usb.svg\": 1592,\n\t\"./filled/video-camera.svg\": 1593,\n\t\"./filled/wallet.svg\": 1594,\n\t\"./filled/warning.svg\": 1595,\n\t\"./filled/wechat-work.svg\": 1596,\n\t\"./filled/wechat.svg\": 1597,\n\t\"./filled/weibo-circle.svg\": 1598,\n\t\"./filled/weibo-square.svg\": 1599,\n\t\"./filled/windows.svg\": 1600,\n\t\"./filled/x.svg\": 1601,\n\t\"./filled/yahoo.svg\": 1602,\n\t\"./filled/youtube.svg\": 1603,\n\t\"./filled/yuque.svg\": 1604,\n\t\"./filled/zhihu-circle.svg\": 1605,\n\t\"./filled/zhihu-square.svg\": 1606,\n\t\"./outlined/account-book.svg\": 1607,\n\t\"./outlined/aim.svg\": 1608,\n\t\"./outlined/alert.svg\": 1609,\n\t\"./outlined/alibaba.svg\": 1610,\n\t\"./outlined/align-center.svg\": 1611,\n\t\"./outlined/align-left.svg\": 1612,\n\t\"./outlined/align-right.svg\": 1613,\n\t\"./outlined/alipay-circle.svg\": 1614,\n\t\"./outlined/alipay.svg\": 1615,\n\t\"./outlined/aliwangwang.svg\": 1616,\n\t\"./outlined/aliyun.svg\": 1617,\n\t\"./outlined/amazon.svg\": 1618,\n\t\"./outlined/android.svg\": 1619,\n\t\"./outlined/ant-cloud.svg\": 1620,\n\t\"./outlined/ant-design.svg\": 1621,\n\t\"./outlined/apartment.svg\": 1622,\n\t\"./outlined/api.svg\": 1623,\n\t\"./outlined/apple.svg\": 1624,\n\t\"./outlined/appstore-add.svg\": 1625,\n\t\"./outlined/appstore.svg\": 1626,\n\t\"./outlined/area-chart.svg\": 1627,\n\t\"./outlined/arrow-down.svg\": 1628,\n\t\"./outlined/arrow-left.svg\": 1629,\n\t\"./outlined/arrow-right.svg\": 1630,\n\t\"./outlined/arrow-up.svg\": 1631,\n\t\"./outlined/arrows-alt.svg\": 1632,\n\t\"./outlined/audio-muted.svg\": 1633,\n\t\"./outlined/audio.svg\": 1634,\n\t\"./outlined/audit.svg\": 1635,\n\t\"./outlined/backward.svg\": 1636,\n\t\"./outlined/baidu.svg\": 1637,\n\t\"./outlined/bank.svg\": 1638,\n\t\"./outlined/bar-chart.svg\": 1639,\n\t\"./outlined/barcode.svg\": 1640,\n\t\"./outlined/bars.svg\": 1641,\n\t\"./outlined/behance-square.svg\": 1642,\n\t\"./outlined/behance.svg\": 1643,\n\t\"./outlined/bell.svg\": 1644,\n\t\"./outlined/bg-colors.svg\": 1645,\n\t\"./outlined/bilibili.svg\": 1646,\n\t\"./outlined/block.svg\": 1647,\n\t\"./outlined/bold.svg\": 1648,\n\t\"./outlined/book.svg\": 1649,\n\t\"./outlined/border-bottom.svg\": 1650,\n\t\"./outlined/border-horizontal.svg\": 1651,\n\t\"./outlined/border-inner.svg\": 1652,\n\t\"./outlined/border-left.svg\": 1653,\n\t\"./outlined/border-outer.svg\": 1654,\n\t\"./outlined/border-right.svg\": 1655,\n\t\"./outlined/border-top.svg\": 1656,\n\t\"./outlined/border-verticle.svg\": 1657,\n\t\"./outlined/border.svg\": 1658,\n\t\"./outlined/borderless-table.svg\": 1659,\n\t\"./outlined/box-plot.svg\": 1660,\n\t\"./outlined/branches.svg\": 1661,\n\t\"./outlined/bug.svg\": 1662,\n\t\"./outlined/build.svg\": 1663,\n\t\"./outlined/bulb.svg\": 1664,\n\t\"./outlined/calculator.svg\": 1665,\n\t\"./outlined/calendar.svg\": 1666,\n\t\"./outlined/camera.svg\": 1667,\n\t\"./outlined/car.svg\": 1668,\n\t\"./outlined/caret-down.svg\": 1669,\n\t\"./outlined/caret-left.svg\": 1670,\n\t\"./outlined/caret-right.svg\": 1671,\n\t\"./outlined/caret-up.svg\": 1672,\n\t\"./outlined/carry-out.svg\": 1673,\n\t\"./outlined/check-circle.svg\": 1674,\n\t\"./outlined/check-square.svg\": 1675,\n\t\"./outlined/check.svg\": 1676,\n\t\"./outlined/chrome.svg\": 1677,\n\t\"./outlined/ci-circle.svg\": 1678,\n\t\"./outlined/ci.svg\": 1679,\n\t\"./outlined/clear.svg\": 1680,\n\t\"./outlined/clock-circle.svg\": 1681,\n\t\"./outlined/close-circle.svg\": 1682,\n\t\"./outlined/close-square.svg\": 1683,\n\t\"./outlined/close.svg\": 1684,\n\t\"./outlined/cloud-download.svg\": 1685,\n\t\"./outlined/cloud-server.svg\": 1686,\n\t\"./outlined/cloud-sync.svg\": 1687,\n\t\"./outlined/cloud-upload.svg\": 1688,\n\t\"./outlined/cloud.svg\": 1689,\n\t\"./outlined/cluster.svg\": 1690,\n\t\"./outlined/code-sandbox.svg\": 1691,\n\t\"./outlined/code.svg\": 1692,\n\t\"./outlined/codepen-circle.svg\": 1693,\n\t\"./outlined/codepen.svg\": 1694,\n\t\"./outlined/coffee.svg\": 1695,\n\t\"./outlined/column-height.svg\": 1696,\n\t\"./outlined/column-width.svg\": 1697,\n\t\"./outlined/comment.svg\": 1698,\n\t\"./outlined/compass.svg\": 1699,\n\t\"./outlined/compress.svg\": 1700,\n\t\"./outlined/console-sql.svg\": 1701,\n\t\"./outlined/contacts.svg\": 1702,\n\t\"./outlined/container.svg\": 1703,\n\t\"./outlined/control.svg\": 1704,\n\t\"./outlined/copy.svg\": 1705,\n\t\"./outlined/copyright-circle.svg\": 1706,\n\t\"./outlined/copyright.svg\": 1707,\n\t\"./outlined/credit-card.svg\": 1708,\n\t\"./outlined/crown.svg\": 1709,\n\t\"./outlined/customer-service.svg\": 1710,\n\t\"./outlined/dash.svg\": 1711,\n\t\"./outlined/dashboard.svg\": 1712,\n\t\"./outlined/database.svg\": 1713,\n\t\"./outlined/delete-column.svg\": 1714,\n\t\"./outlined/delete-row.svg\": 1715,\n\t\"./outlined/delete.svg\": 1716,\n\t\"./outlined/delivered-procedure.svg\": 1717,\n\t\"./outlined/deployment-unit.svg\": 1718,\n\t\"./outlined/desktop.svg\": 1719,\n\t\"./outlined/diff.svg\": 1720,\n\t\"./outlined/dingding.svg\": 1721,\n\t\"./outlined/dingtalk.svg\": 1722,\n\t\"./outlined/disconnect.svg\": 1723,\n\t\"./outlined/discord.svg\": 1724,\n\t\"./outlined/dislike.svg\": 1725,\n\t\"./outlined/docker.svg\": 1726,\n\t\"./outlined/dollar-circle.svg\": 1727,\n\t\"./outlined/dollar.svg\": 1728,\n\t\"./outlined/dot-chart.svg\": 1729,\n\t\"./outlined/dot-net.svg\": 1730,\n\t\"./outlined/double-left.svg\": 1731,\n\t\"./outlined/double-right.svg\": 1732,\n\t\"./outlined/down-circle.svg\": 1733,\n\t\"./outlined/down-square.svg\": 1734,\n\t\"./outlined/down.svg\": 1735,\n\t\"./outlined/download.svg\": 1736,\n\t\"./outlined/drag.svg\": 1737,\n\t\"./outlined/dribbble-square.svg\": 1738,\n\t\"./outlined/dribbble.svg\": 1739,\n\t\"./outlined/dropbox.svg\": 1740,\n\t\"./outlined/edit.svg\": 1741,\n\t\"./outlined/ellipsis.svg\": 1742,\n\t\"./outlined/enter.svg\": 1743,\n\t\"./outlined/environment.svg\": 1744,\n\t\"./outlined/euro-circle.svg\": 1745,\n\t\"./outlined/euro.svg\": 1746,\n\t\"./outlined/exception.svg\": 1747,\n\t\"./outlined/exclamation-circle.svg\": 1748,\n\t\"./outlined/exclamation.svg\": 1749,\n\t\"./outlined/expand-alt.svg\": 1750,\n\t\"./outlined/expand.svg\": 1751,\n\t\"./outlined/experiment.svg\": 1752,\n\t\"./outlined/export.svg\": 1753,\n\t\"./outlined/eye-invisible.svg\": 1754,\n\t\"./outlined/eye.svg\": 1755,\n\t\"./outlined/facebook.svg\": 1756,\n\t\"./outlined/fall.svg\": 1757,\n\t\"./outlined/fast-backward.svg\": 1758,\n\t\"./outlined/fast-forward.svg\": 1759,\n\t\"./outlined/field-binary.svg\": 1760,\n\t\"./outlined/field-number.svg\": 1761,\n\t\"./outlined/field-string.svg\": 1762,\n\t\"./outlined/field-time.svg\": 1763,\n\t\"./outlined/file-add.svg\": 1764,\n\t\"./outlined/file-done.svg\": 1765,\n\t\"./outlined/file-excel.svg\": 1766,\n\t\"./outlined/file-exclamation.svg\": 1767,\n\t\"./outlined/file-gif.svg\": 1768,\n\t\"./outlined/file-image.svg\": 1769,\n\t\"./outlined/file-jpg.svg\": 1770,\n\t\"./outlined/file-markdown.svg\": 1771,\n\t\"./outlined/file-pdf.svg\": 1772,\n\t\"./outlined/file-ppt.svg\": 1773,\n\t\"./outlined/file-protect.svg\": 1774,\n\t\"./outlined/file-search.svg\": 1775,\n\t\"./outlined/file-sync.svg\": 1776,\n\t\"./outlined/file-text.svg\": 1777,\n\t\"./outlined/file-unknown.svg\": 1778,\n\t\"./outlined/file-word.svg\": 1779,\n\t\"./outlined/file-zip.svg\": 1780,\n\t\"./outlined/file.svg\": 1781,\n\t\"./outlined/filter.svg\": 1782,\n\t\"./outlined/fire.svg\": 1783,\n\t\"./outlined/flag.svg\": 1784,\n\t\"./outlined/folder-add.svg\": 1785,\n\t\"./outlined/folder-open.svg\": 1786,\n\t\"./outlined/folder-view.svg\": 1787,\n\t\"./outlined/folder.svg\": 1788,\n\t\"./outlined/font-colors.svg\": 1789,\n\t\"./outlined/font-size.svg\": 1790,\n\t\"./outlined/fork.svg\": 1791,\n\t\"./outlined/form.svg\": 1792,\n\t\"./outlined/format-painter.svg\": 1793,\n\t\"./outlined/forward.svg\": 1794,\n\t\"./outlined/frown.svg\": 1795,\n\t\"./outlined/fullscreen-exit.svg\": 1796,\n\t\"./outlined/fullscreen.svg\": 1797,\n\t\"./outlined/function.svg\": 1798,\n\t\"./outlined/fund-projection-screen.svg\": 1799,\n\t\"./outlined/fund-view.svg\": 1800,\n\t\"./outlined/fund.svg\": 1801,\n\t\"./outlined/funnel-plot.svg\": 1802,\n\t\"./outlined/gateway.svg\": 1803,\n\t\"./outlined/gif.svg\": 1804,\n\t\"./outlined/gift.svg\": 1805,\n\t\"./outlined/github.svg\": 1806,\n\t\"./outlined/gitlab.svg\": 1807,\n\t\"./outlined/global.svg\": 1808,\n\t\"./outlined/gold.svg\": 1809,\n\t\"./outlined/google-plus.svg\": 1810,\n\t\"./outlined/google.svg\": 1811,\n\t\"./outlined/group.svg\": 1812,\n\t\"./outlined/harmony-o-s.svg\": 1813,\n\t\"./outlined/harmony-os.svg\": 1814,\n\t\"./outlined/hdd.svg\": 1815,\n\t\"./outlined/heart.svg\": 1816,\n\t\"./outlined/heat-map.svg\": 1817,\n\t\"./outlined/highlight.svg\": 1818,\n\t\"./outlined/history.svg\": 1819,\n\t\"./outlined/holder.svg\": 1820,\n\t\"./outlined/home.svg\": 1821,\n\t\"./outlined/hourglass.svg\": 1822,\n\t\"./outlined/html5.svg\": 1823,\n\t\"./outlined/idcard.svg\": 1824,\n\t\"./outlined/ie.svg\": 1825,\n\t\"./outlined/import.svg\": 1826,\n\t\"./outlined/inbox.svg\": 1827,\n\t\"./outlined/info-circle.svg\": 1828,\n\t\"./outlined/info.svg\": 1829,\n\t\"./outlined/insert-row-above.svg\": 1830,\n\t\"./outlined/insert-row-below.svg\": 1831,\n\t\"./outlined/insert-row-left.svg\": 1832,\n\t\"./outlined/insert-row-right.svg\": 1833,\n\t\"./outlined/instagram.svg\": 1834,\n\t\"./outlined/insurance.svg\": 1835,\n\t\"./outlined/interaction.svg\": 1836,\n\t\"./outlined/issues-close.svg\": 1837,\n\t\"./outlined/italic.svg\": 1838,\n\t\"./outlined/java-script.svg\": 1839,\n\t\"./outlined/java.svg\": 1840,\n\t\"./outlined/key.svg\": 1841,\n\t\"./outlined/kubernetes.svg\": 1842,\n\t\"./outlined/laptop.svg\": 1843,\n\t\"./outlined/layout.svg\": 1844,\n\t\"./outlined/left-circle.svg\": 1845,\n\t\"./outlined/left-square.svg\": 1846,\n\t\"./outlined/left.svg\": 1847,\n\t\"./outlined/like.svg\": 1848,\n\t\"./outlined/line-chart.svg\": 1849,\n\t\"./outlined/line-height.svg\": 1850,\n\t\"./outlined/line.svg\": 1851,\n\t\"./outlined/link.svg\": 1852,\n\t\"./outlined/linkedin.svg\": 1853,\n\t\"./outlined/linux.svg\": 1854,\n\t\"./outlined/loading-3-quarters.svg\": 1855,\n\t\"./outlined/loading.svg\": 1856,\n\t\"./outlined/lock.svg\": 1857,\n\t\"./outlined/login.svg\": 1858,\n\t\"./outlined/logout.svg\": 1859,\n\t\"./outlined/mac-command.svg\": 1860,\n\t\"./outlined/mail.svg\": 1861,\n\t\"./outlined/man.svg\": 1862,\n\t\"./outlined/medicine-box.svg\": 1863,\n\t\"./outlined/medium-workmark.svg\": 1864,\n\t\"./outlined/medium.svg\": 1865,\n\t\"./outlined/meh.svg\": 1866,\n\t\"./outlined/menu-fold.svg\": 1867,\n\t\"./outlined/menu-unfold.svg\": 1868,\n\t\"./outlined/menu.svg\": 1869,\n\t\"./outlined/merge-cells.svg\": 1870,\n\t\"./outlined/merge.svg\": 1871,\n\t\"./outlined/message.svg\": 1872,\n\t\"./outlined/minus-circle.svg\": 1873,\n\t\"./outlined/minus-square.svg\": 1874,\n\t\"./outlined/minus.svg\": 1875,\n\t\"./outlined/mobile.svg\": 1876,\n\t\"./outlined/money-collect.svg\": 1877,\n\t\"./outlined/monitor.svg\": 1878,\n\t\"./outlined/moon.svg\": 1879,\n\t\"./outlined/more.svg\": 1880,\n\t\"./outlined/muted.svg\": 1881,\n\t\"./outlined/node-collapse.svg\": 1882,\n\t\"./outlined/node-expand.svg\": 1883,\n\t\"./outlined/node-index.svg\": 1884,\n\t\"./outlined/notification.svg\": 1885,\n\t\"./outlined/number.svg\": 1886,\n\t\"./outlined/one-to-one.svg\": 1887,\n\t\"./outlined/open-a-i.svg\": 1888,\n\t\"./outlined/open-ai.svg\": 1889,\n\t\"./outlined/ordered-list.svg\": 1890,\n\t\"./outlined/paper-clip.svg\": 1891,\n\t\"./outlined/partition.svg\": 1892,\n\t\"./outlined/pause-circle.svg\": 1893,\n\t\"./outlined/pause.svg\": 1894,\n\t\"./outlined/pay-circle.svg\": 1895,\n\t\"./outlined/percentage.svg\": 1896,\n\t\"./outlined/phone.svg\": 1897,\n\t\"./outlined/pic-center.svg\": 1898,\n\t\"./outlined/pic-left.svg\": 1899,\n\t\"./outlined/pic-right.svg\": 1900,\n\t\"./outlined/picture.svg\": 1901,\n\t\"./outlined/pie-chart.svg\": 1902,\n\t\"./outlined/pinterest.svg\": 1903,\n\t\"./outlined/play-circle.svg\": 1904,\n\t\"./outlined/play-square.svg\": 1905,\n\t\"./outlined/plus-circle.svg\": 1906,\n\t\"./outlined/plus-square.svg\": 1907,\n\t\"./outlined/plus.svg\": 1908,\n\t\"./outlined/pound-circle.svg\": 1909,\n\t\"./outlined/pound.svg\": 1910,\n\t\"./outlined/poweroff.svg\": 1911,\n\t\"./outlined/printer.svg\": 1912,\n\t\"./outlined/product.svg\": 1913,\n\t\"./outlined/profile.svg\": 1914,\n\t\"./outlined/project.svg\": 1915,\n\t\"./outlined/property-safety.svg\": 1916,\n\t\"./outlined/pull-request.svg\": 1917,\n\t\"./outlined/pushpin.svg\": 1918,\n\t\"./outlined/python.svg\": 1919,\n\t\"./outlined/qq.svg\": 1920,\n\t\"./outlined/qrcode.svg\": 1921,\n\t\"./outlined/question-circle.svg\": 1922,\n\t\"./outlined/question.svg\": 1923,\n\t\"./outlined/radar-chart.svg\": 1924,\n\t\"./outlined/radius-bottomleft.svg\": 1925,\n\t\"./outlined/radius-bottomright.svg\": 1926,\n\t\"./outlined/radius-setting.svg\": 1927,\n\t\"./outlined/radius-upleft.svg\": 1928,\n\t\"./outlined/radius-upright.svg\": 1929,\n\t\"./outlined/read.svg\": 1930,\n\t\"./outlined/reconciliation.svg\": 1931,\n\t\"./outlined/red-envelope.svg\": 1932,\n\t\"./outlined/reddit.svg\": 1933,\n\t\"./outlined/redo.svg\": 1934,\n\t\"./outlined/reload.svg\": 1935,\n\t\"./outlined/rest.svg\": 1936,\n\t\"./outlined/retweet.svg\": 1937,\n\t\"./outlined/right-circle.svg\": 1938,\n\t\"./outlined/right-square.svg\": 1939,\n\t\"./outlined/right.svg\": 1940,\n\t\"./outlined/rise.svg\": 1941,\n\t\"./outlined/robot.svg\": 1942,\n\t\"./outlined/rocket.svg\": 1943,\n\t\"./outlined/rollback.svg\": 1944,\n\t\"./outlined/rotate-left.svg\": 1945,\n\t\"./outlined/rotate-right.svg\": 1946,\n\t\"./outlined/ruby.svg\": 1947,\n\t\"./outlined/safety-certificate.svg\": 1948,\n\t\"./outlined/safety.svg\": 1949,\n\t\"./outlined/save.svg\": 1950,\n\t\"./outlined/scan.svg\": 1951,\n\t\"./outlined/schedule.svg\": 1952,\n\t\"./outlined/scissor.svg\": 1953,\n\t\"./outlined/search.svg\": 1954,\n\t\"./outlined/security-scan.svg\": 1955,\n\t\"./outlined/select.svg\": 1956,\n\t\"./outlined/send.svg\": 1957,\n\t\"./outlined/setting.svg\": 1958,\n\t\"./outlined/shake.svg\": 1959,\n\t\"./outlined/share-alt.svg\": 1960,\n\t\"./outlined/shop.svg\": 1961,\n\t\"./outlined/shopping-cart.svg\": 1962,\n\t\"./outlined/shopping.svg\": 1963,\n\t\"./outlined/shrink.svg\": 1964,\n\t\"./outlined/signature.svg\": 1965,\n\t\"./outlined/sisternode.svg\": 1966,\n\t\"./outlined/sketch.svg\": 1967,\n\t\"./outlined/skin.svg\": 1968,\n\t\"./outlined/skype.svg\": 1969,\n\t\"./outlined/slack-square.svg\": 1970,\n\t\"./outlined/slack.svg\": 1971,\n\t\"./outlined/sliders.svg\": 1972,\n\t\"./outlined/small-dash.svg\": 1973,\n\t\"./outlined/smile.svg\": 1974,\n\t\"./outlined/snippets.svg\": 1975,\n\t\"./outlined/solution.svg\": 1976,\n\t\"./outlined/sort-ascending.svg\": 1977,\n\t\"./outlined/sort-descending.svg\": 1978,\n\t\"./outlined/sound.svg\": 1979,\n\t\"./outlined/split-cells.svg\": 1980,\n\t\"./outlined/spotify.svg\": 1981,\n\t\"./outlined/star.svg\": 1982,\n\t\"./outlined/step-backward.svg\": 1983,\n\t\"./outlined/step-forward.svg\": 1984,\n\t\"./outlined/stock.svg\": 1985,\n\t\"./outlined/stop.svg\": 1986,\n\t\"./outlined/strikethrough.svg\": 1987,\n\t\"./outlined/subnode.svg\": 1988,\n\t\"./outlined/sun.svg\": 1989,\n\t\"./outlined/swap-left.svg\": 1990,\n\t\"./outlined/swap-right.svg\": 1991,\n\t\"./outlined/swap.svg\": 1992,\n\t\"./outlined/switcher.svg\": 1993,\n\t\"./outlined/sync.svg\": 1994,\n\t\"./outlined/table.svg\": 1995,\n\t\"./outlined/tablet.svg\": 1996,\n\t\"./outlined/tag.svg\": 1997,\n\t\"./outlined/tags.svg\": 1998,\n\t\"./outlined/taobao-circle.svg\": 1999,\n\t\"./outlined/taobao.svg\": 2000,\n\t\"./outlined/team.svg\": 2001,\n\t\"./outlined/thunderbolt.svg\": 2002,\n\t\"./outlined/tik-tok.svg\": 2003,\n\t\"./outlined/to-top.svg\": 2004,\n\t\"./outlined/tool.svg\": 2005,\n\t\"./outlined/trademark-circle.svg\": 2006,\n\t\"./outlined/trademark.svg\": 2007,\n\t\"./outlined/transaction.svg\": 2008,\n\t\"./outlined/translation.svg\": 2009,\n\t\"./outlined/trophy.svg\": 2010,\n\t\"./outlined/truck.svg\": 2011,\n\t\"./outlined/twitch.svg\": 2012,\n\t\"./outlined/twitter.svg\": 2013,\n\t\"./outlined/underline.svg\": 2014,\n\t\"./outlined/undo.svg\": 2015,\n\t\"./outlined/ungroup.svg\": 2016,\n\t\"./outlined/unlock.svg\": 2017,\n\t\"./outlined/unordered-list.svg\": 2018,\n\t\"./outlined/up-circle.svg\": 2019,\n\t\"./outlined/up-square.svg\": 2020,\n\t\"./outlined/up.svg\": 2021,\n\t\"./outlined/upload.svg\": 2022,\n\t\"./outlined/usb.svg\": 2023,\n\t\"./outlined/user-add.svg\": 2024,\n\t\"./outlined/user-delete.svg\": 2025,\n\t\"./outlined/user-switch.svg\": 2026,\n\t\"./outlined/user.svg\": 2027,\n\t\"./outlined/usergroup-add.svg\": 2028,\n\t\"./outlined/usergroup-delete.svg\": 2029,\n\t\"./outlined/verified.svg\": 2030,\n\t\"./outlined/vertical-align-bottom.svg\": 2031,\n\t\"./outlined/vertical-align-middle.svg\": 2032,\n\t\"./outlined/vertical-align-top.svg\": 2033,\n\t\"./outlined/vertical-left.svg\": 2034,\n\t\"./outlined/vertical-right.svg\": 2035,\n\t\"./outlined/video-camera-add.svg\": 2036,\n\t\"./outlined/video-camera.svg\": 2037,\n\t\"./outlined/wallet.svg\": 2038,\n\t\"./outlined/warning.svg\": 2039,\n\t\"./outlined/wechat-work.svg\": 2040,\n\t\"./outlined/wechat.svg\": 2041,\n\t\"./outlined/weibo-circle.svg\": 2042,\n\t\"./outlined/weibo-square.svg\": 2043,\n\t\"./outlined/weibo.svg\": 2044,\n\t\"./outlined/whats-app.svg\": 2045,\n\t\"./outlined/wifi.svg\": 2046,\n\t\"./outlined/windows.svg\": 2047,\n\t\"./outlined/woman.svg\": 2048,\n\t\"./outlined/x.svg\": 2049,\n\t\"./outlined/yahoo.svg\": 2050,\n\t\"./outlined/youtube.svg\": 2051,\n\t\"./outlined/yuque.svg\": 2052,\n\t\"./outlined/zhihu.svg\": 2053,\n\t\"./outlined/zoom-in.svg\": 2054,\n\t\"./outlined/zoom-out.svg\": 2055,\n\t\"./twotone/account-book.svg\": 2056,\n\t\"./twotone/alert.svg\": 2057,\n\t\"./twotone/api.svg\": 2058,\n\t\"./twotone/appstore.svg\": 2059,\n\t\"./twotone/audio.svg\": 2060,\n\t\"./twotone/bank.svg\": 2061,\n\t\"./twotone/bell.svg\": 2062,\n\t\"./twotone/book.svg\": 2063,\n\t\"./twotone/box-plot.svg\": 2064,\n\t\"./twotone/bug.svg\": 2065,\n\t\"./twotone/build.svg\": 2066,\n\t\"./twotone/bulb.svg\": 2067,\n\t\"./twotone/calculator.svg\": 2068,\n\t\"./twotone/calendar.svg\": 2069,\n\t\"./twotone/camera.svg\": 2070,\n\t\"./twotone/car.svg\": 2071,\n\t\"./twotone/carry-out.svg\": 2072,\n\t\"./twotone/check-circle.svg\": 2073,\n\t\"./twotone/check-square.svg\": 2074,\n\t\"./twotone/ci-circle.svg\": 2075,\n\t\"./twotone/ci.svg\": 2076,\n\t\"./twotone/clock-circle.svg\": 2077,\n\t\"./twotone/close-circle.svg\": 2078,\n\t\"./twotone/close-square.svg\": 2079,\n\t\"./twotone/cloud.svg\": 2080,\n\t\"./twotone/code.svg\": 2081,\n\t\"./twotone/compass.svg\": 2082,\n\t\"./twotone/contacts.svg\": 2083,\n\t\"./twotone/container.svg\": 2084,\n\t\"./twotone/control.svg\": 2085,\n\t\"./twotone/copy.svg\": 2086,\n\t\"./twotone/copyright-circle.svg\": 2087,\n\t\"./twotone/copyright.svg\": 2088,\n\t\"./twotone/credit-card.svg\": 2089,\n\t\"./twotone/crown.svg\": 2090,\n\t\"./twotone/customer-service.svg\": 2091,\n\t\"./twotone/dashboard.svg\": 2092,\n\t\"./twotone/database.svg\": 2093,\n\t\"./twotone/delete.svg\": 2094,\n\t\"./twotone/diff.svg\": 2095,\n\t\"./twotone/dislike.svg\": 2096,\n\t\"./twotone/dollar-circle.svg\": 2097,\n\t\"./twotone/dollar.svg\": 2098,\n\t\"./twotone/down-circle.svg\": 2099,\n\t\"./twotone/down-square.svg\": 2100,\n\t\"./twotone/edit.svg\": 2101,\n\t\"./twotone/environment.svg\": 2102,\n\t\"./twotone/euro-circle.svg\": 2103,\n\t\"./twotone/euro.svg\": 2104,\n\t\"./twotone/exclamation-circle.svg\": 2105,\n\t\"./twotone/experiment.svg\": 2106,\n\t\"./twotone/eye-invisible.svg\": 2107,\n\t\"./twotone/eye.svg\": 2108,\n\t\"./twotone/file-add.svg\": 2109,\n\t\"./twotone/file-excel.svg\": 2110,\n\t\"./twotone/file-exclamation.svg\": 2111,\n\t\"./twotone/file-image.svg\": 2112,\n\t\"./twotone/file-markdown.svg\": 2113,\n\t\"./twotone/file-pdf.svg\": 2114,\n\t\"./twotone/file-ppt.svg\": 2115,\n\t\"./twotone/file-text.svg\": 2116,\n\t\"./twotone/file-unknown.svg\": 2117,\n\t\"./twotone/file-word.svg\": 2118,\n\t\"./twotone/file-zip.svg\": 2119,\n\t\"./twotone/file.svg\": 2120,\n\t\"./twotone/filter.svg\": 2121,\n\t\"./twotone/fire.svg\": 2122,\n\t\"./twotone/flag.svg\": 2123,\n\t\"./twotone/folder-add.svg\": 2124,\n\t\"./twotone/folder-open.svg\": 2125,\n\t\"./twotone/folder.svg\": 2126,\n\t\"./twotone/frown.svg\": 2127,\n\t\"./twotone/fund.svg\": 2128,\n\t\"./twotone/funnel-plot.svg\": 2129,\n\t\"./twotone/gift.svg\": 2130,\n\t\"./twotone/gold.svg\": 2131,\n\t\"./twotone/hdd.svg\": 2132,\n\t\"./twotone/heart.svg\": 2133,\n\t\"./twotone/highlight.svg\": 2134,\n\t\"./twotone/home.svg\": 2135,\n\t\"./twotone/hourglass.svg\": 2136,\n\t\"./twotone/html5.svg\": 2137,\n\t\"./twotone/idcard.svg\": 2138,\n\t\"./twotone/info-circle.svg\": 2139,\n\t\"./twotone/insurance.svg\": 2140,\n\t\"./twotone/interaction.svg\": 2141,\n\t\"./twotone/layout.svg\": 2142,\n\t\"./twotone/left-circle.svg\": 2143,\n\t\"./twotone/left-square.svg\": 2144,\n\t\"./twotone/like.svg\": 2145,\n\t\"./twotone/lock.svg\": 2146,\n\t\"./twotone/mail.svg\": 2147,\n\t\"./twotone/medicine-box.svg\": 2148,\n\t\"./twotone/meh.svg\": 2149,\n\t\"./twotone/message.svg\": 2150,\n\t\"./twotone/minus-circle.svg\": 2151,\n\t\"./twotone/minus-square.svg\": 2152,\n\t\"./twotone/mobile.svg\": 2153,\n\t\"./twotone/money-collect.svg\": 2154,\n\t\"./twotone/notification.svg\": 2155,\n\t\"./twotone/pause-circle.svg\": 2156,\n\t\"./twotone/phone.svg\": 2157,\n\t\"./twotone/picture.svg\": 2158,\n\t\"./twotone/pie-chart.svg\": 2159,\n\t\"./twotone/play-circle.svg\": 2160,\n\t\"./twotone/play-square.svg\": 2161,\n\t\"./twotone/plus-circle.svg\": 2162,\n\t\"./twotone/plus-square.svg\": 2163,\n\t\"./twotone/pound-circle.svg\": 2164,\n\t\"./twotone/printer.svg\": 2165,\n\t\"./twotone/profile.svg\": 2166,\n\t\"./twotone/project.svg\": 2167,\n\t\"./twotone/property-safety.svg\": 2168,\n\t\"./twotone/pushpin.svg\": 2169,\n\t\"./twotone/question-circle.svg\": 2170,\n\t\"./twotone/reconciliation.svg\": 2171,\n\t\"./twotone/red-envelope.svg\": 2172,\n\t\"./twotone/rest.svg\": 2173,\n\t\"./twotone/right-circle.svg\": 2174,\n\t\"./twotone/right-square.svg\": 2175,\n\t\"./twotone/rocket.svg\": 2176,\n\t\"./twotone/safety-certificate.svg\": 2177,\n\t\"./twotone/save.svg\": 2178,\n\t\"./twotone/schedule.svg\": 2179,\n\t\"./twotone/security-scan.svg\": 2180,\n\t\"./twotone/setting.svg\": 2181,\n\t\"./twotone/shop.svg\": 2182,\n\t\"./twotone/shopping.svg\": 2183,\n\t\"./twotone/skin.svg\": 2184,\n\t\"./twotone/sliders.svg\": 2185,\n\t\"./twotone/smile.svg\": 2186,\n\t\"./twotone/snippets.svg\": 2187,\n\t\"./twotone/sound.svg\": 2188,\n\t\"./twotone/star.svg\": 2189,\n\t\"./twotone/stop.svg\": 2190,\n\t\"./twotone/switcher.svg\": 2191,\n\t\"./twotone/tablet.svg\": 2192,\n\t\"./twotone/tag.svg\": 2193,\n\t\"./twotone/tags.svg\": 2194,\n\t\"./twotone/thunderbolt.svg\": 2195,\n\t\"./twotone/tool.svg\": 2196,\n\t\"./twotone/trademark-circle.svg\": 2197,\n\t\"./twotone/trophy.svg\": 2198,\n\t\"./twotone/unlock.svg\": 2199,\n\t\"./twotone/up-circle.svg\": 2200,\n\t\"./twotone/up-square.svg\": 2201,\n\t\"./twotone/usb.svg\": 2202,\n\t\"./twotone/video-camera.svg\": 2203,\n\t\"./twotone/wallet.svg\": 2204,\n\t\"./twotone/warning.svg\": 2205\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1371;","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DataStoreDetailsCard\":\"DataStoreDetailsCard_XZ3sW\",\"DataStoreViewLogsIcon\":\"DataStoreViewLogsIcon_0XFPO\",\"LogInnerHeading\":\"LogInnerHeading_Xryym\",\"LogDetailsLabel\":\"LogDetailsLabel_k6+Xy\",\"LogDetailsText\":\"LogDetailsText_PkQdg\",\"DownloadLogsButton\":\"DownloadLogsButton_phYqR\",\"LogsDivider\":\"LogsDivider_SkU5q\",\"LogsEntriesHeader\":\"LogsEntriesHeader_jvuyo\",\"HostsSelect\":\"HostsSelect_R9COv\",\"LogsEntriesTable\":\"LogsEntriesTable_cE2IA\",\"ant-modal-header\":\"ant-modal-header_qUe1u\",\"ant-modal-content\":\"ant-modal-content_sTI+7\",\"ant-modal-footer\":\"ant-modal-footer_eWrej\",\"ant-message-notice-content\":\"ant-message-notice-content_wcbIM\",\"ant-tooltip-inner\":\"ant-tooltip-inner_n+Ocu\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppGridTable\":\"AppGridTable_kKt85\",\"AppGridTableHeader\":\"AppGridTableHeader_be7Fu\",\"AppGridTableHeaderCol\":\"AppGridTableHeaderCol_71aDN\",\"AppGridTableDataRow\":\"AppGridTableDataRow_phm2m\",\"AppGridTableDataRowNormal\":\"AppGridTableDataRowNormal_6yU5-\",\"AppGridTableDataRowAlert\":\"AppGridTableDataRowAlert_wr8l9\",\"AppGridTableDataRowDisabled\":\"AppGridTableDataRowDisabled_GshsZ\",\"AppGridTableDataCol\":\"AppGridTableDataCol_a7GkI\",\"AppGridTableDataColDisabled\":\"AppGridTableDataColDisabled_2mXhl\",\"AppGridTableDataColCenter\":\"AppGridTableDataColCenter_dpnMA\",\"AppGridTableDataColStart\":\"AppGridTableDataColStart_tPAZy\",\"AppGridTableDataColEnd\":\"AppGridTableDataColEnd_D0FBK\",\"AppGridTableContainer\":\"AppGridTableContainer_sK+Ik\",\"AppGridTableSmallContainer\":\"AppGridTableSmallContainer_4aj9m\",\"ant-modal-header\":\"ant-modal-header_Dwc2s\",\"ant-modal-content\":\"ant-modal-content_5ypUI\",\"ant-modal-footer\":\"ant-modal-footer_GFI1U\",\"ant-message-notice-content\":\"ant-message-notice-content_GuZHb\",\"ant-tooltip-inner\":\"ant-tooltip-inner_4mCaZ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"WizardFormConfigurationStep4Group\":\"WizardFormConfigurationStep4Group_2TX+x\",\"WizardFormConfigurationStep4RadioItem\":\"WizardFormConfigurationStep4RadioItem_Dgbdm\",\"WizardFormConfigurationStep4RadioTypeItem\":\"WizardFormConfigurationStep4RadioTypeItem_NrhNS\",\"WizardFormConfigurationStep4Item\":\"WizardFormConfigurationStep4Item_f+cBr\",\"WizardFormConfigurationStep4NetworkTypeItem\":\"WizardFormConfigurationStep4NetworkTypeItem_X3uKC\",\"WizardFormConfigurationStep4VPC\":\"WizardFormConfigurationStep4VPC_SYPix\",\"WizardFormConfigurationStep4AZ\":\"WizardFormConfigurationStep4AZ_ltQba\",\"ant-card-body\":\"ant-card-body_WygSW\",\"StepsExtraSmallScreen\":\"StepsExtraSmallScreen_9x-4q\",\"ant-modal-header\":\"ant-modal-header_g9CUr\",\"ant-modal-content\":\"ant-modal-content_bQyv-\",\"ant-modal-footer\":\"ant-modal-footer_zNWxT\",\"ant-message-notice-content\":\"ant-message-notice-content_ly6QX\",\"ant-tooltip-inner\":\"ant-tooltip-inner_XX-+q\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppDeleteModalTitle\":\"AppDeleteModalTitle_cAgz-\",\"AppDeleteModalSubTitle\":\"AppDeleteModalSubTitle_+JD-I\",\"AppDeleteModalCol\":\"AppDeleteModalCol_jIa7c\",\"AppDeleteModalIconStack\":\"AppDeleteModalIconStack_2h0P3\",\"AppDeleteLabelCol\":\"AppDeleteLabelCol_mSJwC\",\"AppDeleteServiceInfo\":\"AppDeleteServiceInfo_T2c4k\",\"AppDeleteService\":\"AppDeleteService_dikTN\",\"AppDeleteServiceLabel\":\"AppDeleteServiceLabel_fGRv6\",\"AppDeleteModalStoreInfo\":\"AppDeleteModalStoreInfo_fr9xP\",\"AppDeleteModalSubInfo\":\"AppDeleteModalSubInfo_nLSDn\",\"AppDeleteModalLogo\":\"AppDeleteModalLogo_t++7V\",\"AppDeleteInputCol\":\"AppDeleteInputCol_ngy4y\",\"AppDeleteCircleIcon\":\"AppDeleteCircleIcon_qnSss\",\"AppDeleteInput\":\"AppDeleteInput_TCdlT\",\"ant-modal-header\":\"ant-modal-header_3Y2IL\",\"ant-modal-content\":\"ant-modal-content_gQjM8\",\"ant-modal-footer\":\"ant-modal-footer_UIp67\",\"ant-message-notice-content\":\"ant-message-notice-content_z+GT8\",\"ant-tooltip-inner\":\"ant-tooltip-inner_-Ag4D\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ServiceResourceslabel\":\"ServiceResourceslabel_tKkBs\",\"ServiceResourcesSection\":\"ServiceResourcesSection_8jGQN\",\"ServiceResourcesDetail\":\"ServiceResourcesDetail_GhmW8\",\"ServiceResourcesInsatnceSize\":\"ServiceResourcesInsatnceSize_WyC5Y\",\"ServiceResourcesInstance\":\"ServiceResourcesInstance_tkWVd\",\"ServiceResourcesRow\":\"ServiceResourcesRow_sY8zq\",\"ant-modal-header\":\"ant-modal-header_rX425\",\"ant-modal-content\":\"ant-modal-content_43U3R\",\"ant-modal-footer\":\"ant-modal-footer_64gtX\",\"ant-message-notice-content\":\"ant-message-notice-content_QEaT0\",\"ant-tooltip-inner\":\"ant-tooltip-inner_fLyeZ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Projects\":\"Projects_7qx52\",\"ProjectsTabs\":\"ProjectsTabs_H59Vn\",\"ProjectsOperationButton\":\"ProjectsOperationButton_muOEi\",\"CmonStatusAlert\":\"CmonStatusAlert_9OFB5\",\"PopOverOverlayInnerStyle\":\"PopOverOverlayInnerStyle_Xh2nD\",\"PopoverOverStyle\":\"PopoverOverStyle_6Ikm7\",\"FilterButton\":\"FilterButton_U-80o\",\"FilterBadge\":\"FilterBadge_b+t+j\",\"IconTextMargin4\":\"IconTextMargin4_8ZD5B\",\"ant-modal-header\":\"ant-modal-header_beODY\",\"ant-modal-content\":\"ant-modal-content_hXFgm\",\"ant-modal-footer\":\"ant-modal-footer_5MJyh\",\"ant-message-notice-content\":\"ant-message-notice-content_K-en2\",\"ant-tooltip-inner\":\"ant-tooltip-inner_c3UKn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DbUsersCollapse\":\"DbUsersCollapse_B-DHu\",\"DbUsersCollapsePanel\":\"DbUsersCollapsePanel_51iHy\",\"DrawerFooterButtonsLeft\":\"DrawerFooterButtonsLeft_Sa7TU\",\"DrawerFooterButtonsRight\":\"DrawerFooterButtonsRight_FUshk\",\"DbUsersQuickNavAnchor\":\"DbUsersQuickNavAnchor_c-lep\",\"DbUsersOptionsColumn\":\"DbUsersOptionsColumn_7aS6T\",\"DbUserConnectionStringDescription\":\"DbUserConnectionStringDescription_B2mDd\",\"DbUsersExpandableRowContent\":\"DbUsersExpandableRowContent_tIuji\",\"DbUsersStop\":\"DbUsersStop_d7h7+\",\"DbUsersLabel\":\"DbUsersLabel_FfKhL\",\"DbUsersSegmentedData\":\"DbUsersSegmentedData_nJ3Xc\",\"PrivilegesContainer\":\"PrivilegesContainer_d8hwj\",\"DbUsersSegmentedFirstItem\":\"DbUsersSegmentedFirstItem_YqSrw\",\"DbUsersSegmentedSecondItem\":\"DbUsersSegmentedSecondItem_cP9si\",\"DbUserPopoverCol\":\"DbUserPopoverCol_d2fLX\",\"ConnectionHeaderButtons\":\"ConnectionHeaderButtons_oghQo\",\"ant-modal-header\":\"ant-modal-header_BsFO2\",\"ant-modal-content\":\"ant-modal-content_gCFDg\",\"ant-modal-footer\":\"ant-modal-footer_7Z85w\",\"ant-message-notice-content\":\"ant-message-notice-content_t3i8L\",\"ant-tooltip-inner\":\"ant-tooltip-inner_KBW9j\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"PaymentCardDetails\":\"PaymentCardDetails_5nWN1\",\"PaymentLogo\":\"PaymentLogo_la0wV\",\"PaymentCard\":\"PaymentCard_HMjcX\",\"ant-modal-header\":\"ant-modal-header_Q1ssV\",\"ant-modal-content\":\"ant-modal-content_V3xmN\",\"ant-modal-footer\":\"ant-modal-footer_yaA8D\",\"ant-message-notice-content\":\"ant-message-notice-content_zbXOW\",\"ant-tooltip-inner\":\"ant-tooltip-inner_ojksY\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"HostDashboard\":\"HostDashboard_A5vHH\",\"ant-modal-header\":\"ant-modal-header_R70UZ\",\"ant-modal-content\":\"ant-modal-content_Iyonh\",\"ant-modal-footer\":\"ant-modal-footer_j4tLt\",\"ant-message-notice-content\":\"ant-message-notice-content_SqZaA\",\"ant-tooltip-inner\":\"ant-tooltip-inner_tydo9\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"WizardFormConfigurationStep1ConfigCard\":\"WizardFormConfigurationStep1ConfigCard_6Brd8\",\"WizardFormConfigurationStep1ConfigOpt\":\"WizardFormConfigurationStep1ConfigOpt_x2kbi\",\"WizardFormConfigurationStep1ConfigCol\":\"WizardFormConfigurationStep1ConfigCol_RKUMw\",\"WizardFormConfigurationStep1ConfigColWithHover\":\"WizardFormConfigurationStep1ConfigColWithHover_P8Ecl\",\"WizardFormConfigurationColSelected\":\"WizardFormConfigurationColSelected_OeWn3\",\"WizardFormConfigurationStep1ConfigRow\":\"WizardFormConfigurationStep1ConfigRow_kbmIH\",\"WizardFormConfigurationStep1MarkerGreen\":\"WizardFormConfigurationStep1MarkerGreen_Ra1yF\",\"WizardFormConfigurationEmailNotification\":\"WizardFormConfigurationEmailNotification_KjzHZ\",\"WizardFormConfigurationAdvancedSettings\":\"WizardFormConfigurationAdvancedSettings_9LUTL\",\"WizardFormConfigurationAdvancedSettingsButton\":\"WizardFormConfigurationAdvancedSettingsButton_HWGio\",\"ant-modal-header\":\"ant-modal-header_W607K\",\"ant-modal-content\":\"ant-modal-content_fCUs7\",\"ant-modal-footer\":\"ant-modal-footer_NXFGs\",\"ant-message-notice-content\":\"ant-message-notice-content_rELT3\",\"ant-tooltip-inner\":\"ant-tooltip-inner_ImOG-\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"PopoverContentRow\":\"PopoverContentRow_BW-FR\",\"PopoverActionsRow\":\"PopoverActionsRow_8G3Qw\",\"ExclamationCircleFilledColor\":\"ExclamationCircleFilledColor_LxXsQ\",\"DeleteDbParametersPopoverButton\":\"DeleteDbParametersPopoverButton_-8-c-\",\"DisabledDeleteDbParametersPopoverButton\":\"DisabledDeleteDbParametersPopoverButton_h3xsP\",\"ant-modal-header\":\"ant-modal-header_SL8Su\",\"ant-modal-content\":\"ant-modal-content_OtdNm\",\"ant-modal-footer\":\"ant-modal-footer_y9bo4\",\"ant-message-notice-content\":\"ant-message-notice-content_CA1bY\",\"ant-tooltip-inner\":\"ant-tooltip-inner_Q4Ijk\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DeploymentCompareRangePickerCard\":\"DeploymentCompareRangePickerCard_L9YeM\",\"DeploymentCompareRangePickerCardContent\":\"DeploymentCompareRangePickerCardContent_ROZJC\",\"DeploymentCompareRangePickerCardContentLeft\":\"DeploymentCompareRangePickerCardContentLeft_m0Fyg\",\"DeploymentCompareRangePickerCardContentRight\":\"DeploymentCompareRangePickerCardContentRight_dJgkq\",\"DeploymentCompareTabs\":\"DeploymentCompareTabs_KQGu1\",\"DeploymentCompareExtraTabContent\":\"DeploymentCompareExtraTabContent_D5dGy\",\"DeploymentCompareCustomTabBar\":\"DeploymentCompareCustomTabBar_HCzNJ\",\"DeploymentCompareExtraTabContentSelect\":\"DeploymentCompareExtraTabContentSelect_FJbAO\",\"ant-modal-header\":\"ant-modal-header_MulzL\",\"ant-modal-content\":\"ant-modal-content_FHAE3\",\"ant-modal-footer\":\"ant-modal-footer_Jup-O\",\"ant-message-notice-content\":\"ant-message-notice-content_stoTr\",\"ant-tooltip-inner\":\"ant-tooltip-inner_jklj2\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"CheckoutCardElementContainer\":\"CheckoutCardElementContainer_LdMlD\",\"StripeElement\":\"StripeElement_+TTbp\",\"AddCardFormFields\":\"AddCardFormFields_9F6Lo\",\"AddCard\":\"AddCard_gkgAz\",\"AddCardBilling\":\"AddCardBilling_w0cMY\",\"AppFormFlagsSelect\":\"AppFormFlagsSelect_a7BTs\",\"ant-modal-header\":\"ant-modal-header_faTSG\",\"ant-modal-content\":\"ant-modal-content_-01uU\",\"ant-modal-footer\":\"ant-modal-footer_54iau\",\"ant-message-notice-content\":\"ant-message-notice-content_pHuBP\",\"ant-tooltip-inner\":\"ant-tooltip-inner_iliTG\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DataStoreOverviewGeneralInformation\":\"DataStoreOverviewGeneralInformation_6si5a\",\"DataStoreOverviewGeneralInformationHeaderLeft\":\"DataStoreOverviewGeneralInformationHeaderLeft_KCD45\",\"DataStoreOverviewGeneralInformationEvenColumns\":\"DataStoreOverviewGeneralInformationEvenColumns_V4LGI\",\"DataStoreOverviewGeneralInformationLabel\":\"DataStoreOverviewGeneralInformationLabel_C+G9m\",\"DataStoreOverviewGeneralInformationValue\":\"DataStoreOverviewGeneralInformationValue_20XrH\",\"DataStoreOverviewGeneralInformationName\":\"DataStoreOverviewGeneralInformationName_7aj5M\",\"ant-modal-header\":\"ant-modal-header_xvn5Q\",\"ant-modal-content\":\"ant-modal-content_5LafD\",\"ant-modal-footer\":\"ant-modal-footer_Vw-B1\",\"ant-message-notice-content\":\"ant-message-notice-content_1D+kw\",\"ant-tooltip-inner\":\"ant-tooltip-inner_9myXE\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DataStoreSettingsMaintenanceLabel\":\"DataStoreSettingsMaintenanceLabel_aYDEU\",\"DataStoreSettingsMaintenanceDescription\":\"DataStoreSettingsMaintenanceDescription_59ZK+\",\"DataStoreSettingsMaintenanceAlert\":\"DataStoreSettingsMaintenanceAlert_flDc3\",\"DataStoreSettingsUpgradeLabel\":\"DataStoreSettingsUpgradeLabel_bT87O\",\"DataStoreSettingsUpgradeButton\":\"DataStoreSettingsUpgradeButton_oXoWh\",\"DataStoreSettingsUpToDate\":\"DataStoreSettingsUpToDate_b6xCK\",\"DataStoreSettingsMaintenanceNote\":\"DataStoreSettingsMaintenanceNote_0UMO8\",\"ant-modal-header\":\"ant-modal-header_J+wRD\",\"ant-modal-content\":\"ant-modal-content_cro6+\",\"ant-modal-footer\":\"ant-modal-footer_R7eBP\",\"ant-message-notice-content\":\"ant-message-notice-content_ynX-6\",\"ant-tooltip-inner\":\"ant-tooltip-inner_OhWen\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DataStoreServices\":\"DataStoreServices_N0hql\",\"DataStoreServiceJobCard\":\"DataStoreServiceJobCard_oz5Hk\",\"DataStoreServiceJobCardType\":\"DataStoreServiceJobCardType_KSeit\",\"DataStoreServicesJobStatus\":\"DataStoreServicesJobStatus_lzPpQ\",\"DataStoreServicesJobRunningAlert\":\"DataStoreServicesJobRunningAlert_qnoVD\",\"DataStoreServicesSwitchToEventViewerLink\":\"DataStoreServicesSwitchToEventViewerLink_8ePjl\",\"AppGridTableWrapper\":\"AppGridTableWrapper_TcNGf\",\"AppTableHeadingBar\":\"AppTableHeadingBar_xetaF\",\"BadgeIcon\":\"BadgeIcon_T4bRe\",\"RebootButton\":\"RebootButton_RfMJ5\",\"ant-modal-header\":\"ant-modal-header_wN85-\",\"ant-modal-content\":\"ant-modal-content_ZCx1f\",\"ant-modal-footer\":\"ant-modal-footer_K2Abz\",\"ant-message-notice-content\":\"ant-message-notice-content_oWsol\",\"ant-tooltip-inner\":\"ant-tooltip-inner_Chgeb\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"WizardFormConfigurationStep6Coupon\":\"WizardFormConfigurationStep6Coupon_Eqguk\",\"WizardFormConfigurationStep6CouponText\":\"WizardFormConfigurationStep6CouponText_+6tvM\",\"WizardFormConfigurationStep6Title\":\"WizardFormConfigurationStep6Title_aAv+O\",\"WizardFormConfigurationStep6Row\":\"WizardFormConfigurationStep6Row_4b1Hf\",\"WizardFormConfigurationStep6SelectedCard\":\"WizardFormConfigurationStep6SelectedCard_FWe3a\",\"WizardFormConfigurationStep6Card\":\"WizardFormConfigurationStep6Card_-IKMm\",\"WizardFormConfigurationStep6NewCard\":\"WizardFormConfigurationStep6NewCard_RWR3E\",\"WizardFormConfigurationStep6Flag\":\"WizardFormConfigurationStep6Flag_euQoZ\",\"WizardFormConfigurationStep6CreateUserButton\":\"WizardFormConfigurationStep6CreateUserButton_kF5ra\",\"ant-modal-header\":\"ant-modal-header_unOt5\",\"ant-modal-content\":\"ant-modal-content_8tMvW\",\"ant-modal-footer\":\"ant-modal-footer_V736L\",\"ant-message-notice-content\":\"ant-message-notice-content_-TWi0\",\"ant-tooltip-inner\":\"ant-tooltip-inner_0a-DZ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AddServiceCreateVPCStepContainer\":\"AddServiceCreateVPCStepContainer_EIjFf\",\"AddServiceCreateVPCConfiguration\":\"AddServiceCreateVPCConfiguration_H3PXZ\",\"AddServiceCreateVPCStepDivider\":\"AddServiceCreateVPCStepDivider_M-wyW\",\"AddServiceCreateVPCStepCol\":\"AddServiceCreateVPCStepCol_fvz9Y\",\"AddServiceCreateVPCStepRow\":\"AddServiceCreateVPCStepRow_du9hh\",\"AddServiceCreateVPCStepFlag\":\"AddServiceCreateVPCStepFlag_WTt+Z\",\"ant-modal-header\":\"ant-modal-header_2x-hY\",\"ant-modal-content\":\"ant-modal-content_9efua\",\"ant-modal-footer\":\"ant-modal-footer_ID5H2\",\"ant-message-notice-content\":\"ant-message-notice-content_ukjdQ\",\"ant-tooltip-inner\":\"ant-tooltip-inner_LCeo9\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppNotificationItem\":\"AppNotificationItem_Ov+z9\",\"AppNotificationItemMessage\":\"AppNotificationItemMessage_gloNK\",\"AppNotificationItemStateIconOk\":\"AppNotificationItemStateIconOk_I4IGw\",\"AppNotificationItemStateIconError\":\"AppNotificationItemStateIconError_4YqfS\",\"AppNotificationItemStateIconRunning\":\"AppNotificationItemStateIconRunning_jIwvU\",\"AppNotificationItemStateIconFinished\":\"AppNotificationItemStateIconFinished_aDtzs\",\"ant-modal-header\":\"ant-modal-header_rE3Gp\",\"ant-modal-content\":\"ant-modal-content_CQqvi\",\"ant-modal-footer\":\"ant-modal-footer_UouhK\",\"ant-message-notice-content\":\"ant-message-notice-content_GXK89\",\"ant-tooltip-inner\":\"ant-tooltip-inner_ejhr5\"};","var map = {\n\t\"./\": 511,\n\t\"./AppIcon\": 512,\n\t\"./AppIcon.js\": 512,\n\t\"./icons.less\": 681,\n\t\"./img-bg-service-deploy.svg\": 2209,\n\t\"./img-bg-service-import.svg\": 2210,\n\t\"./img-cluster-type-zero-state.svg\": 2211,\n\t\"./img-logo-cloud-aws.svg\": 2212,\n\t\"./img-logo-cloud-azure.svg\": 2213,\n\t\"./img-logo-cloud-google.svg\": 2214,\n\t\"./img-logo-codership.svg\": 2215,\n\t\"./img-logo-controller.svg\": 2216,\n\t\"./img-logo-elastic.svg\": 2217,\n\t\"./img-logo-haproxy.svg\": 2218,\n\t\"./img-logo-mariadb.svg\": 2219,\n\t\"./img-logo-mongodb.svg\": 2220,\n\t\"./img-logo-mssql.svg\": 2221,\n\t\"./img-logo-mysql.svg\": 2222,\n\t\"./img-logo-now.svg\": 2223,\n\t\"./img-logo-opsgenie.svg\": 2224,\n\t\"./img-logo-pagerduty.svg\": 2225,\n\t\"./img-logo-percona.svg\": 2226,\n\t\"./img-logo-postgresql.svg\": 2227,\n\t\"./img-logo-prometheus.svg\": 2228,\n\t\"./img-logo-redis.svg\": 2229,\n\t\"./img-logo-slack.svg\": 2230,\n\t\"./img-logo-telegram.svg\": 2231,\n\t\"./img-logo-timescaledb.svg\": 2232,\n\t\"./img-logo-victoropts.svg\": 2233,\n\t\"./img-logo-webhooks.svg\": 2234,\n\t\"./img-service-deploy.svg\": 2235,\n\t\"./img-service-import.svg\": 2236,\n\t\"./index\": 511,\n\t\"./index.js\": 511,\n\t\"./svgSources\": 513,\n\t\"./svgSources.js\": 513\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 2207;","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ant-modal-header\":\"ant-modal-header_pFqAj\",\"ant-modal-content\":\"ant-modal-content_1a8u+\",\"ant-modal-footer\":\"ant-modal-footer_v+Et9\",\"ant-message-notice-content\":\"ant-message-notice-content_mPyWm\",\"ant-tooltip-inner\":\"ant-tooltip-inner_OdW7F\"};","import React, { ReactElement } from 'react';\nimport styles from './LazyLoader.module.less';\nimport { Spin, Skeleton } from 'antd';\nimport CcxComponentProps from '../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {\n active?: boolean;\n avatarShape?: string;\n buttonShape?: string;\n rows?: number;\n size?: string;\n type?: string;\n}\n\n/**\n * Skeleton for React's lazy loader\n */\nfunction LazyLoader({\n active = true,\n avatarShape = 'circle',\n buttonShape = 'default',\n rows = 4,\n size = 'default',\n type = 'spinner',\n testId = 'LazyLoader',\n}: Props): ReactElement {\n switch (type) {\n case 'row':\n return (\n
\n \n
\n );\n case 'avatar':\n return (\n
\n \n
\n );\n case 'button':\n return (\n
\n \n
\n );\n case 'image':\n return (\n
\n \n
\n );\n case 'input':\n return (\n
\n \n
\n );\n case 'spinner':\n default:\n return ;\n }\n}\n\nexport default LazyLoader;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport styles from './AppLabeledComponent.module.less';\n\ninterface Props extends CcxComponentProps {\n children: ReactElement;\n label: string;\n isInline?: boolean;\n softText?: boolean;\n}\n\nconst AppLabeledComponent: React.FC = ({\n children,\n label,\n isInline = false,\n softText = true,\n testId = 'AppLabeledComponent',\n}) => {\n return (\n \n \n {label}\n \n \n {children}\n \n \n );\n};\n\nexport default AppLabeledComponent;\n","import React from 'react';\nimport styles from './AppRangePicker.module.less';\nimport { DatePicker, Radio } from 'antd';\nimport { Space } from 'antd';\nimport AppLabeledComponent from './AppLabeledComponent';\nimport { Alert } from 'antd';\nimport dayjs from 'dayjs';\nimport CcxComponentProps from '../../../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {\n value?: string;\n quickRanges?: any;\n onChange?: Function;\n disabled?: boolean;\n}\n\nconst AppRangePicker: React.FC = ({\n onChange,\n value,\n disabled,\n testId = 'AppRangePicker',\n}) => {\n const RANGE_PICKER_QUICK_RANGES = [\n { label: '30 min', value: '30m' },\n { label: '1 hour', value: '1h' },\n { label: '1 day', value: '1d' },\n { label: '1 week', value: '1w' },\n ];\n\n const quickRanges = RANGE_PICKER_QUICK_RANGES;\n const showCustom = false;\n const { RangePicker } = DatePicker;\n\n const handleOnChangePreset = (e: any) => {\n onChange && onChange(e.target.value);\n };\n\n const handleOnChangeCustom = (value: any) => {\n onChange && onChange(value[0].unix(), value[1].unix());\n };\n\n const disabledDate = (current: any) => {\n // CCX-152: Can not select days before 2 weeks\n const tooLate = current > dayjs();\n const tooEarly = current < dayjs().subtract(2, 'week');\n\n return tooEarly || tooLate;\n };\n\n const extraFooter = () => (\n \n );\n\n return (\n \n \n \n {quickRanges.map(({ label, value }, index) => (\n \n {label}\n \n ))}\n \n \n {showCustom ? (\n \n \n \n ) : null}\n \n );\n};\n\nexport default AppRangePicker;\n","import React, { useEffect, useState } from 'react';\nimport { Radio, Switch, Space } from 'antd';\nimport styles from './DeploymentDashboardOptions.module.less';\nimport AppLabeledComponent from '../../ccx/common/AppLabeledComponent';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport DeploymentsItem from '../../../types/DeploymentsItem';\n\ninterface DeploymentDashboardOptionsProps extends CcxComponentProps {\n value?: any;\n onChange?: Function;\n onSummaryChange?: Function;\n disabled?: boolean;\n deployment?: DeploymentsItem;\n}\n\nconst DeploymentDashboardOptions: React.FC = ({\n value,\n onChange,\n onSummaryChange,\n disabled,\n deployment,\n testId = 'DeploymentDashboardOptions',\n}) => {\n const [tabsOptions, setTabsOptions] = useState();\n\n useEffect(() => {\n setTabsOptions([\n { label: 'System', value: 'host' },\n { label: 'Database nodes', value: 'db' },\n ]);\n }, [deployment]);\n\n const handleTabOnChange = (e: any) => {\n onChange && onChange(e.target.value);\n };\n\n const handleOnSummaryChange = (value: boolean) => {\n onSummaryChange && onSummaryChange(value);\n };\n\n return (\n \n \n \n {tabsOptions?.map(\n ({ label, value: val }: any, index: any) => (\n \n \n {label}\n \n \n )\n )}\n \n \n \n );\n};\n\nexport default DeploymentDashboardOptions;\n","/**\n * @name BaseDomain\n * @description\n * BaseDomain is injected from FEAS_ENV.BASE_DOMAIN global variable, if not\n * defined - process.env.BASE_DOMAIN is used. If both globals are undefined\n * 's9s.io' is used as fallback.\n * @constant\n * @public\n */\n\nconst convertEnvToBoolean = (envVar: string | undefined): boolean => {\n if (envVar === 'true') {\n return true;\n } else if (envVar === 'false') {\n return false;\n } else {\n return false;\n }\n};\n\ndeclare type Window = {\n FEAS_ENV: Feas;\n};\n\ndeclare const window: Window;\n\nexport const BASE_PAGE_HEADING = 'Home';\nexport const ORGANIZATIONS_PAGE_HEADING = 'Organizations';\n\nexport const MAX_NODES_AVAILABLE = 5;\n\nexport const CDN_URL = 'https://st.s9s.io/ccx/logo/';\n\nexport const EXTERNAL_CSS_URL =\n (window.FEAS_ENV || {}).EXTERNAL_CSS_URL ||\n process.env.REACT_APP_EXTERNAL_CSS_URL ||\n undefined;\n\nexport const StripePK =\n (window.FEAS_ENV || {}).STRIPE_PK || process.env.REACT_APP_STRIPE_PK || '';\n\nexport const ApiBaseDomain =\n (window.FEAS_ENV || {}).BASE_DOMAIN ||\n process.env.REACT_APP_BASE_DOMAIN ||\n 's9s.io';\n\nexport const AppLogoUrl =\n window?.FEAS_ENV?.REACT_APP_LOGO_URL ||\n 'https://st.s9s.io/ccx/logo/ccx-purple.svg';\n\nexport const AppFaviconUrl =\n window?.FEAS_ENV?.REACT_APP_FAVICON_URL ||\n 'https://st.s9s.io/ccx/favicon/ccx_favicon.png';\n\nexport const PricingLink = 'https://severalnines.com/pricing/#ccx';\n\nexport const EULALink =\n window?.FEAS_ENV?.EULA_URL ||\n 'https://docs.cloudeka.id/documentation/170/eula-service-portal';\n\nexport const ToSLink = 'https://severalnines.com/ccx/terms/';\n\nexport const PrivacyPolicyLink = 'https://severalnines.com/privacy/';\n\nexport const vpcDisabled = window?.FEAS_ENV?.VPC_DISABLED || false;\nexport const billingDisabled = window?.FEAS_ENV?.BILLING_DISABLED || false;\nexport const onboardingDisabled =\n window?.FEAS_ENV?.ONBOARDING_DISABLED || false;\n\nexport const userMenuDisabled = window?.FEAS_ENV?.USER_MENU_DISABLED || false;\n\nexport const volumeSizeInputUnitDisabled =\n window?.FEAS_ENV?.VOLUME_SIZE_INPUT_UNIT_DISABLED || false;\n\nexport const deploymentSummaryNetworkVPCDisabled =\n window?.FEAS_ENV?.DEPLOYMENT_SUMMARY_NETWORK_VPC_DISABLED || false;\n\nexport const deploymentSummaryNetworkTypeDisabled =\n window?.FEAS_ENV?.DEPLOYMENT_SUMMARY_NETWORK_TYPE_DISABLED || false;\n\nexport const deploymentSummaryNetworkAZDisabled =\n window?.FEAS_ENV?.DEPLOYMENT_SUMMARY_NETWORK_AZ_DISABLED || false;\n\nexport const deploymentSummaryIOPSDisabled =\n window?.FEAS_ENV?.DEPLOYMENT_SUMMARY_IOPS_DISABLED || false;\n\nexport const hideCloudProvider = window?.FEAS_ENV?.HIDE_CLOUD_PROVIDER || false;\nexport const showNotification =\n window?.FEAS_ENV?.SHOW_NOTIFICATION_BUTTON || false;\n\nexport const hideFooter = window?.FEAS_ENV?.HIDE_FOOTER || false;\nexport const eulaEnabled = window?.FEAS_ENV?.EULA || false;\n\nexport const hideHeader = window?.FEAS_ENV?.HIDE_HEADER || false;\nexport const hideBreadcrumbs = window?.FEAS_ENV?.HIDE_BREADCRUMBS || false;\nexport const hideFeedback =\n window?.FEAS_ENV?.HIDE_FEEDBACK ||\n process.env.REACT_APP_HIDE_FEEDBACK ||\n false;\nexport const hideProjectName = window?.FEAS_ENV?.HIDE_PROJECT_NAME || false;\n\nexport const usePrivateIPs = window?.FEAS_ENV?.USE_PRIVATE_IPS || false;\n\n// BuildNumber and Build branch are injected by TeamCity during build.\nexport const BuildNumber = process.env.REACT_APP_BUILD_NUMBER || 0;\nexport const BuildBranch = process.env.REACT_APP_BRANCH || 'unknown';\n\n// API Endpoints\nexport const API_VPC = `/api/vpc/api/v1`;\nexport const API_VPC_V2 = `/api/vpc/api/v2`;\nexport const API_AUTH = `/api/auth`;\nexport const API_STAT = `/api/stat/api/v1`;\nexport const API_QMON = `/api/qmon/api/v1`;\nexport const API_PROV = `/api/prov/api/v1`;\nexport const API_PROV_V2 = `/api/prov/api/v2`;\nexport const API_FIREWALL = `/api/firewall/api/v1`;\nexport const API_DEPLOYMENT = `/api/deployment/api/v1`;\nexport const API_DEPLOYMENT_V2 = `/api/deployment/v2`;\nexport const API_DEPLOYMENT_V3 = `/api/deployment/v3`;\nexport const API_PROJECT = `/api/project/api/v1`;\nexport const API_USERDB = `/api/userdb/api/v1`;\nexport const API_CONTENT = `/api/content/api/v1`;\nexport const API_BILLING = `/api/billing/api/v1`;\nexport const API_BACKUP = `/api/backup/api/v1`;\nexport const API_FEEDBACK = `/api/feedback/api/v1`;\nexport const API_PROFILES = `/api/profiles/api/v1`;\nexport const API_ADMIN = `/api/admin`;\nexport const API_DB_CONFIGURATION = `/api/db-configuration/v1`;\nexport const API_V2_DEPLOYMENT = `/api/deployment/v2`;\nexport const API_V2 = '/api/v2';\nexport const CHANGE_PASSWORD = 'change-password';\nexport const DB_LOGS = 'dblogs';\nexport const DB_PARAMETERS_GROUP = 'parameter-groups';\nexport const APPLY = 'apply';\nexport const LEGACY = 'legacy';\nexport const ORGANIZATIONS = 'organizations';\nexport const INVITES = 'invites';\nexport const MEMBERS = 'members';\nexport const LEAVE = 'leave';\n\n// Application endpoints\nexport const AUTH_APP_URL = window?.FEAS_ENV?.AUTH_APP_URL || `/auth`;\nexport const RBAC_ENABLED =\n window?.FEAS_ENV?.RBAC_ENABLED ||\n convertEnvToBoolean(process.env.REACT_APP_RBAC_ENABLED) ||\n false;\n\nexport const RBAC_DEBUG_MODE =\n window?.FEAS_ENV?.RBAC_DEBUG_MODE ||\n convertEnvToBoolean(process.env.REACT_APP_RBAC_DEBUG_MODE) ||\n false;\n\nexport const AUTH_REDIRECT_URL =\n window?.FEAS_ENV?.AUTH_REDIRECT_URL ||\n process.env.REACT_APP_AUTH_REDIRECT_URL;\nexport const WRONG_GLOBAL_REDIRECT_URL =\n window?.FEAS_ENV?.WRONG_GLOBAL_REDIRECT_URL;\nexport const GLOBAL_REDIRECT_URL = window?.FEAS_ENV?.GLOBAL_REDIRECT_URL;\nexport const AUTH_UI_APP_DISABLED =\n (window.FEAS_ENV || {}).AUTH_UI_APP_DISABLED ||\n process.env.REACT_APP_AUTH_UI_APP_DISABLED ||\n false;\n\nexport const AUTOSCALE_STORAGE_PERCENTAGE =\n (window.FEAS_ENV || {}).AUTOSCALE_STORAGE_PERCENTAGE ||\n process.env.REACT_APP_AUTOSCALE_STORAGE_PERCENTAGE ||\n 0;\n\nexport const AUTOSCALE_STORAGE_THRESHOLD =\n (window.FEAS_ENV || {}).AUTOSCALE_STORAGE_THRESHOLD ||\n process.env.REACT_APP_AUTOSCALE_STORAGE_THRESHOLD ||\n 0;\n\nexport const APP_THEME = process.env.REACT_APP_THEME || 'ccx';\n\ndeclare type Feas = {\n STRIPE_PK: string;\n BASE_DOMAIN: string;\n BUILD_NUMBER: number;\n BRANCH: string;\n RBAC_ENABLED: boolean;\n RBAC_DEBUG_MODE: boolean;\n REACT_APP_LOGO_URL: string;\n REACT_APP_FAVICON_URL: string;\n VPC_DISABLED: boolean;\n BILLING_DISABLED: boolean;\n ONBOARDING_DISABLED: boolean;\n USER_MENU_DISABLED: boolean;\n VOLUME_SIZE_INPUT_UNIT_DISABLED: boolean;\n DEPLOYMENT_SUMMARY_NETWORK_VPC_DISABLED: boolean;\n DEPLOYMENT_SUMMARY_NETWORK_TYPE_DISABLED: boolean;\n DEPLOYMENT_SUMMARY_NETWORK_AZ_DISABLED: boolean;\n DEPLOYMENT_SUMMARY_IOPS_DISABLED: boolean;\n HIDE_CLOUD_PROVIDER: boolean;\n HIDE_FOOTER: boolean;\n HIDE_HEADER: boolean;\n HIDE_BREADCRUMBS: boolean;\n EULA: boolean;\n HIDE_FEEDBACK: boolean;\n HIDE_PROJECT_NAME: boolean;\n USE_PRIVATE_IPS: boolean;\n AUTH_APP_URL: string;\n AUTH_REDIRECT_URL: string;\n WRONG_GLOBAL_REDIRECT_URL: string;\n GLOBAL_REDIRECT_URL: string;\n EULA_URL: string;\n AUTH_UI_APP_DISABLED: boolean;\n EXTERNAL_CSS_URL: string;\n AUTOSCALE_STORAGE_THRESHOLD: number;\n AUTOSCALE_STORAGE_PERCENTAGE: number;\n SHOW_NOTIFICATION_BUTTON: boolean;\n};\n","import { singularOrPlural } from '../core/helpers';\nimport DbService from './DbService';\n\nexport type JobClassProps = {\n data: any;\n job_id: string;\n user: string;\n status: string;\n type: string;\n messages: string[];\n text: string;\n created_at: string;\n finished_at: string;\n started_at: string;\n};\n\nexport interface JobInterface {\n data: any;\n jobId: string;\n status: string;\n type: string;\n messages: string[];\n finishedAt: string;\n createdAt: string;\n startedAt: string;\n}\n\nexport const STATUS_OK = 'JOB_STATUS_CREATED';\nexport const STATUS_ERROR = 'JOB_STATUS_ERRORED';\nexport const STATUS_RUNNING = 'JOB_STATUS_RUNNING';\nexport const STATUS_FINISHED = 'JOB_STATUS_FINISHED';\n\nexport const TYPE_ADD = 'JOB_TYPE_ADD_NODE';\nexport const TYPE_REMOVE = 'JOB_TYPE_REMOVE_NODE';\nexport const TYPE_VOLUME_SIZE = 'JOB_TYPE_VOLUME_SIZE';\nexport const TYPE_PROMOTE_REPLICA = 'JOB_TYPE_PROMOTE_REPLICA';\nexport const TYPE_UPGRADE_SERVERS = 'JOB_TYPE_UPGRADE_SERVERS';\nexport const TYPE_WORK = 'JOB_TYPE_WORK';\nexport const TYPE_MODIFYDBCONFIG = 'JOB_TYPE_MODIFYDBCONFIG';\nexport const TYPE_DEPLOY_DATASTORE = 'JOB_TYPE_DEPLOY_DATASTORE';\nexport const TYPE_DESTROY_DATASTORE = 'JOB_TYPE_DESTROY_DATASTORE';\nexport const TYPE_REPAIR_NODE = 'JOB_TYPE_REPAIR_NODE';\nexport const TYPE_RESTORE_BACKUP = 'JOB_TYPE_RESTORE_BACKUP';\nexport const TYPE_CHANGE_VOLUME_TYPE = 'JOB_TYPE_CHANGE_VOLUME_TYPE';\nexport const JOB_TYPE_CHANGE_VOLUME_TYPE = 'JOB_TYPE_CHANGE_VOLUME_TYPE';\nexport const JOB_TYPE_FAILOVER = 'JOB_TYPE_FAILOVER';\nexport const JOB_TYPE_REBOOT_NODE = 'JOB_TYPE_REBOOT_NODE';\nexport const JOB_TYPE_DISABLE_READONLY = 'JOB_TYPE_DISABLE_READONLY';\nexport const JOB_TYPE_ENABLE_READONLY = 'JOB_TYPE_ENABLE_READONLY';\n\nexport default class Job implements JobInterface {\n readonly createdAt: string;\n readonly data: any;\n readonly finishedAt: string;\n readonly jobId: string;\n readonly startedAt: string;\n readonly user: string;\n readonly status: string;\n readonly type: string;\n readonly text: string;\n readonly messages: string[];\n\n constructor(props: JobClassProps) {\n this.data = props.data;\n this.finishedAt = props.finished_at;\n this.jobId = props.job_id;\n this.startedAt = props.started_at;\n this.user = props.user;\n this.status = props.status;\n this.type = props.type;\n this.text = props.text;\n this.messages = props.messages || [];\n this.createdAt = props.created_at;\n }\n\n isStatusOk() {\n return this.status.toUpperCase() === STATUS_OK;\n }\n\n isStatusError() {\n return this.status.toUpperCase() === STATUS_ERROR;\n }\n\n isStatusRunning() {\n return this.status.toUpperCase() === STATUS_RUNNING;\n }\n\n isStatusFinished() {\n return this.status.toUpperCase() === STATUS_FINISHED;\n }\n\n isAddNode() {\n return this.type.toUpperCase() === TYPE_ADD;\n }\n\n isRemoveNode() {\n return this.type.toUpperCase() === TYPE_REMOVE;\n }\n\n isVolumeScale() {\n return this.type.toUpperCase() === TYPE_VOLUME_SIZE;\n }\n\n getStatusText(): string {\n switch (this.status.toUpperCase()) {\n case STATUS_RUNNING:\n return 'Running';\n case STATUS_ERROR:\n return 'Failed';\n case STATUS_OK:\n return 'Created';\n case STATUS_FINISHED:\n return 'Finished';\n default:\n return 'Unknown';\n }\n }\n\n getStatusType(): string {\n switch (this.status.toUpperCase()) {\n case STATUS_RUNNING:\n return 'info';\n case STATUS_ERROR:\n return 'error';\n case STATUS_OK:\n return 'normal';\n case STATUS_FINISHED:\n return 'ok';\n default:\n return 'normal';\n }\n }\n\n getRunningStatusTextByType(): string | null {\n switch (this.type.toUpperCase()) {\n case TYPE_VOLUME_SIZE:\n return 'Scaling storage...';\n case TYPE_PROMOTE_REPLICA:\n return 'Promoting replica...';\n case TYPE_ADD:\n case TYPE_REMOVE:\n return 'Scaling nodes...';\n case TYPE_UPGRADE_SERVERS:\n return 'Upgrading servers...';\n case TYPE_WORK:\n return 'Working on store...';\n case TYPE_MODIFYDBCONFIG:\n return 'Setting parameters...';\n case TYPE_REPAIR_NODE:\n return 'Repairing node...';\n case TYPE_RESTORE_BACKUP:\n return 'Restoring backup...';\n case TYPE_CHANGE_VOLUME_TYPE:\n return 'Changing volume type...';\n case JOB_TYPE_FAILOVER:\n return 'Failover to a new Primary...';\n case JOB_TYPE_REBOOT_NODE:\n return 'Rebooting node...';\n default:\n return null;\n }\n }\n\n getDescription(relatedNode: DbService) {\n const descriptions: any = {\n [TYPE_ADD]: (() => {\n const nodesAdded = this.data?.ToAdd?.length;\n const name = singularOrPlural(nodesAdded, `node`);\n\n return {\n [STATUS_OK]: `Adding ${nodesAdded} new ${name}`,\n [STATUS_ERROR]: `An error occurred while adding ${nodesAdded} new ${name}`,\n [STATUS_RUNNING]: `Adding ${nodesAdded} new ${name}`,\n [STATUS_FINISHED]: `Added ${nodesAdded} new ${name} successfully`,\n };\n })(),\n [TYPE_REMOVE]: (() => {\n const nodesRemoved = this.data?.ToRemove?.length;\n const name = singularOrPlural(nodesRemoved, `node`);\n\n return {\n [STATUS_OK]: `Removing ${nodesRemoved} ${name}`,\n [STATUS_ERROR]: `An error occurred while removing ${nodesRemoved} ${name}`,\n [STATUS_RUNNING]: `Removing ${nodesRemoved} ${name}`,\n [STATUS_FINISHED]: `Removed ${nodesRemoved} ${name} successfully`,\n };\n })(),\n [TYPE_VOLUME_SIZE]: (() => {\n const newSize = `${this.data?.NewSize}GB`;\n\n return {\n [STATUS_OK]: `Updating volume size to ${newSize}`,\n [STATUS_ERROR]: `An error occurred while updating volume size to ${newSize}`,\n [STATUS_RUNNING]: `Updating volume size to ${newSize}`,\n [STATUS_FINISHED]: `Volume size updated to ${newSize} successfully`,\n };\n })(),\n [TYPE_PROMOTE_REPLICA]: (() => {\n const nodeName = `${relatedNode?.getHostnameOrIP()}`;\n\n return {\n [STATUS_OK]: `Replica node (${nodeName}) is being promoted`,\n [STATUS_ERROR]: `An error occurred while promoting replica node (${nodeName})`,\n [STATUS_RUNNING]: `Replica node (${nodeName}) is being promoted`,\n [STATUS_FINISHED]: `Replica node (${nodeName}) promoted successfully`,\n };\n })(),\n [TYPE_UPGRADE_SERVERS]: {\n [STATUS_OK]: `Upgrading servers`,\n [STATUS_ERROR]: `An error occurred while upgrading servers`,\n [STATUS_RUNNING]: `Upgrading servers`,\n [STATUS_FINISHED]: `Servers upgraded successfully`,\n },\n [TYPE_CHANGE_VOLUME_TYPE]: {\n [STATUS_OK]: `Changing volume type`,\n [STATUS_ERROR]: `An error occurred while changing volume type`,\n [STATUS_RUNNING]: `Changing volume type`,\n [STATUS_FINISHED]: `Volume type change successfully`,\n },\n [TYPE_MODIFYDBCONFIG]: {\n [STATUS_OK]: `Updating database configuration`,\n [STATUS_ERROR]: `An error occurred while updating database configuration`,\n [STATUS_RUNNING]: `Updating database configuration`,\n [STATUS_FINISHED]: `Database configuration updated successfully`,\n },\n [TYPE_DEPLOY_DATASTORE]: {\n [STATUS_OK]: `Deploying datastore`,\n [STATUS_ERROR]: `An error occurred while deploying datastore`,\n [STATUS_RUNNING]: `Deploying datastore`,\n [STATUS_FINISHED]: `Datastore deployed successfully`,\n },\n [TYPE_DESTROY_DATASTORE]: {\n [STATUS_OK]: `Destroying datastore`,\n [STATUS_ERROR]: `An error occurred while destroying datastore`,\n [STATUS_RUNNING]: `Destroying datastore`,\n [STATUS_FINISHED]: `Datastore destroyed`,\n },\n [TYPE_REPAIR_NODE]: {\n [STATUS_OK]: `Repairing node`,\n [STATUS_ERROR]: `An error occurred while repairing node`,\n [STATUS_RUNNING]: `Repairing node`,\n [STATUS_FINISHED]: `Node repaired successfully`,\n },\n [TYPE_RESTORE_BACKUP]: (() => {\n return {\n [STATUS_OK]: `Restoring backup.`,\n [STATUS_ERROR]: `An error occurred while restoring backup.`,\n [STATUS_RUNNING]: `Restoring backup.`,\n [STATUS_FINISHED]: `Backup restored successfully`,\n };\n })(),\n [JOB_TYPE_FAILOVER]: {\n [STATUS_OK]: `Failover to a new Primary`,\n [STATUS_ERROR]: `An error occurred during failover`,\n [STATUS_RUNNING]: `Failover is in progress`,\n [STATUS_FINISHED]: `Failover to a new Primary was successfull`,\n },\n [JOB_TYPE_REBOOT_NODE]: (() => {\n const nodeName = `${relatedNode?.getHostnameOrIP()}`;\n\n return {\n [STATUS_OK]: `Node rebooted successfully`,\n [STATUS_ERROR]: `An error occurred during node reboot`,\n [STATUS_RUNNING]: `Rebooting node.`,\n [STATUS_FINISHED]: `Node rebooted successfully`,\n };\n })(),\n [JOB_TYPE_DISABLE_READONLY]: (() => {\n return {\n [STATUS_OK]: `Read-only mode disabled successfully`,\n [STATUS_ERROR]: `An error occurred when disabling read-only mode`,\n [STATUS_RUNNING]: `Disabling read-only mode.`,\n [STATUS_FINISHED]: `Read-only mode disabled successfully`,\n };\n })(),\n [JOB_TYPE_ENABLE_READONLY]: (() => {\n let reason = this.data?.reason;\n\n if (reason !== '') {\n reason = ` : ${reason}`;\n }\n\n return {\n [STATUS_OK]: `Enabling read-only mode${reason}`,\n [STATUS_ERROR]: `An error occurred when enabling read-only mode${reason}`,\n [STATUS_RUNNING]: `Enabling read-only mode${reason}`,\n [STATUS_FINISHED]: `Read-only mode enabled successfully${reason}`,\n };\n })(),\n };\n\n const forType = descriptions[this.type.toUpperCase()];\n if (forType) {\n return forType[this.status.toUpperCase()];\n }\n\n return this.text || this.data.text || this.type;\n }\n\n getDateForEventViewer() {\n if (this.isStatusFinished()) return this.finishedAt;\n if (this.isStatusRunning() || this.isStatusError())\n return this.startedAt;\n\n return this.createdAt;\n }\n}\n","import DatabaseVendor from '../types/DatabaseVendor';\nimport { APP_THEME } from './CcxEnv';\nimport PiwikPro from '@piwikpro/react-piwik-pro';\n\nimport Job, {\n STATUS_ERROR,\n TYPE_ADD,\n TYPE_PROMOTE_REPLICA,\n TYPE_REMOVE,\n TYPE_UPGRADE_SERVERS,\n TYPE_VOLUME_SIZE,\n TYPE_WORK,\n TYPE_MODIFYDBCONFIG,\n TYPE_REPAIR_NODE,\n STATUS_FINISHED,\n TYPE_RESTORE_BACKUP,\n JOB_TYPE_CHANGE_VOLUME_TYPE,\n JOB_TYPE_FAILOVER,\n JOB_TYPE_REBOOT_NODE,\n} from '../types/Job';\nimport { DbParameterValue } from '../types/DBparameterDefaults';\n\ninterface DbParameterTableInterface {\n currentValue: string;\n defaultValue: string;\n description: string;\n type: string;\n min?: string;\n max?: string;\n}\n\nexport type SelectFieldOptions = {\n label: string;\n value: string;\n};\n\nexport class BackendModel {\n constructor(props: Record) {\n Object.assign(this, camelCaseObject(props));\n }\n\n toJSON(): Record {\n return snakeCaseObject(this);\n }\n}\n\n/**\n * @name camelCase\n * @desc Converts snake_case to camelCase\n * @param {string} inputString\n * @returns {string}\n * @exports\n */\nexport const camelCase = (inputString: string): string =>\n inputString.split('_').map(camelCaseConvert).join('');\n\n/**\n * @name snakeCase\n * @desc Converts camelCase to snake_case\n * @param {string} inputString\n * @returns {string}\n * @exports\n */\nexport const snakeCase = (inputString: string): string =>\n inputString.split(snakeCaseRegexp).join('_').toLowerCase();\n\n/**\n * @name camelCaseObject\n * @desc Converts objects keys from snake_case to camelCase and returns new object.\n * @param {Record} inputObject\n * @returns {Record}\n * @exports\n */\nexport const camelCaseObject = (\n inputObject: Record\n): Record => objectKeysCase(inputObject, camelCase);\n\nexport const snakeCaseObject = (\n inputObject: Record\n): Record => objectKeysCase(inputObject, snakeCase);\n\nconst objectKeysCase = (\n inputObject: Record,\n convertor: Function\n): Record =>\n Object.keys(inputObject).reduce((res: Record, k: string) => {\n res[convertor(k)] = inputObject[k];\n return res;\n }, {} as Record);\n\nconst snakeCaseRegexp = /(?=[A-Z])/;\n\nconst camelCaseConvert = (s: string, i: number): string =>\n `${i > 0 ? ucFirst(s) : lcFirst(s)}${s.substring(1)}`;\n\nconst ucFirst = (s: string): string => s.charAt(0).toUpperCase();\n\nconst lcFirst = (s: string): string => s.charAt(0).toLowerCase();\n\nexport const getHostnameOrIP = (fqdn: string) => {\n if (fqdn?.includes(':')) {\n const ip = fqdn?.split(':');\n return ip[0];\n } else {\n const splittedFqdn = fqdn?.split('.');\n return splittedFqdn && `${splittedFqdn[0]}`;\n }\n};\n\nexport const normalizeHostPort = (host: string, port: string) => {\n if (host?.includes(':')) {\n return host;\n } else {\n return `${host}:${port}`;\n }\n};\n\nconst primaryRole = 'master';\nexport const sortNodesByRole = (nodes: any[]) => {\n // Separate nodes with the primary role from others\n const primaryNodes = nodes.filter((node: any) =>\n node.role.includes(primaryRole)\n );\n const otherNodes = nodes.filter(\n (node: any) => !node.role.includes(primaryRole)\n );\n\n // Sort the primary nodes to be at the top\n primaryNodes.sort((a: any, b: any) => a.role.localeCompare(b.role));\n\n // Combine the sorted primary nodes with the other nodes\n return [...primaryNodes, ...otherNodes];\n};\n\nexport const getNonErroredJobs = (jobs: Job[]) => {\n return jobs\n ?.filter((job: Job) => {\n return (\n job.status !== STATUS_ERROR && job.status !== STATUS_FINISHED\n );\n })\n ?.filter((job: Job) => {\n return [\n TYPE_ADD,\n TYPE_REMOVE,\n TYPE_VOLUME_SIZE,\n TYPE_PROMOTE_REPLICA,\n TYPE_UPGRADE_SERVERS,\n TYPE_WORK,\n TYPE_MODIFYDBCONFIG,\n TYPE_REPAIR_NODE,\n TYPE_RESTORE_BACKUP,\n JOB_TYPE_CHANGE_VOLUME_TYPE,\n JOB_TYPE_FAILOVER,\n JOB_TYPE_REBOOT_NODE,\n ].includes(job.type);\n });\n};\n\nexport const isRestoringDatastore = (jobs: Job[]) => {\n const restoringJobs = getNonErroredJobs(jobs);\n if (restoringJobs) {\n const isRestoring = restoringJobs.find(\n (job: Job) => job.type === TYPE_RESTORE_BACKUP\n );\n return !!isRestoring;\n }\n return false;\n};\n\nexport const isRebootingNode = (jobs: Job[]) => {\n const rebootingJobs = getNonErroredJobs(jobs);\n if (rebootingJobs) {\n const isRebooting = rebootingJobs.find(\n (job: Job) => job.type === JOB_TYPE_REBOOT_NODE\n );\n return !!isRebooting;\n }\n return false;\n};\n\nexport const isSyncingParameters = (jobs: Job[]) => {\n const syncingJobs = getNonErroredJobs(jobs);\n if (syncingJobs) {\n const isSyncing = syncingJobs.find(\n (job: Job) => job.type === TYPE_MODIFYDBCONFIG\n );\n return !!isSyncing;\n }\n return false;\n};\n\nexport const singularOrPlural = (count: number, name: string): string => {\n return count === 1 ? name : `${name}s`;\n};\n\nexport const objectToQueryParams = (obj: any): string => {\n const params = new URLSearchParams();\n\n Object.entries(obj).forEach(([key, value]: [string, any]) => {\n if (Array.isArray(value)) {\n value.forEach((item) => {\n params.append(key, item);\n });\n } else {\n params.set(key, value.toString());\n }\n });\n\n return params.toString();\n};\n\nexport const excludeFakeAddresses = (email: string[] | undefined) => {\n if (!email) return [];\n\n return email.filter(\n (email) =>\n !email?.includes('@ext.id') && !email?.includes('@lintasarta.extid')\n );\n};\n\nexport const getDatabaseVendorOptions = (databaseVendors: DatabaseVendor[]) => {\n return databaseVendors\n .filter((vendor: DatabaseVendor) => !vendor.isMssql())\n .map((vendor: DatabaseVendor) => ({\n label: vendor.name,\n value: vendor.code,\n }));\n};\n\nexport const getDatabaseVersionOptions = (\n databaseVendors: DatabaseVendor[] | any,\n selectedVendor: string | undefined\n) => {\n if (selectedVendor) {\n const isInList = databaseVendors.find(\n (vendor: DatabaseVendor) =>\n vendor.code === selectedVendor || vendor.name === selectedVendor\n );\n if (isInList) {\n return isInList.versions\n .sort((a: string, b: string) =>\n b.localeCompare(a, undefined, { numeric: true })\n )\n .map((version: string) => ({\n label: version,\n value: version,\n }));\n }\n }\n\n return [];\n};\n\nexport const getDatabaseConfigurationOptions = (\n databaseVendors: DatabaseVendor[] | any,\n selectedVendor: string | undefined\n) => {\n if (selectedVendor) {\n const isInList = databaseVendors.find(\n (vendor: DatabaseVendor) =>\n vendor.name === selectedVendor || vendor.code === selectedVendor\n );\n if (isInList) {\n return isInList.types.map((type: any) => {\n return {\n label: isInList.getVendorTypeName(type.code),\n value: type.code,\n };\n });\n }\n }\n return [];\n};\n\nexport const wrapDbParameterValues = (\n recordValues: Record,\n defaultParameters: Record\n): Record => {\n const result: Record = {};\n\n for (const [key] of Object.entries(recordValues)) {\n result[key] = {\n currentValue: recordValues[key],\n defaultValue: defaultParameters[key].default_value,\n description: defaultParameters[key].description,\n type: defaultParameters[key].type,\n min: defaultParameters[key].min,\n max: defaultParameters[key].max,\n };\n }\n\n return result;\n};\n\nexport const getThemeIllustrationColor = () => {\n const theme: string = APP_THEME;\n switch (theme) {\n case 'ccx':\n return '#3f00ff';\n case 'lintasarta':\n return '#2695D3';\n case 'elastx':\n return '#2f5161';\n default:\n return '#3f00ff';\n }\n};\n\nexport const getStripeErrorMessage = (error: any): string => {\n if (!error) return 'An unknown error occurred';\n\n try {\n const errorMessage = error.message || '';\n const jsonStartIndex = errorMessage.lastIndexOf('{');\n const jsonEndIndex = errorMessage.lastIndexOf('}') + 1;\n\n if (jsonStartIndex !== -1 && jsonEndIndex !== -1) {\n const jsonStr = errorMessage.substring(\n jsonStartIndex,\n jsonEndIndex\n );\n const stripeError = JSON.parse(jsonStr);\n return stripeError.message;\n }\n\n return (\n errorMessage.split('Error:')[1]?.trim() ||\n errorMessage ||\n 'Failed to process your card. Please try again.'\n );\n } catch (parseError) {\n const errorMessage = error.message || error.toString();\n return (\n errorMessage.split('Error:')[1]?.trim() ||\n 'Failed to process your card. Please try again.'\n );\n }\n};\n\nexport const isUserDisconnected = (): boolean => {\n return navigator.onLine === false;\n};\n\nexport const capitalizeFirstLetter = (string: string): string => {\n return string.charAt(0).toUpperCase() + string.slice(1);\n};\n\nexport const setLocalStorage = (\n key: string,\n value: { id: string; type: string; role: string }\n) => {\n localStorage.setItem(key, JSON.stringify(value));\n};\n\nexport const getLocalStorage = (key: string) => {\n return JSON.parse(localStorage.getItem(key) || '{}');\n};\n\nexport const removeLocalStorage = (key: string) => {\n localStorage.removeItem(key);\n};\n\nexport const isThemeElastx = (): boolean => {\n return APP_THEME === 'elastx';\n};\n\nexport const isProdEnv = (): boolean => {\n return process.env.NODE_ENV === 'production';\n};\n\nexport const initializePiwikPro = () => {\n if (\n isProdEnv() &&\n process.env.REACT_APP_PIWIK_PRO_ID &&\n process.env.REACT_APP_PIWIK_PRO_URL\n ) {\n PiwikPro.initialize(\n process.env.REACT_APP_PIWIK_PRO_ID,\n process.env.REACT_APP_PIWIK_PRO_URL\n );\n }\n};\n\nexport const isActiveUser = (\n userId: string | undefined,\n recordId: string,\n isAdmin: boolean,\n recordRole: string\n) => {\n if (isAdmin && recordRole === 'Admin') {\n return true;\n } else if (isAdmin) {\n return false;\n } else if (userId === recordId) {\n return false;\n } else {\n return true;\n }\n};\n\nexport const replaceIfRedis = (text: string) => {\n if (text.includes('redis')) {\n return text.replaceAll('redis', 'cache22');\n } else if (text.includes('Redis')) {\n return text.replaceAll('Redis', 'Cache22');\n } else if (text.includes('rediss')) {\n return text.replaceAll('rediss', 'cache22');\n } else if (text.includes('Rediss')) {\n return text.replaceAll('Rediss', 'Cache22');\n } else {\n return text;\n }\n};\n","import { get } from 'http';\nimport {\n AUTH_APP_URL,\n AUTH_REDIRECT_URL,\n AUTH_UI_APP_DISABLED,\n} from '../core/CcxEnv';\nimport { getLocalStorage } from '../core/helpers';\n\nexport type RequestProps = {\n data?: object;\n redirect?: boolean;\n version?: number;\n};\n\nexport default class ApiService {\n // protected static async request(\n // path: string,\n // method: string,\n // props?: RequestProps\n // ): Promise {}\n\n protected static getApiUrl(version?: number): string | void {}\n /**\n * Send request to backend\n */\n protected static async request(\n method: string,\n path: string,\n props?: RequestProps\n ): Promise {\n let responseData;\n const { id, type } = getLocalStorage('org');\n const headers: HeadersInit = {};\n\n if (id && type) {\n headers['CCX-Owner'] = `${type}:${id}`;\n }\n\n const response = await fetch(\n `${this.getApiUrl(props?.version)}/${path}`,\n {\n headers,\n method,\n credentials: 'include',\n body: props?.data ? JSON.stringify(props?.data) : null,\n }\n );\n\n if (response.status === 401) {\n try {\n responseData = await response.json();\n if (!responseData.admin) {\n if (AUTH_REDIRECT_URL) {\n window.location.href = AUTH_REDIRECT_URL;\n } else if (AUTH_UI_APP_DISABLED) {\n window.location.href = AUTH_APP_URL;\n } else {\n window.location.href = `${AUTH_APP_URL}/?redirectTo=${encodeURIComponent(\n window.location.href\n )}`;\n }\n }\n } catch (err) {\n responseData = null;\n }\n }\n\n try {\n responseData = await response.json();\n } catch (err) {\n responseData = null;\n }\n\n if (!response.ok) {\n const errorMessage = responseData?.err || response.statusText;\n let error = undefined;\n if (\n responseData.error_fields &&\n responseData.error_fields.length > 0\n ) {\n error = {\n message: errorMessage,\n errorFields: responseData.error_fields,\n };\n }\n if (error) {\n throw error;\n }\n throw new Error(errorMessage);\n }\n\n return responseData;\n }\n}\n","import dayjs from 'dayjs';\nimport relativeTime from 'dayjs/plugin/relativeTime';\ndayjs.extend(relativeTime);\n\nexport type FriendlyDateTimeClassProps = {\n date: string;\n};\n\nexport interface FriendlyDateTimeInterface {\n date?: Date;\n}\n\nexport default class FriendlyDateTime implements FriendlyDateTimeInterface {\n readonly date?: Date;\n\n constructor(props: FriendlyDateTimeClassProps) {\n this.date = props.date ? new Date(props.date) : undefined;\n }\n\n getFriendlyDate(): string {\n return this.date ? dayjs(this.date).fromNow() : '---';\n }\n\n getFullDate(): string {\n return this.date\n ? dayjs(this.date).format('YYYY-MM-DD HH:mm:ss ZZ')\n : '---';\n }\n\n getDate(): string {\n return this.date\n ? dayjs(this.date).format('YYYY-MM-DD HH:mm:ss')\n : '---';\n }\n\n getTime(): string {\n return this.date ? dayjs(this.date).format('HH:mm:ss') : '---';\n }\n}\n","import FriendlyDateTime from './FriendlyDateTime';\n\nexport type CloudInstanceClassProps = {\n admin_port: number;\n cloud_provider: string;\n cluster_uuid: string;\n created_at: string;\n disks: string;\n fqdn: string;\n host_status: string;\n host_type: null;\n host_uuid: string;\n hostname: string;\n instance_id: string;\n instance_type: string;\n last_seen_at: string;\n listening_port: number;\n listening_port_ro: number;\n node_type: string;\n public_ip: string;\n port: number;\n private_ip: string;\n region: string;\n role: string;\n security_group: string;\n service_started_at: string;\n subnet: string;\n unique_id: number;\n updated_at: string;\n vpc: string;\n};\n\nexport interface CloudInstanceInterface {\n adminPort: number;\n cloudProvider: string;\n clusterUuid: string;\n createdAt: string;\n disks: string;\n fqdn: string;\n formattedNodeType: string;\n hostStatus: string;\n hostType: null;\n hostUuid: string;\n hostname: string;\n icon: string;\n instance: string;\n instanceId: string;\n instanceType: string;\n key: string;\n lastSeen: string;\n lastSeenAt: string;\n lastSeenFull: string;\n listeningPort: number;\n listeningPortRo: number;\n nodeType: string;\n onlineFor: string;\n publicIp: string;\n port: number;\n privateIp: string;\n region: string;\n role: string;\n securityGroup: string;\n serviceStartedAt: string;\n status: string;\n subnet: string;\n uniqueId: number;\n updatedAt: string;\n vpc: string;\n}\n\nconst CMON_NODETYPE_GALERA = 'galera';\nconst CMON_NODETYPE_MYSQL = 'mysql';\nconst CMON_NODETYPE_MSSQL = 'mssql';\nconst CMON_NODETYPE_PROXYSQL = 'proxysql';\nconst CMON_NODETYPE_HAPROXY = 'haproxy';\nconst CMON_NODETYPE_POSTGRESQL = 'postgres';\nconst CMON_NODETYPE_REDIS = 'redis';\n\nexport default class CloudInstance implements CloudInstanceInterface {\n readonly adminPort: number;\n readonly cloudProvider: string;\n readonly clusterUuid: string;\n readonly createdAt: string;\n readonly disks: string;\n readonly fqdn: string;\n readonly formattedNodeType: string;\n readonly hostStatus: string;\n readonly hostType: null;\n readonly hostUuid: string;\n readonly hostname: string;\n readonly icon: string;\n readonly instance: string;\n readonly instanceId: string;\n readonly instanceType: string;\n readonly key: string;\n readonly lastSeen: string;\n readonly lastSeenAt: string;\n readonly lastSeenFull: string;\n readonly listeningPort: number;\n readonly listeningPortRo: number;\n readonly nodeType: string;\n readonly onlineFor: string;\n readonly publicIp: string;\n readonly port: number;\n readonly privateIp: string;\n readonly region: string;\n readonly role: string;\n readonly securityGroup: string;\n readonly serviceStartedAt: string;\n readonly status: string;\n readonly subnet: string;\n readonly uniqueId: number;\n readonly updatedAt: string;\n readonly vpc: string;\n\n constructor(props: CloudInstanceClassProps) {\n this.adminPort = props.admin_port;\n this.hostUuid = props.host_uuid;\n this.clusterUuid = props.cluster_uuid;\n this.cloudProvider = props.cloud_provider;\n this.hostType = props.host_type;\n this.instanceId = props.instance_id;\n this.instanceType = props.instance_type;\n this.region = props.region;\n this.publicIp = props.public_ip;\n this.privateIp = props.private_ip;\n this.fqdn = props.fqdn;\n this.disks = props.disks;\n this.vpc = props.vpc;\n this.subnet = props.subnet;\n this.securityGroup = props.security_group;\n this.createdAt = props.created_at;\n this.updatedAt = props.updated_at;\n this.serviceStartedAt = props.service_started_at;\n this.uniqueId = props.unique_id;\n this.lastSeenAt = props.last_seen_at;\n this.port = props.port;\n this.hostname = props.hostname;\n this.hostStatus = props.host_status;\n this.role = props.role;\n this.nodeType = props.node_type;\n this.listeningPort = props.listening_port;\n this.listeningPortRo = props.listening_port_ro;\n\n this.status = this.getStatusText();\n this.lastSeen = new FriendlyDateTime({\n date: this.lastSeenAt,\n }).getFriendlyDate();\n this.lastSeenFull = new FriendlyDateTime({\n date: this.lastSeenAt,\n }).getFullDate();\n this.key = `${this.uniqueId}`;\n this.icon = '';\n this.formattedNodeType = this.getFormattedNodeType();\n this.onlineFor = new FriendlyDateTime({\n date: this.serviceStartedAt,\n }).getFriendlyDate();\n this.instance = `${this.publicIp || this.privateIp}:${this.port}`;\n }\n\n getFqdn(short: boolean = false) {\n // the backend may be returning fqdn or publicIp as null => try fqdn > publicIp > privateIp\n // to display something in the UI and avoid \"undefined\" strings or errors\n if (short) {\n return this.fqdn?.split('.')[0] || this.publicIp || this.privateIp;\n }\n return this.fqdn || this.publicIp || this.privateIp;\n }\n\n getRoleName(): string {\n if (this.isMaster() || this.isSlave()) {\n return this.role\n .replaceAll('master', 'primary')\n .replaceAll('slave', 'replica');\n } else {\n return this.role;\n }\n }\n\n getServiceConnectionName(): string {\n if (this.isMaster() || this.isSlave()) {\n return this.role\n .replaceAll('master', 'primary')\n .replaceAll('slave', 'replica');\n } else {\n return this.role\n .replaceAll('PRIMARY', 'primary')\n .replaceAll('SECONDARY', 'replica');\n }\n }\n\n getFqdnWithRole(short: boolean = true): string {\n return `${this.getFqdn(short)}/${this.getRoleName()}`;\n }\n\n getFqdnPortWithRole(short: boolean = true): string {\n return `${this.getFqdn(short)}:${this.port}/${this.getRoleName()}`;\n }\n\n isDb(): boolean {\n return this.isGalera() || this.isPostgreSql();\n }\n\n isLb(): boolean {\n return this.isProxySql() || this.isHaProxy();\n }\n\n isGalera(): boolean {\n return this.nodeType === CMON_NODETYPE_GALERA;\n }\n\n isPostgreSql(): boolean {\n return this.nodeType === CMON_NODETYPE_POSTGRESQL;\n }\n\n isMySql(): boolean {\n console.log(this.nodeType);\n return (\n this.nodeType === CMON_NODETYPE_GALERA ||\n this.nodeType === CMON_NODETYPE_MYSQL\n );\n }\n\n isMSSQL(): boolean {\n return this.nodeType === CMON_NODETYPE_MSSQL;\n }\n\n isRedis(): boolean {\n return this.nodeType === CMON_NODETYPE_REDIS;\n }\n\n isProxySql(): boolean {\n return this.nodeType === CMON_NODETYPE_PROXYSQL;\n }\n\n isHaProxy(): boolean {\n return this.nodeType === CMON_NODETYPE_HAPROXY;\n }\n\n isOk(): boolean {\n return this.hostStatus === 'CmonHostOnline';\n }\n\n isError(): boolean {\n return (\n this.hostStatus === 'CmonHostShutDown' ||\n this.hostStatus === 'CmonHostFailed' ||\n this.hostStatus === 'CmonHostOffLine'\n );\n }\n\n getFqdnPort(short: boolean = true): string {\n return `${this.getFqdn(short)}:${this.port}`;\n }\n\n protected getStatusText(): string {\n switch (this.hostStatus) {\n case 'CmonHostOnline':\n return 'Online';\n case 'CmonHostOffLine':\n return 'Offline';\n case 'CmonHostShutDown':\n return 'ShutDown';\n case 'CmonHostFailed':\n return 'Failed';\n case 'CmonHostRecovery':\n return 'Recovering';\n case 'CmonHostUnknown':\n default:\n return 'Unknown';\n }\n }\n\n getFormattedNodeType(): string {\n if (this.isGalera()) {\n return 'Galera';\n } else if (this.isProxySql()) {\n return 'ProxySQL';\n } else if (this.isHaProxy()) {\n return 'HAProxy';\n } else if (this.isMaster()) {\n return 'Master';\n } else if (this.isSlave()) {\n return 'Slave';\n } else if (this.isSlave()) {\n return 'Slave';\n } else {\n // load balancers wil\n return this.role;\n }\n }\n\n isMaster(): boolean {\n return this.role === 'master';\n }\n\n isSlave(): boolean {\n return this.role === 'slave';\n }\n}\n","import CloudInstance, { CloudInstanceClassProps } from './CloudInstance';\n\nexport default class DbNode extends CloudInstance {\n constructor(props: CloudInstanceClassProps) {\n super(props);\n }\n\n getHostPort() {\n return `${this.publicIp || this.privateIp}:${this.port}`;\n }\n}\n","// import ClusterInfo from './ClusterInfo';\nimport FriendlyDateTime from './FriendlyDateTime';\nimport DbNode from './DbNode';\nimport CloudInstance, { CloudInstanceClassProps } from './CloudInstance';\nimport { sortNodesByRole } from '../core/helpers';\n\nexport const DB_VENDOR_MARIADB = 'mariadb';\nexport const DB_VENDOR_POSTGRESQL = 'pgsql';\nexport const DB_VENDOR_UNKNOWN = '';\n\nexport const DB_VENDOR_MARIADB_PRETTY = 'MariaDB';\nexport const DB_VENDOR_POSTGRESQL_PRETTY = 'PostgreSQL';\n\nconst MARIADB_ICON = 'vendor/mariadb';\nconst POSTGRESQL_ICON = 'vendor/postgresql';\nconst UNKNOWN_ICON = '';\n\nexport type DeploymentClassProps = {\n uuid: string;\n database_nodes: any[];\n};\n\nexport interface DeploymentInterface {\n dataStoreUuid: string;\n dbNodes: DbNode[];\n}\n\nexport default class Deployment implements DeploymentInterface {\n readonly dataStoreUuid: string;\n readonly dbNodes: DbNode[];\n\n constructor(props: DeploymentClassProps) {\n this.dataStoreUuid = props.uuid;\n this.dbNodes = props?.database_nodes?.map(\n (n: CloudInstanceClassProps) => new DbNode(n)\n );\n }\n\n /**\n * Return array of galera hosts\n */\n getDbNodes(): DbNode[] {\n return sortNodesByRole(this.dbNodes);\n }\n\n /**\n * Return array of proxysql hosts\n */\n\n // @TODO: DEPRECATE\n isClusterPostgreSql(): boolean {\n return this.isPostgreSql(this.dbNodes[0]);\n }\n\n getUniqueHostsByNodeType(short: boolean = false) {\n const dbHosts = this.dbNodes.map((n: DbNode) => n.getFqdn(short));\n\n return {\n dbHosts: dbHosts.filter(\n (v: any, i: number) => dbHosts.indexOf(v) === i\n ),\n };\n }\n\n getHosts() {\n return {\n dbHosts: this.dbNodes,\n };\n }\n\n protected getHostDetails(host: CloudInstance) {\n // \"hoststatus\" possible values are 'CmonHostUnknown', 'CmonHostOnline', 'CmonHostOffLine',\n // 'CmonHostFailed', 'CmonHostRecovery', 'CmonHostShutDown'.\n // The type is string, the default value is \"CmonHostUnknown\".\n // @TODO: Refactor this to return a proper CloudInstance object\n return {\n ...host,\n status: this.getStatusText(host.hostStatus),\n isOk: () => this.isOk(host),\n isError: () => this.isError(host),\n lastSeen: new FriendlyDateTime({\n date: host.lastSeenAt,\n }).getFriendlyDate(),\n lastSeenFull: new FriendlyDateTime({\n date: host.lastSeenAt,\n }).getFullDate(),\n key: host.uniqueId,\n icon: '',\n nodeType: this.getNodeType(host),\n onlineFor: new FriendlyDateTime({\n date: host.serviceStartedAt,\n }).getFriendlyDate(),\n instance: `${host.publicIp || host.privateIp}:${host.port}`,\n };\n }\n\n protected getStatusText(hostStatus: string) {\n switch (hostStatus) {\n case 'CmonHostOnline':\n return 'Online';\n case 'CmonHostOffLine':\n return 'Offline';\n case 'CmonHostShutDown':\n return 'ShutDown';\n case 'CmonHostFailed':\n return 'Failed';\n case 'CmonHostRecovery':\n return 'Recovering';\n case 'CmonHostUnknown':\n default:\n return 'Unknown';\n }\n }\n\n protected isOk(host: any): boolean {\n return host.hostStatus === 'CmonHostOnline';\n }\n\n protected isError(host: any): boolean {\n return (\n host.hostStatus === 'CmonHostFailed' ||\n host.hostStatus === 'CmonHostShutDown' ||\n host.hostStatus === 'CmonHostOffLine'\n );\n }\n\n protected getNodeType(host: any): string {\n if (this.isGalera(host)) {\n return 'Galera';\n } else if (this.isProxySql(host)) {\n return 'ProxySQL';\n } else if (this.isHaProxy(host)) {\n return 'HAProxy';\n } else if (this.isMaster(host)) {\n return 'Master';\n } else if (this.isSlave(host)) {\n return 'Slave';\n } else {\n // load balancers wil\n return '';\n }\n }\n\n protected isGalera(host: any): boolean {\n return host.nodeType === 'galera';\n }\n\n protected isPostgreSql(host: any): boolean {\n return host.nodeType === 'postgres';\n }\n\n protected isProxySql(host: any): boolean {\n return host.nodeType === 'proxysql';\n }\n\n protected isHaProxy(host: any): boolean {\n return host.nodeType === 'haproxy';\n }\n\n protected isMaster(host: any): boolean {\n return host.role === 'master';\n }\n\n protected isSlave(host: any): boolean {\n return host.role === 'slave';\n }\n\n getHostName(uuid: string): string {\n const dbNode = this.getDbNodes().find((n) => n.hostUuid === uuid);\n return dbNode ? dbNode.getFqdnWithRole(true) : '';\n }\n}\n","import ApiService from './ApiService';\nimport Deployment from '../types/Deployment';\nimport { API_DEPLOYMENT_V2 } from '../core/CcxEnv';\n\n// constants\nconst API_URL = API_DEPLOYMENT_V2;\n\nexport default class DataStoreService extends ApiService {\n /**\n * Get details from a Data Store\n * @param {string} dataStoreUuid\n */\n static async getDataStore(dataStoreUuid: string): Promise {\n const response = await this.request(\n 'GET',\n `data-stores/${dataStoreUuid}/nodes`\n );\n return new Deployment(response);\n }\n\n protected static getApiUrl() {\n return API_URL;\n }\n}\n","import { useEffect, useState } from 'react';\nimport Deployment from '../../types/Deployment';\nimport SingleDataStoreService from '../../services/DataStoreService';\n\nexport default function useDataStore(dataStoreUuid?: string) {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n const [dataStore, setDataStore] = useState(\n undefined\n );\n\n const load = async () => {\n if (dataStoreUuid) {\n setLoading(true);\n\n try {\n const result = await SingleDataStoreService.getDataStore(\n dataStoreUuid\n );\n setDataStore(result);\n setLoading(false);\n setError(null);\n } catch (e: any) {\n setLoading(false);\n setError(e);\n }\n\n setLoading(false);\n }\n };\n\n const refresh = () => {\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n refresh();\n }, [dataStoreUuid]);\n\n return { dataStore, refresh, loading, error };\n}\n","import ApiService from './ApiService';\nimport Deployment from '../types/Deployment';\nimport CmonMemoryStat from '../types/CmonMemoryStat';\nimport CmonCpuStat from '../types/CmonCpuStat';\nimport CmonDiskStat from '../types/CmonDiskStat';\nimport CmonNetStat from '../types/CmonNetStat';\nimport CmonSqlStat from '../types/CmonSqlStat';\nimport CmonProxySqlStat from '../types/CmonProxySqlStat';\nimport { API_STAT } from '../core/CcxEnv';\n\n// constants\nconst API_URL = API_STAT;\n\nexport default class StatService extends ApiService {\n /**\n * Get memory stats.\n */\n static async getMemoryStats(\n uuid: string,\n host: string,\n port: number,\n from?: string,\n to?: string\n ): Promise {\n return await this.request(\n 'GET',\n `stat/${uuid}/memorystat${this.getQueryString(\n host,\n port,\n from,\n to\n )}`\n );\n }\n\n /**\n * Get network stats.\n */\n static async getNetStats(\n uuid: string,\n host: string,\n port: number,\n from?: string,\n to?: string\n ): Promise {\n return await this.request(\n 'GET',\n `stat/${uuid}/netstat${this.getQueryString(host, port, from, to)}`\n );\n }\n\n /**\n * Get disk stats.\n */\n static async getDiskStats(\n uuid: string,\n host: string,\n port: number,\n from?: string,\n to?: string\n ): Promise {\n return await this.request(\n 'GET',\n `stat/${uuid}/diskstat${this.getQueryString(host, port, from, to)}`\n );\n }\n\n /**\n * Get CPU stats.\n */\n static async getCpuStats(\n uuid: string,\n host: string,\n port: number,\n from?: string,\n to?: string\n ): Promise {\n return await this.request(\n 'GET',\n `stat/${uuid}/cpustat${this.getQueryString(host, port, from, to)}`\n );\n }\n\n /**\n * Get SQL stats.\n */\n static async getSqlStats(\n uuid: string,\n host: string,\n port: number,\n from?: string,\n to?: string\n ): Promise {\n return await this.request(\n 'GET',\n `stat/${uuid}/sqlstat${this.getQueryString(host, port, from, to)}`\n );\n }\n\n /**\n * Get DB stats.\n */\n static async getDbStats(uuid: string): Promise {\n return await this.request('GET', `stat/${uuid}/dbstat`);\n }\n\n /**\n * Get TCP stats.\n */\n static async getTcpStats(uuid: string): Promise {\n return await this.request('GET', `stat/${uuid}/tcpStat`);\n }\n\n /**\n * Get NDB stats.\n */\n static async getNdbStats(uuid: string): Promise {\n return await this.request('GET', `stat/${uuid}/ndbstat`);\n }\n\n /**\n * Get ProxySLQ stats.\n */\n static async getProxySqlStats(\n uuid: string,\n host: string,\n port: number,\n from?: string,\n to?: string\n ): Promise {\n return await this.request(\n 'GET',\n `stat/${uuid}/proxysqlstat${this.getQueryString(\n host,\n port,\n from,\n to\n )}`\n );\n }\n\n /**\n * Get Mongo stats.\n */\n static async getMongoStats(uuid: string): Promise {\n return await this.request('GET', `stat/${uuid}/mongoStat`);\n }\n\n /**\n * Get HAProxy stats.\n */\n static async getHaProxyStats(\n uuid: string,\n host: string,\n port: number,\n from?: string,\n to?: string\n ): Promise {\n return await this.request(\n 'GET',\n `stat/${uuid}/haproxystat${this.getQueryString(\n host,\n port,\n from,\n to\n )}`\n );\n }\n\n /**\n * Get aggregated SQL Stats to display in the Data Store list\n * @param dataStoreUuid\n * @returns\n */\n static async getAggregatedMySqlStats(\n dataStoreUuid: string,\n from?: string,\n to?: string\n ): Promise {\n let queryStr = `?include=QUERIES,created&calculate_per_sec=true`;\n if (from) {\n queryStr = `${queryStr}&from=${encodeURIComponent(from)}`;\n }\n if (to) {\n queryStr = `${queryStr}&to=${encodeURIComponent(to)}`;\n }\n\n return await this.request(\n 'GET',\n `stat/${dataStoreUuid}/sqlstat/aggregate${queryStr}`\n );\n }\n\n /**\n * Get aggregated SQL Stats to display in the Data Store list\n * @param dataStoreUuid\n * @returns\n */\n\n static async getAggregatedPostgreSqlStats(\n dataStoreUuid: string,\n from?: string,\n to?: string\n ): Promise {\n let queryStr = `?include=commits,rollbacks,created&calculate_per_sec=true`;\n if (from) {\n queryStr = `${queryStr}&from=${encodeURIComponent(from)}`;\n }\n if (to) {\n queryStr = `${queryStr}&to=${encodeURIComponent(to)}`;\n }\n\n return await this.request(\n 'GET',\n `stat/${dataStoreUuid}/sqlstat/aggregate${queryStr}`\n );\n }\n\n protected static getQueryString(\n host: string,\n port: number,\n from?: string,\n to?: string\n ): string {\n let queryStr = `?host_port=${host}:${port}`;\n if (from) {\n queryStr = `${queryStr}&from=${encodeURIComponent(from)}`;\n }\n if (to) {\n queryStr = `${queryStr}&to=${encodeURIComponent(to)}`;\n }\n return queryStr;\n }\n\n protected static getApiUrl() {\n return API_URL;\n }\n}\n","export type CmonCpuStatBackendApiProps = {\n busy: number;\n cpuid: number;\n cpumhz: number;\n cpumodelname: string;\n cpuphysicalid: number;\n cputemp: number;\n created: number;\n guest: number;\n idle: number;\n interval: number;\n iowait: number;\n irq: number;\n loadavg1: number;\n loadavg15: number;\n loadavg5: number;\n sampleends: number;\n samplekey: string;\n serverid: number;\n steal: number;\n sys: number;\n uptime: number;\n user: number;\n};\n\nexport default class CmonCpuStat {\n readonly busy: number;\n readonly cpuId: number;\n readonly cpuMhz: number;\n readonly cpuModelName: string;\n readonly cpuPhysicalId: number;\n readonly cpuTemp: number;\n readonly created: number;\n readonly guest: number;\n readonly idle: number;\n readonly interval: number;\n readonly ioWait: number;\n readonly irq: number;\n readonly loadAvg1: number;\n readonly loadAvg15: number;\n readonly loadAvg5: number;\n readonly sampleEnds: number;\n readonly sampleKey: string;\n readonly serverId: number;\n readonly steal: number;\n readonly sys: number;\n readonly uptime: number;\n readonly user: number;\n\n constructor(props: CmonCpuStatBackendApiProps) {\n this.busy = props.busy;\n this.cpuId = props.cpuid;\n this.cpuMhz = props.cpumhz;\n this.cpuModelName = props.cpumodelname;\n this.cpuPhysicalId = props.cpuphysicalid;\n this.cpuTemp = props.cputemp;\n this.created = props.created;\n this.guest = props.guest;\n this.idle = props.idle;\n this.interval = props.interval;\n this.ioWait = props.iowait;\n this.irq = props.irq;\n this.loadAvg1 = props.loadavg1;\n this.loadAvg15 = props.loadavg15;\n this.loadAvg5 = props.loadavg5;\n this.sampleEnds = props.sampleends;\n this.sampleKey = props.samplekey;\n this.serverId = props.serverid;\n this.steal = props.steal;\n this.sys = props.sys;\n this.uptime = props.uptime;\n this.user = props.user;\n }\n}\n","export type CmonDiskStatBackendApiProps = {\n blocksize: number;\n created: number;\n device: string;\n free: number;\n interval: number;\n mountpoint: string;\n reads: number;\n readspersec: number;\n sampleends: number;\n samplekey: string;\n sectorsread: number;\n sectorswritten: number;\n serverid: number;\n total: number;\n utilization: number;\n writes: number;\n writespersec: number;\n};\n\nexport default class CmonDiskStat {\n readonly blocksize: number;\n readonly created: number;\n readonly device: string;\n readonly free: number;\n readonly interval: number;\n readonly mountpoint: string;\n readonly reads: number;\n readonly readsPerSec: number;\n readonly sampleEnds: number;\n readonly sampleKey: string;\n readonly sectorsRead: number;\n readonly sectorsWritten: number;\n readonly serverId: number;\n readonly total: number;\n readonly utilization: number;\n readonly writes: number;\n readonly writesPerSec: number;\n\n constructor(props: CmonDiskStatBackendApiProps) {\n this.blocksize = props.blocksize;\n this.created = props.created;\n this.device = props.device;\n this.free = props.free;\n this.interval = props.interval;\n this.mountpoint = props.mountpoint;\n this.reads = props.reads;\n this.readsPerSec = props.readspersec;\n this.sampleEnds = props.sampleends;\n this.sampleKey = props.samplekey;\n this.sectorsRead = props.sectorsread;\n this.sectorsWritten = props.sectorswritten;\n this.serverId = props.serverid;\n this.total = props.total;\n this.utilization = props.utilization;\n this.writes = props.writes;\n this.writesPerSec = props.writespersec;\n }\n}\n","export type CmonMemoryStatBackendApiProps = {\n created: number;\n interval: number;\n memoryutilization: number;\n pgpgin: number;\n pgpgout: number;\n pswpin: number;\n pswpout: number;\n rambuffers: number;\n ramcached: number;\n ramfree: number;\n ramfreemin: number;\n ramtotal: number;\n sampleends: number;\n samplekey: string;\n serverid: number;\n swapfree: number;\n swaptotal: number;\n swaputilization: number;\n};\n\nexport default class CmonMemoryStat {\n readonly created: number;\n readonly interval: number;\n readonly memoryUtilization: number;\n readonly pgpgIn: number;\n readonly pgpgOut: number;\n readonly pswpIn: number;\n readonly pswpOut: number;\n readonly ramBuffers: number;\n readonly ramCached: number;\n readonly ramFree: number;\n readonly ramFreeMin: number;\n readonly ramTotal: number;\n readonly sampleEnds: number;\n readonly sampleKey: string;\n readonly serverId: number;\n readonly swapFree: number;\n readonly swapTotal: number;\n readonly swapUtilization: number;\n\n constructor(props: CmonMemoryStatBackendApiProps) {\n this.created = props.created;\n this.interval = props.interval;\n this.memoryUtilization = props.memoryutilization;\n this.pgpgIn = props.pgpgin;\n this.pgpgOut = props.pgpgout;\n this.pswpIn = props.pswpin;\n this.pswpOut = props.pswpout;\n this.ramBuffers = props.rambuffers;\n this.ramCached = props.ramcached;\n this.ramFree = props.ramfree;\n this.ramFreeMin = props.ramfreemin;\n this.ramTotal = props.ramtotal;\n this.sampleEnds = props.sampleends;\n this.sampleKey = props.samplekey;\n this.serverId = props.serverid;\n this.swapFree = props.swapfree;\n this.swapTotal = props.swaptotal;\n this.swapUtilization = props.swaputilization;\n }\n}\n","export type CmonNetStatBackendApiProps = {\n created: number;\n interface: string;\n interval: number;\n rxBytes: number;\n rxDrops: number;\n rxErrors: number;\n rxFrames: number;\n rxMulticasts: number;\n rxPackets: number;\n rxSpeed: number;\n sampleends: number;\n samplekey: string;\n serverid: number;\n txBytes: number;\n txDrops: number;\n txErrors: number;\n txPackets: number;\n txSpeed: number;\n};\n\nexport default class CmonNetStat {\n readonly created: number;\n readonly interface: string;\n readonly interval: number;\n readonly rxBytes: number;\n readonly rxDrops: number;\n readonly rxErrors: number;\n readonly rxFrames: number;\n readonly rxMulticasts: number;\n readonly rxPackets: number;\n readonly rxSpeed: number;\n readonly sampleEnds: number;\n readonly sampleKey: string;\n readonly serverId: number;\n readonly txBytes: number;\n readonly txDrops: number;\n readonly txErrors: number;\n readonly txPackets: number;\n readonly txSpeed: number;\n\n constructor(props: CmonNetStatBackendApiProps) {\n this.created = props.created;\n this.interface = props.interface;\n this.interval = props.interval;\n this.rxBytes = props.rxBytes;\n this.rxDrops = props.rxDrops;\n this.rxErrors = props.rxErrors;\n this.rxFrames = props.rxFrames;\n this.rxMulticasts = props.rxMulticasts;\n this.rxPackets = props.rxPackets;\n this.rxSpeed = props.rxSpeed;\n this.sampleEnds = props.sampleends;\n this.sampleKey = props.samplekey;\n this.serverId = props.serverid;\n this.txBytes = props.txBytes;\n this.txDrops = props.txDrops;\n this.txErrors = props.txErrors;\n this.txPackets = props.txPackets;\n this.txSpeed = props.txSpeed;\n }\n}\n","import { ReactElement } from 'react';\nimport styles from './AppEmpty.module.less';\nimport { Empty } from 'antd';\nimport CcxComponentProps from '../core/CcxComponent';\nimport EmptyState from '@severalnines/frontend_hub/libs/icons/src/lib/ilustrations/EmptyState';\nimport { getThemeIllustrationColor } from '../core/helpers';\n\ninterface Props extends CcxComponentProps {\n message?: string | ReactElement;\n children?: any;\n defaultImage?: boolean;\n}\n\nfunction AppEmpty({\n message,\n children,\n testId = 'AppEmpty',\n defaultImage = false,\n}: Props) {\n return (\n \n {message ? message : 'No data to display.'}\n \n }\n image={\n \n }\n >\n {children}\n \n );\n}\n\nexport default AppEmpty;\n","import dayjs from 'dayjs';\nimport relativeTime from 'dayjs/plugin/relativeTime';\ndayjs.extend(relativeTime);\n\nexport default class FriendlyTimestamp {\n readonly date: Date;\n\n constructor(timestamp: number) {\n this.date = new Date(timestamp * 1000);\n }\n\n getFriendlyDate(): string {\n return dayjs(this.date).fromNow();\n }\n\n getFormattedFullDate(): string {\n return dayjs(this.date).format('YYYY-MM-DD HH:mm:ss ZZ');\n }\n\n getFormattedDate(): string {\n return dayjs(this.date).format('YYYY-MM-DD');\n }\n\n getFormattedTime(): string {\n return dayjs(this.date).format('HH:mm:ss');\n }\n\n getDate(): Date {\n return this.date;\n }\n}\n","import React, { createContext } from 'react';\n\nexport const ChartsContext = createContext(undefined);\n","import React, { ReactElement, useContext, useEffect, useState } from 'react';\nimport styles from './AppChartArea.module.less';\nimport { Area } from '@ant-design/charts';\nimport { ChartsContext } from '../core/context/ChartsContext';\n\nexport type AppChartAreaProps = {\n config: any;\n data: any[];\n};\n\nfunction AppChartArea({ config, data }: AppChartAreaProps): ReactElement {\n const [chartConfig, setChartConfig] = useState({\n ...config,\n meta: {\n xValue: {\n tickMethod: 'time',\n },\n },\n });\n\n const chartsContext = useContext(ChartsContext);\n\n useEffect(() => {\n if (chartConfig) {\n if (chartsContext.chartRange === '1w') {\n setChartConfig({\n ...chartConfig,\n xAxis: {\n type: 'time',\n mask: 'YYYY-MM-DD',\n },\n meta: {\n xValue: {\n tickMethod: 'time',\n tickInterval: 60 * 60 * 24,\n },\n },\n });\n } else {\n setChartConfig({\n ...chartConfig,\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n meta: {\n xValue: {\n tickMethod: 'time',\n },\n },\n });\n }\n }\n }, [chartsContext.chartRange]);\n\n return (\n
\n \n
\n );\n}\n\nexport default AppChartArea;\n","import React, { ReactElement, useRef } from 'react';\nimport styles from './AppChartLiquid.module.less';\nimport { Liquid } from '@ant-design/charts';\nimport CcxComponentProps from '../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {\n config: any;\n}\n\nfunction AppChartLiquid({\n config,\n testId = 'AppChartLiquid',\n}: Props): ReactElement {\n const ref = useRef();\n\n return (\n
\n \n
\n );\n}\n\nexport default AppChartLiquid;\n","import React, {\n ReactElement,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport styles from './AppChartLine.module.less';\nimport { Line } from '@ant-design/charts';\nimport { ChartsContext } from '../core/context/ChartsContext';\n\nexport type AppChartLineProps = {\n config: any;\n data: any[];\n};\n\nfunction AppChartLine({ config, data }: AppChartLineProps): ReactElement {\n const ref = useRef();\n\n const downloadImage = () => {\n // ref.current?.downloadImage();\n };\n\n const [chartConfig, setChartConfig] = useState({\n ...config,\n meta: {\n xValue: {\n tickMethod: 'time',\n },\n },\n });\n\n const chartsContext = useContext(ChartsContext);\n\n useEffect(() => {\n if (chartConfig) {\n if (chartsContext.chartRange === '1w') {\n setChartConfig({\n ...chartConfig,\n xAxis: {\n type: 'time',\n mask: 'YYYY-MM-DD',\n },\n meta: {\n xValue: {\n tickMethod: 'time',\n tickInterval: 60 * 60 * 24,\n },\n },\n });\n } else {\n setChartConfig({\n ...chartConfig,\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n meta: {\n xValue: {\n tickMethod: 'time',\n },\n },\n });\n }\n }\n }, [chartsContext.chartRange]);\n\n return (\n
\n \n
\n );\n}\n\nexport default AppChartLine;\n","import { Button, Empty, Table } from 'antd';\nimport CcxComponentProps from '../core/CcxComponent';\nimport {\n DownOutlined,\n RightOutlined,\n UpOutlined,\n} from '@severalnines/frontend_hub/libs/icons';\nimport styles from './AppTable.module.less';\nimport { SizeType } from 'antd/lib/config-provider/SizeContext';\nimport NoArchive from '@severalnines/frontend_hub/libs/icons/src/lib/ilustrations/NoArchive';\nimport { getThemeIllustrationColor } from '../core/helpers';\n\ninterface AppTableProps extends CcxComponentProps {\n columns: any[];\n data: any[] | undefined;\n rowKey: string | Function;\n footer?: any;\n bordered?: boolean;\n expandedRowRender?: Function;\n rowExpandable?: Function;\n className?: string;\n size?: SizeType;\n pagination?: any;\n expandable?: any;\n onChange?: Function;\n customIcon?: boolean;\n onRow?: Function;\n onExpand?: Function;\n expandableIconVariant?: 'default' | 'topQueries';\n}\n\ninterface ExpandProps {\n expanded: any;\n onExpand: any;\n record: any;\n}\n\nfunction AppTable({\n columns,\n data,\n rowKey,\n footer,\n bordered = false,\n expandedRowRender,\n rowExpandable,\n className,\n size,\n pagination,\n expandable,\n onChange,\n onRow,\n onExpand,\n customIcon,\n expandableIconVariant,\n testId = 'AppTable',\n}: AppTableProps) {\n const expandIcon = ({ expanded, onExpand, record }: ExpandProps) => {\n if (rowExpandable && !rowExpandable(record)) {\n return null;\n }\n\n if (expandableIconVariant === 'topQueries') {\n return expanded ? (\n }\n onClick={(e: any) => onExpand(record, e)}\n />\n ) : (\n }\n onClick={(e: any) => onExpand(record, e)}\n />\n );\n }\n\n return expanded ? (\n }\n onClick={(e: any) => onExpand(record, e)}\n />\n ) : (\n }\n onClick={(e: any) => onExpand(record, e)}\n />\n );\n };\n\n const scroll =\n !data || data.length === 0 ? undefined : { x: 'max-content' };\n\n return (\n \n }\n description={No Data}\n />\n ),\n }}\n expandable={\n expandable ?? {\n expandedRowRender: expandedRowRender\n ? (record: any) => expandedRowRender(record)\n : (record: any) => record?.expandableRowContent,\n rowExpandable: rowExpandable\n ? (record: any) => rowExpandable(record)\n : (record: any) => record?.expandableRowContent,\n expandIcon: customIcon ? expandIcon : null,\n }\n }\n scroll={scroll}\n className={`${styles.AppTableHeader} ${className}`}\n size={size}\n pagination={pagination !== undefined ? pagination : true}\n onChange={onChange as any}\n {...{\n top: 'topRight',\n }}\n />\n );\n}\n\nexport default AppTable;\n","import React, { ReactElement } from 'react';\nimport AppTable from './AppTable';\nimport styles from './AppChartSummary.module.less';\n\ninterface Props {\n data?: any[];\n}\n\nfunction AppChartSummary({ data }: Props): ReactElement {\n const columns = [\n {\n title: 'Series',\n dataIndex: 'label',\n key: 'label',\n },\n {\n title: 'Avg',\n dataIndex: 'avg',\n key: 'avg',\n align: 'right',\n },\n {\n title: 'Min',\n dataIndex: 'min',\n key: 'min',\n align: 'right',\n },\n {\n title: 'Max',\n dataIndex: 'max',\n key: 'max',\n align: 'right',\n },\n ];\n\n if (data && data.length > 0) {\n return (\n \n );\n }\n\n return <>;\n}\n\nexport default AppChartSummary;\n","import React from 'react';\nimport styles from './AppLoading.module.less';\nimport { Spin } from 'antd';\nimport CcxComponentProps from '../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {}\n\nfunction AppLoading({ testId = 'AppLoading' }: Props) {\n return (\n
\n \n
\n );\n}\n\nexport default AppLoading;\n","import React, { ReactElement, useRef } from 'react';\nimport styles from './AppChartHistogram.module.less';\nimport { Histogram } from '@ant-design/charts';\n\nexport type AppChartHistogramProps = {\n config: any;\n data: any[];\n};\n\nfunction AppChartHistogram({\n config,\n data,\n}: AppChartHistogramProps): ReactElement {\n const ref = useRef();\n\n return (\n
\n \n
\n );\n}\n\nexport default AppChartHistogram;\n","import React, { ReactElement } from 'react';\nimport styles from './AppChartTinyArea.module.less';\nimport { TinyArea } from '@ant-design/charts';\nimport CcxComponentProps from '../core/CcxComponent';\n\ninterface AppChartTinyAreaProps extends CcxComponentProps {\n config: any;\n data: any[];\n}\n\nfunction AppChartTinyArea({\n config,\n data,\n testId = 'AppChartTinyArea',\n}: AppChartTinyAreaProps): ReactElement {\n return (\n
\n \n
\n );\n}\n\nexport default AppChartTinyArea;\n","import { ReactElement, useRef } from 'react';\nimport { Column } from '@ant-design/charts';\n\nexport type AppChartColumnProps = {\n config: any;\n data: any[];\n};\n\nfunction AppChartColumn({ config, data }: AppChartColumnProps): ReactElement {\n const ref = useRef();\n\n return ;\n}\n\nexport default AppChartColumn;\n","import { ReactElement } from 'react';\nimport styles from './AppChart.module.less';\nimport AppChartArea from './AppChartArea';\nimport AppChartLiquid from './AppChartLiquid';\nimport AppChartLine from './AppChartLine';\n\nimport AppChartSummary from './AppChartSummary';\nimport AppLoading from './AppLoading';\nimport CcxComponentProps from '../core/CcxComponent';\nimport AppChartHistogram from './AppChartHistogram';\nimport AppChartTinyArea from './AppChartTinyArea';\nimport AppEmpty from './AppEmpty';\nimport AppChartColumn from './AppChartColumn';\n\ninterface Props extends CcxComponentProps {\n config: any;\n data?: any[];\n type: string;\n summary?: any;\n loading?: boolean;\n displaySummary?: boolean;\n bordered?: boolean;\n}\n\nfunction AppChart({\n data,\n type,\n config,\n summary,\n loading = true,\n displaySummary = false,\n bordered = true,\n testId = 'AppChart',\n}: Props): ReactElement {\n const getChartComponent = (type: string, config: any) => {\n switch (type) {\n case 'area':\n return ;\n case 'tinyArea':\n return ;\n case 'liquid':\n return ;\n case 'line':\n return ;\n case 'histogram':\n return ;\n case 'column':\n return ;\n default:\n return null;\n }\n };\n\n let chart = null;\n\n if (loading) {\n chart = ;\n } else {\n if (\n data?.length === 0 ||\n (type === 'liquid' && config?.percent === 0)\n ) {\n const message = (\n \n There is no data to display\n \n );\n\n chart = (\n
\n

\n {config?.title?.text}\n

\n \n
\n );\n } else {\n if (\n config?.title?.text === 'Load average' ||\n config?.title?.text === 'Disk IO utilization'\n ) {\n data = data?.map((val: any) => {\n return { ...val, yValue: val.yValue };\n });\n } else {\n // Should we even have rounding here?\n data = data?.map((val: any) => {\n return { ...val, yValue: Math.round(val.yValue) };\n });\n }\n\n chart = (\n <>\n

{config?.title?.text}

\n\n {getChartComponent(type, config)}\n\n {!displaySummary ? null : summary && summary.length > 0 ? (\n \n ) : null}\n \n );\n }\n }\n\n return (\n \n {chart}\n \n );\n}\n\nexport default AppChart;\n","import React, { ReactElement, ReactNode } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport AppEmpty from '../../AppEmpty';\nimport styles from './ChartCustomTooltip.module.less';\n\nexport interface ChartCustomTooltipRowType {\n color?: string;\n label: string;\n value: string | number;\n}\n\ninterface Props extends CcxComponentProps {\n title: ReactNode;\n content: ChartCustomTooltipRowType[];\n summary?: ChartCustomTooltipRowType[];\n}\n\nfunction ChartCustomTooltip({\n content,\n summary,\n testId = 'ChartCustomTooltip',\n title,\n}: Props): ReactElement {\n return (\n
\n \n {title}\n
\n\n \n {content && content.length > 0 ? (\n content.map((c: ChartCustomTooltipRowType, i: number) => {\n return (\n \n {c.color && (\n \n )}\n
\n {c.label}\n
\n
\n {c.value}\n
\n \n );\n })\n ) : (\n \n )}\n \n\n {summary && summary.length > 0 && (\n \n {summary.map((c: ChartCustomTooltipRowType, i: number) => {\n return (\n \n \n
\n {c.label}\n
\n
\n {c.value}\n
\n \n );\n })}\n \n )}\n \n );\n}\n\nexport default ChartCustomTooltip;\n","import { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonCpuStat from '../../../types/CmonCpuStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonCpuStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction CpuUsageChart({\n data,\n loading,\n displaySummary,\n testId = 'CpuUsageChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: `${(avg[s.value] * 100).toFixed(2)}%`,\n min: `${(min[s.value] * 100).toFixed(2)}%`,\n max: `${(max[s.value] * 100).toFixed(2)}%`,\n sum: `${(sum[s.value] * 100).toFixed(2)}%`,\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonCpuStat) => {\n return [\n {\n yValue: stat.ioWait * 100,\n series: 'IO Wait',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.irq * 100,\n series: 'IRQ',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.steal * 100,\n series: 'Steal',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.sys * 100,\n series: 'System',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.user * 100,\n series: 'User',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'ioWait',\n label: 'IO Wait',\n },\n {\n value: 'irq',\n label: 'IRQ',\n },\n {\n value: 'steal',\n label: 'Steal',\n },\n {\n value: 'sys',\n label: 'System',\n },\n {\n value: 'user',\n label: 'User',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'CPU usage',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return `${text}%`;\n },\n },\n },\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: `${d?.data?.yValue.toFixed(2)}%`,\n }));\n };\n\n const getSummary = () => {\n if (!data || data.length === 0) return [];\n const sum = data.reduce(\n (accumulator: number, d: any) =>\n accumulator + d.data.yValue,\n 0\n );\n const average = sum / data.length;\n\n return [\n {\n label: 'CPU Idle',\n value: `${(100 - sum).toFixed(2)}%`,\n },\n {\n label: 'Total Usage',\n value: `${sum.toFixed(2)}%`,\n },\n ];\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n summary: getSummary(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default CpuUsageChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonDiskStat from '../../../types/CmonDiskStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonDiskStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction DiskIopsChart({\n data,\n loading,\n displaySummary,\n testId = 'DiskIopsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value],\n max: max[s.value],\n sum: sum[s.value],\n };\n });\n\n setSummary(dataSummary);\n };\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonDiskStat) => {\n return [\n {\n yValue: stat.readsPerSec,\n series: `${stat.device} Reads/s`,\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.writesPerSec,\n series: `${stat.device} Writes/s`,\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'readsPerSec',\n label: 'Read/s',\n },\n {\n value: 'writesPerSec',\n label: 'Write/s',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Disk IOPS',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return `${text}`;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: `${d?.data?.yValue.toFixed(0)}`,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default DiskIopsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonDiskStat from '../../../types/CmonDiskStat';\nimport AppChart from '../../AppChart';\n\ninterface Props extends CcxComponentProps {\n data?: CmonDiskStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction DiskIOUtilizationChart({\n data,\n loading,\n displaySummary,\n testId = 'DiskIOUtilizationChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState(0);\n const [summary, setSummary] = useState([]);\n\n useEffect(() => {\n if (data) {\n const reducer = (accumulator: number, current: CmonDiskStat) => {\n return accumulator + current.utilization;\n };\n const avg = data.reduce(reducer, 0) / data.length;\n setChartData(avg);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Disk IO utilization',\n },\n description: {\n visible: true,\n text: '',\n },\n min: 0,\n max: 1,\n percent: chartData,\n height,\n width,\n autoFit: !width && !height,\n animation: false,\n statistic: {\n formatter: (value: number) => (100 * value).toFixed(1) + '%',\n },\n };\n\n return (\n \n );\n}\n\nexport default DiskIOUtilizationChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CmonDiskStat from '../../../types/CmonDiskStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport prettyBytes from 'pretty-bytes';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport numbro from 'numbro';\n\ninterface Props extends CcxComponentProps {\n data?: CmonDiskStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction DiskSpaceUsageChart({\n data,\n loading,\n displaySummary,\n testId = 'DiskSpaceUsageChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonDiskStat) => {\n return [\n {\n yValue: stat.free,\n series: `${stat.device} Free`,\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.total - stat.free,\n series: `${stat.device} Used`,\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Disk space usage',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return numbro(parseInt(text, 10)).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 2,\n });\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: numbro(\n parseInt(d?.data?.yValue.toFixed(2), 10)\n ).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 2,\n }),\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default DiskSpaceUsageChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CmonDiskStat from '../../../types/CmonDiskStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport prettyBytes from 'pretty-bytes';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonDiskStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction DiskThroughputChart({\n data,\n loading,\n displaySummary,\n testId = 'DiskThroughputChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: `${prettyBytes(avg[s.value] * 512)}/s`,\n min: `${prettyBytes(min[s.value] * 512)}/s`,\n max: `${prettyBytes(max[s.value] * 512)}/s`,\n sum: `${prettyBytes(sum[s.value] * 512)}/s`,\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonDiskStat) => {\n return [\n {\n yValue: stat.sectorsRead * 512,\n series: `${stat.device} Bytes read/s`,\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.sectorsWritten * 512,\n series: `${stat.device} Bytes writen/s`,\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'sectorsRead',\n label: 'Bytes read/s',\n },\n {\n value: 'sectorsWritten',\n label: 'Bytes writen/s',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Disk throughput',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return `${prettyBytes(parseInt(text, 10))}/s`;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: `${prettyBytes(\n parseInt(d?.data?.yValue, 10)\n )}/s`,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default DiskThroughputChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CmonCpuStat from '../../../types/CmonCpuStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonCpuStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction LoadAvgChart({\n data,\n loading,\n displaySummary,\n testId = 'LoadAvgChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonCpuStat) => {\n return [\n {\n yValue: stat.loadAvg15,\n series: 'Load Avg 15m',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.loadAvg5,\n series: 'Load Avg 5m',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.loadAvg1,\n series: 'Load Avg 1m',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'loadAvg1',\n label: 'Load Avg 1m',\n },\n {\n value: 'loadAvg5',\n label: 'Load Avg 5m',\n },\n {\n value: 'loadAvg15',\n label: 'Load Avg 15m',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Load average',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default LoadAvgChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CmonNetStat from '../../../types/CmonNetStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport prettyBytes from 'pretty-bytes';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonNetStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction NetworkUsageChart({\n data,\n loading,\n displaySummary,\n testId = 'NetworkUsageChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: `${prettyBytes(avg[s.value])}/s`,\n min: `${prettyBytes(min[s.value])}/s`,\n max: `${prettyBytes(max[s.value])}/s`,\n sum: `${prettyBytes(sum[s.value])}/s`,\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonNetStat) => {\n return [\n {\n yValue: stat.rxBytes,\n series: `${stat.interface} Received`,\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.txBytes,\n series: `${stat.interface} Sent`,\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'rxBytes',\n label: 'Received',\n },\n {\n value: 'txBytes',\n label: 'Sent',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Network usage',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return `${prettyBytes(parseInt(text, 10))}/s`;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: `${prettyBytes(\n parseInt(d?.data?.yValue.toFixed(2), 10)\n )}/s`,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default NetworkUsageChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CmonMemoryStat from '../../../types/CmonMemoryStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport prettyBytes from 'pretty-bytes';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport numbro from 'numbro';\n\ninterface Props extends CcxComponentProps {\n data?: CmonMemoryStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction RamUsageChart({\n data,\n loading,\n displaySummary,\n testId = 'RamUsageChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonMemoryStat) => {\n return [\n {\n // from CC: row.ramused = row.ramtotal - row.ramfree - row.ramcached - row.rambuffers;\n yValue:\n stat.ramTotal -\n stat.ramFree -\n stat.ramCached -\n stat.ramBuffers,\n series: 'Used',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.ramFree,\n series: 'Free',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.ramBuffers,\n series: 'Buffers',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.ramCached,\n series: 'Cached',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'RAM usage',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return numbro(parseInt(text, 10)).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 2,\n });\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: numbro(\n parseInt(d?.data?.yValue.toFixed(2), 10)\n ).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 2,\n }),\n }));\n };\n\n const getSummary = () => {\n if (!data || data.length === 0) return [];\n const sum = data.reduce(\n (accumulator: number, d: any) =>\n accumulator + d.data.yValue,\n 0\n );\n const average = sum / data.length;\n\n return [\n {\n label: 'Total',\n value: numbro(sum).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 2,\n }),\n },\n ];\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n summary: getSummary(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default RamUsageChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonMemoryStat from '../../../types/CmonMemoryStat';\nimport AppChart from '../../AppChart';\n\ninterface Props extends CcxComponentProps {\n data?: CmonMemoryStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction RamUtilizationChart({\n data,\n loading,\n displaySummary,\n testId = 'RamUtilizationChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState(0);\n const [summary, setSummary] = useState([]);\n\n useEffect(() => {\n if (data) {\n const reducer = (accumulator: number, current: CmonMemoryStat) => {\n return accumulator + current.memoryUtilization;\n };\n const avg = data.reduce(reducer, 0) / data.length;\n setChartData(avg);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'RAM utilization',\n },\n description: {\n visible: true,\n text: '',\n },\n min: 0,\n max: 1,\n percent: chartData,\n height,\n width,\n autoFit: !width && !height,\n animation: false,\n statistic: {\n formatter: (value: number) => (100 * value).toFixed(1) + '%',\n },\n };\n\n return (\n \n );\n}\n\nexport default RamUtilizationChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport useCpuStatsCompare from '../../../core/hooks/useCpuStatsCompare';\nimport useDiskStatsCompare from '../../../core/hooks/useDiskStatsCompare';\nimport useMemoryStatsCompare from '../../../core/hooks/useMemoryStatsCompare';\nimport useNetStatsCompare from '../../../core/hooks/useNetStatsCompare';\nimport AppEmpty from '../../AppEmpty';\nimport styles from './HostCompareDashboard.module.less';\nimport { Col, Row } from 'antd';\nimport CpuUsageChart from '../../ccx/charts/CpuUsageChart';\nimport DiskIopsChart from '../../ccx/charts/DiskIopsChart';\nimport DiskIOUtilizationChart from '../../ccx/charts/DiskIOUtilizationChart';\nimport DiskSpaceUsageChart from '../../ccx/charts/DiskSpaceUsageChart';\nimport DiskThroughputChart from '../../ccx/charts/DiskThroughputChart';\nimport LoadAvgChart from '../../ccx/charts/LoadAvgChart';\nimport NetworkUsageChart from '../../ccx/charts/NetworkUsageChart';\nimport RamUsageChart from '../../ccx/charts/RamUsageChart';\nimport RamUtilizationChart from '../../ccx/charts/RamUtilizationChart';\n\ninterface Props {\n uuid: string;\n from?: string;\n to?: string;\n interval: number;\n hidden?: boolean;\n displaySummary?: boolean;\n selectedNodes: any[];\n}\n\nfunction HostCompareDashboard({\n uuid,\n from,\n to,\n interval,\n hidden,\n displaySummary,\n selectedNodes,\n}: Props): ReactElement {\n const {\n stats: memoryStats,\n refresh: memoryStatsRefresh,\n loading: memoryStatsLoading,\n } = useMemoryStatsCompare(uuid, selectedNodes, from, to);\n const {\n stats: cpuStats,\n refresh: cpuStatsRefresh,\n loading: cpuStatsLoading,\n } = useCpuStatsCompare(uuid, selectedNodes, from, to);\n const {\n stats: netStats,\n refresh: netStatsRefresh,\n loading: netStatsLoading,\n } = useNetStatsCompare(uuid, selectedNodes, from, to);\n const {\n stats: diskStats,\n refresh: diskStatsRefresh,\n loading: diskStatsLoading,\n } = useDiskStatsCompare(uuid, selectedNodes, from, to);\n const [memoryInterval, setMemoryInterval] = useState(\n undefined\n );\n const [cpuInterval, setCpuInterval] = useState(\n undefined\n );\n const [netInterval, setNetInterval] = useState(\n undefined\n );\n const [diskInterval, setDiskInterval] = useState(\n undefined\n );\n const [refreshInterval, setRefreshInterval] = useState(interval);\n\n useEffect(() => {\n let interval: any;\n if (memoryStats && memoryStats.length > 0 && refreshInterval > 0) {\n interval = setInterval(() => {\n memoryStatsRefresh();\n }, refreshInterval);\n setMemoryInterval(interval);\n }\n return () => clearInterval(interval);\n }, [memoryStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (cpuStats && cpuStats.length > 0 && refreshInterval > 0) {\n interval = setInterval(() => {\n cpuStatsRefresh();\n }, refreshInterval);\n setCpuInterval(interval);\n }\n return () => clearInterval(interval);\n }, [cpuStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (netStats && netStats.length > 0 && refreshInterval > 0) {\n interval = setInterval(() => {\n netStatsRefresh();\n }, refreshInterval);\n setNetInterval(interval);\n }\n return () => clearInterval(interval);\n }, [netStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (diskStats && diskStats.length > 0 && refreshInterval > 0) {\n interval = setInterval(() => {\n diskStatsRefresh();\n }, refreshInterval);\n setDiskInterval(interval);\n }\n return () => clearInterval(interval);\n }, [diskStats, refreshInterval]);\n\n useEffect(() => {\n if (interval === 0) {\n // when interval is 0, we must pause the refresh (clear existing intervals)\n clearInterval(memoryInterval);\n clearInterval(cpuInterval);\n clearInterval(netInterval);\n clearInterval(diskInterval);\n setMemoryInterval(0);\n setCpuInterval(0);\n setNetInterval(0);\n setDiskInterval(0);\n }\n setRefreshInterval(interval);\n }, [interval]);\n\n useEffect(() => {\n if (hidden) {\n // clear interval to stop updating data if the tab is not active (charts are not visible)\n clearInterval(memoryInterval);\n clearInterval(cpuInterval);\n clearInterval(netInterval);\n clearInterval(diskInterval);\n setMemoryInterval(0);\n setCpuInterval(0);\n setNetInterval(0);\n setDiskInterval(0);\n } else if (\n memoryInterval === 0 ||\n cpuInterval === 0 ||\n netInterval === 0 ||\n diskInterval === 0\n ) {\n // force refresh if the interval is 0, otherwise, the interval will refresh data soon\n // interval is undefined on the first load\n // interval will be 0 when paused or tab is hidden\n memoryStatsRefresh();\n cpuStatsRefresh();\n netStatsRefresh();\n diskStatsRefresh();\n }\n }, [hidden]);\n\n return (\n
\n {selectedNodes.length > 0 ? (\n \n {selectedNodes.map((n: any, idx: number) => (\n \n

{n}

\n\n {/* CPU */}\n \n \n \n \n \n \n \n\n {/* RAM */}\n \n \n \n \n \n \n\n {/* NETWORK */}\n \n \n \n\n {/* DISK */}\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n ))}\n \n ) : (\n \n )}\n
\n );\n}\n\nexport default HostCompareDashboard;\n","import { useEffect, useState } from 'react';\nimport StatService from '../../services/StatService';\nimport CmonMemoryStat from '../../types/CmonMemoryStat';\n\nexport default function useMemoryStatsCompare(\n uuid: string,\n nodes?: any[],\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState(undefined);\n\n const load = async () => {\n if (uuid && nodes && nodes.length > 0) {\n try {\n const details = await Promise.all(\n nodes.map((n: string) => {\n const [host, port] = n.split(':');\n return StatService.getMemoryStats(\n uuid,\n host,\n parseInt(port, 10),\n from,\n to\n );\n })\n );\n setStats(\n details.map((d: any, i: number) => {\n return d.map((dd: any) => new CmonMemoryStat(dd));\n })\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, [uuid, nodes, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport StatService from '../../services/StatService';\nimport CmonCpuStat from '../../types/CmonCpuStat';\n\nexport default function useCpuStatsCompare(\n uuid: string,\n nodes?: any[],\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState(undefined);\n\n const load = async () => {\n if (uuid && nodes && nodes.length > 0) {\n try {\n const details = await Promise.all(\n nodes.map((n: string) => {\n const [host, port] = n.split(':');\n return StatService.getCpuStats(\n uuid,\n host,\n parseInt(port, 10),\n from,\n to\n );\n })\n );\n setStats(\n details.map((d: any, i: number) => {\n return d.map((dd: any) => new CmonCpuStat(dd));\n })\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, [uuid, nodes, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport StatService from '../../services/StatService';\nimport CmonNetStat from '../../types/CmonNetStat';\n\nexport default function useNetStatsCompare(\n uuid: string,\n nodes?: any[],\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState(undefined);\n\n const load = async () => {\n if (uuid && nodes && nodes.length > 0) {\n try {\n const details = await Promise.all(\n nodes.map((n: string) => {\n const [host, port] = n.split(':');\n return StatService.getNetStats(\n uuid,\n host,\n parseInt(port, 10),\n from,\n to\n );\n })\n );\n setStats(\n details.map((d: any, i: number) => {\n return d.map((dd: any) => new CmonNetStat(dd));\n })\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, [uuid, nodes, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport StatService from '../../services/StatService';\nimport CmonDiskStat from '../../types/CmonDiskStat';\n\nexport default function useDiskStatsCompare(\n uuid: string,\n nodes?: any[],\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState(undefined);\n\n const load = async () => {\n if (uuid && nodes && nodes.length > 0) {\n try {\n const details = await Promise.all(\n nodes.map((n: string) => {\n const [host, port] = n.split(':');\n return StatService.getDiskStats(\n uuid,\n host,\n parseInt(port, 10),\n from,\n to\n );\n })\n );\n setStats(\n details.map((d: any, i: number) => {\n return d.map((dd: any) => new CmonDiskStat(dd));\n })\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, [uuid, nodes, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonSqlStat from '../../../types/CmonSqlStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonSqlStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction MysqlConnectionsChart({\n data,\n loading,\n displaySummary,\n testId = 'MysqlConnectionsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value].toFixed(),\n max: max[s.value].toFixed(),\n sum: sum[s.value].toFixed(),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonSqlStat) => {\n return [\n {\n yValue: stat.connectionsMySql,\n series: 'CONNECTIONS',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'connectionsMySql',\n label: 'CONNECTIONS',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Connections',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return text;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default MysqlConnectionsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonSqlStat from '../../../types/CmonSqlStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonSqlStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction MysqlComDeleteChart({\n data,\n loading,\n displaySummary,\n testId = 'MysqlComDeleteChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value].toFixed(),\n max: max[s.value].toFixed(),\n sum: sum[s.value].toFixed(),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonSqlStat) => {\n return [\n {\n yValue: stat.comDelete,\n series: 'COM_DELETE',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'comDelete',\n label: 'COM_DELETE',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Delete statements',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return text;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default MysqlComDeleteChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonSqlStat from '../../../types/CmonSqlStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonSqlStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction MysqlComReplaceChart({\n data,\n loading,\n displaySummary,\n testId = 'MysqlComReplaceChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value].toFixed(),\n max: max[s.value].toFixed(),\n sum: sum[s.value].toFixed(),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonSqlStat) => {\n return [\n {\n yValue: stat.comReplace,\n series: 'COM_REPLACE',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'comReplace',\n label: 'COM_REPLACE',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Replace statements',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return text;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default MysqlComReplaceChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonSqlStat from '../../../types/CmonSqlStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonSqlStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction MysqlComSelectChart({\n data,\n loading,\n displaySummary,\n testId = 'MysqlComSelectChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value].toFixed(),\n max: max[s.value].toFixed(),\n sum: sum[s.value].toFixed(),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonSqlStat) => {\n return [\n {\n yValue: stat.comSelect,\n series: 'COM_SELECT',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'comSelect',\n label: 'COM_SELECT',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Select statements',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return text;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default MysqlComSelectChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonSqlStat from '../../../types/CmonSqlStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonSqlStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction MysqlComUpdateChart({\n data,\n loading,\n displaySummary,\n testId = 'MysqlComUpdateChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value].toFixed(),\n max: max[s.value].toFixed(),\n sum: sum[s.value].toFixed(),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonSqlStat) => {\n return [\n {\n yValue: stat.comUpdate,\n series: 'COM_UPDATE',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'comUpdate',\n label: 'COM_UPDATE',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Update statements',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return text;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default MysqlComUpdateChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonSqlStat from '../../../types/CmonSqlStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonSqlStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction MysqlComInsertChart({\n data,\n loading,\n displaySummary,\n testId = 'MysqlComInsertChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value].toFixed(),\n max: max[s.value].toFixed(),\n sum: sum[s.value].toFixed(),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonSqlStat) => {\n return [\n {\n yValue: stat.comInsert,\n series: 'COM_INSERT',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'comInsert',\n label: 'COM_INSERT',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Insert statements',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return text;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default MysqlComInsertChart;\n","export type CmonSqlStatBackendApiProps = {\n ABORTED_CLIENTS: number;\n ABORTED_CONNECTS: number;\n BYTES_RECEIVED: number;\n BYTES_SENT: number;\n COM_DELETE: number;\n COM_INSERT: number;\n COM_REPLACE: number;\n COM_SELECT: number;\n COM_UPDATE: number;\n CONNECTIONS: number;\n CREATED_TMP_DISK_TABLES: number;\n CREATED_TMP_FILES: number;\n CREATED_TMP_TABLES: number;\n HANDLER_DELETE: number;\n HANDLER_READ_FIRST: number;\n HANDLER_READ_KEY: number;\n HANDLER_READ_LAST: number;\n HANDLER_READ_NEXT: number;\n HANDLER_READ_PREV: number;\n HANDLER_READ_RND: number;\n HANDLER_READ_RND_NEXT: number;\n HANDLER_UPDATE: number;\n HANDLER_WRITE: number;\n INNODB_BUFFER_POOL_PAGES_DATA: number;\n INNODB_BUFFER_POOL_PAGES_DIRTY: number;\n INNODB_BUFFER_POOL_PAGES_FLUSHED: number;\n INNODB_BUFFER_POOL_PAGES_FREE: number;\n INNODB_BUFFER_POOL_PAGES_MISC: number;\n INNODB_BUFFER_POOL_PAGES_TOTAL: number;\n INNODB_DATA_FSYNCS: number;\n INNODB_DATA_PENDING_FSYNCS: number;\n INNODB_DATA_PENDING_READS: number;\n INNODB_DATA_PENDING_WRITES: number;\n INNODB_DATA_READ: number;\n INNODB_DATA_READS: number;\n INNODB_DATA_WRITES: number;\n INNODB_DATA_WRITTEN: number;\n INNODB_LOG_WAITS: number;\n INNODB_OS_LOG_FSYNCS: number;\n INNODB_OS_LOG_PENDING_FSYNCS: number;\n INNODB_OS_LOG_PENDING_WRITES: number;\n INNODB_OS_LOG_WRITTEN: number;\n INNODB_PAGES_CREATED: number;\n INNODB_PAGES_READ: number;\n INNODB_PAGES_WRITTEN: number;\n OPENED_TABLES: number;\n OPEN_TABLES: number;\n QUERIES: number;\n QUESTIONS: number;\n REPLICATION_LAG: number;\n SELECT_FULL_JOIN: number;\n SELECT_FULL_RANGE_JOIN: number;\n SELECT_RANGE: number;\n SELECT_RANGE_CHECK: number;\n SELECT_SCAN: number;\n SLOW_QUERIES: number;\n THREADS_CACHED: number;\n THREADS_CONNECTED: number;\n THREADS_CREATED: number;\n THREADS_RUNNING: number;\n WSREP_FLOW_CONTROL_PAUSED: number;\n WSREP_FLOW_CONTROL_PAUSED_NS: number;\n WSREP_FLOW_CONTROL_RECV: number;\n WSREP_FLOW_CONTROL_SENT: number;\n WSREP_LOCAL_BF_ABORTS: number;\n WSREP_LOCAL_RECV_QUEUE: number;\n WSREP_LOCAL_RECV_QUEUE_AVG: number;\n WSREP_LOCAL_RECV_QUEUE_MAX: number;\n WSREP_LOCAL_RECV_QUEUE_MIN: number;\n WSREP_LOCAL_SEND_QUEUE: number;\n WSREP_LOCAL_SEND_QUEUE_AVG: number;\n WSREP_LOCAL_SEND_QUEUE_MAX: number;\n WSREP_LOCAL_SEND_QUEUE_MIN: number;\n WSREP_RECEIVED_BYTES: number;\n WSREP_REPLICATED_BYTES: number;\n WSREP_REPL_DATA_BYTES: number;\n WSREP_REPL_KEYS_BYTES: number;\n WSREP_REPL_OTHER_BYTES: number;\n 'blocks-hit': number;\n 'blocks-read': number;\n commits: number;\n connections: number;\n created: number;\n interval: number;\n rollbacks: number;\n 'rows-deleted': number;\n 'rows-fetched': number;\n 'rows-inserted': number;\n 'rows-updated': number;\n sampleends: number;\n samplekey: string;\n serverid: number;\n transactions: number;\n};\n\nexport default class CmonSqlStat {\n readonly abortedClients: number;\n readonly abortedConnects: number;\n readonly bytesReceived: number;\n readonly bytesSent: number;\n readonly comDelete: number;\n readonly comInsert: number;\n readonly comReplace: number;\n readonly comSelect: number;\n readonly comUpdate: number;\n readonly connectionsPostgreSql: number;\n readonly createdTmpDiskTables: number;\n readonly createdTmpFiles: number;\n readonly createdTmpTables: number;\n readonly handlerDelete: number;\n readonly handlerReadFirst: number;\n readonly handlerReadKey: number;\n readonly handlerReadLast: number;\n readonly handlerReadNext: number;\n readonly handlerReadPrev: number;\n readonly handlerReadRnd: number;\n readonly handlerReadRndNext: number;\n readonly handlerUpdate: number;\n readonly handlerWrite: number;\n readonly innodbBufferPoolPagesData: number;\n readonly innodbBufferPoolPagesDirty: number;\n readonly innodbBufferPoolPagesFlushed: number;\n readonly innodbBufferPoolPagesFree: number;\n readonly innodbBufferPoolPagesMisc: number;\n readonly innodbBufferPoolPagesTotal: number;\n readonly innodbDataFsyncs: number;\n readonly innodbDataPendingFsyncs: number;\n readonly innodbDataPendingReads: number;\n readonly innodbDataPendingWrites: number;\n readonly innodbDataRead: number;\n readonly innodbDataReads: number;\n readonly innodbDataWrites: number;\n readonly innodbDataWritten: number;\n readonly innodbLogWaits: number;\n readonly innodbOsLogFsyncs: number;\n readonly innodbOsLogPendingFsyncs: number;\n readonly innodbOsLogPendingWrites: number;\n readonly innodbOsLogWritten: number;\n readonly innodbPagesCreated: number;\n readonly innodbPagesRead: number;\n readonly innodbPagesWritten: number;\n readonly openedTables: number;\n readonly openTables: number;\n readonly queries: number;\n readonly questions: number;\n readonly replicationLag: number;\n readonly selectFullJoin: number;\n readonly selectFullRangeJoin: number;\n readonly selectRange: number;\n readonly selectRangeCheck: number;\n readonly selectScan: number;\n readonly slowQueries: number;\n readonly threadsCached: number;\n readonly threadsConnected: number;\n readonly threadsCreated: number;\n readonly threadsRunning: number;\n readonly wsrepFlowControlPaused: number;\n readonly wsrepFlowControlPausedNs: number;\n readonly wsrepFlowControlRecv: number;\n readonly wsrepFlowControlSent: number;\n readonly wsrepLocalBfAborts: number;\n readonly wsrepLocalRecvQueue: number;\n readonly wsrepLocalRecvQueueAvg: number;\n readonly wsrepLocalRcvQueueMax: number;\n readonly wsrepLocalRcvQueueMin: number;\n readonly wsrepLocalSendQueue: number;\n readonly wsrepLocalSendQueueAvg: number;\n readonly wsrepLocalSendQueueMax: number;\n readonly wsrepLocalSendQueueMin: number;\n readonly wsrepReceivedBytes: number;\n readonly wsrepReplicatedBytes: number;\n readonly wsrepReplDataBytes: number;\n readonly wsrepReplKeysBytes: number;\n readonly wsrepReplOtherBytes: number;\n readonly blocksHit: number;\n readonly blocksRead: number;\n readonly commits: number;\n readonly connectionsMySql: number;\n readonly created: number;\n readonly interval: number;\n readonly rollbacks: number;\n readonly rowsDeleted: number;\n readonly rowsFetched: number;\n readonly rowsInserted: number;\n readonly rowsUpdated: number;\n readonly sampleEnds: number;\n readonly sampleKey: string;\n readonly serverId: number;\n readonly transactions: number;\n\n constructor(props: CmonSqlStatBackendApiProps) {\n this.abortedClients = props.ABORTED_CLIENTS;\n this.abortedConnects = props.ABORTED_CONNECTS;\n this.bytesReceived = props.BYTES_RECEIVED;\n this.bytesSent = props.BYTES_SENT;\n this.comDelete = props.COM_DELETE;\n this.comInsert = props.COM_INSERT;\n this.comReplace = props.COM_REPLACE;\n this.comSelect = props.COM_SELECT;\n this.comUpdate = props.COM_UPDATE;\n this.connectionsPostgreSql = props.connections;\n this.createdTmpDiskTables = props.CREATED_TMP_DISK_TABLES;\n this.createdTmpFiles = props.CREATED_TMP_FILES;\n this.createdTmpTables = props.CREATED_TMP_TABLES;\n this.handlerDelete = props.HANDLER_DELETE;\n this.handlerReadFirst = props.HANDLER_READ_FIRST;\n this.handlerReadKey = props.HANDLER_READ_KEY;\n this.handlerReadLast = props.HANDLER_READ_LAST;\n this.handlerReadNext = props.HANDLER_READ_NEXT;\n this.handlerReadPrev = props.HANDLER_READ_PREV;\n this.handlerReadRnd = props.HANDLER_READ_RND;\n this.handlerReadRndNext = props.HANDLER_READ_RND_NEXT;\n this.handlerUpdate = props.HANDLER_UPDATE;\n this.handlerWrite = props.HANDLER_WRITE;\n this.innodbBufferPoolPagesData = props.INNODB_BUFFER_POOL_PAGES_DATA;\n this.innodbBufferPoolPagesDirty = props.INNODB_BUFFER_POOL_PAGES_DIRTY;\n this.innodbBufferPoolPagesFlushed =\n props.INNODB_BUFFER_POOL_PAGES_FLUSHED;\n this.innodbBufferPoolPagesFree = props.INNODB_BUFFER_POOL_PAGES_FREE;\n this.innodbBufferPoolPagesMisc = props.INNODB_BUFFER_POOL_PAGES_MISC;\n this.innodbBufferPoolPagesTotal = props.INNODB_BUFFER_POOL_PAGES_TOTAL;\n this.innodbDataFsyncs = props.INNODB_DATA_FSYNCS;\n this.innodbDataPendingFsyncs = props.INNODB_DATA_PENDING_FSYNCS;\n this.innodbDataPendingReads = props.INNODB_DATA_PENDING_READS;\n this.innodbDataPendingWrites = props.INNODB_DATA_PENDING_WRITES;\n this.innodbDataRead = props.INNODB_DATA_READ;\n this.innodbDataReads = props.INNODB_DATA_READS;\n this.innodbDataWrites = props.INNODB_DATA_WRITES;\n this.innodbDataWritten = props.INNODB_DATA_WRITTEN;\n this.innodbLogWaits = props.INNODB_LOG_WAITS;\n this.innodbOsLogFsyncs = props.INNODB_OS_LOG_FSYNCS;\n this.innodbOsLogPendingFsyncs = props.INNODB_OS_LOG_PENDING_FSYNCS;\n this.innodbOsLogPendingWrites = props.INNODB_OS_LOG_PENDING_WRITES;\n this.innodbOsLogWritten = props.INNODB_OS_LOG_WRITTEN;\n this.innodbPagesCreated = props.INNODB_PAGES_CREATED;\n this.innodbPagesRead = props.INNODB_PAGES_READ;\n this.innodbPagesWritten = props.INNODB_PAGES_WRITTEN;\n this.openedTables = props.OPENED_TABLES;\n this.openTables = props.OPEN_TABLES;\n this.queries = props.QUERIES;\n this.questions = props.QUESTIONS;\n this.replicationLag = props.REPLICATION_LAG;\n this.selectFullJoin = props.SELECT_FULL_JOIN;\n this.selectFullRangeJoin = props.SELECT_FULL_RANGE_JOIN;\n this.selectRange = props.SELECT_RANGE;\n this.selectRangeCheck = props.SELECT_RANGE_CHECK;\n this.selectScan = props.SELECT_SCAN;\n this.slowQueries = props.SLOW_QUERIES;\n this.threadsCached = props.THREADS_CACHED;\n this.threadsConnected = props.THREADS_CONNECTED;\n this.threadsCreated = props.THREADS_CREATED;\n this.threadsRunning = props.THREADS_RUNNING;\n this.wsrepFlowControlPaused = props.WSREP_FLOW_CONTROL_PAUSED;\n this.wsrepFlowControlPausedNs = props.WSREP_FLOW_CONTROL_PAUSED_NS;\n this.wsrepFlowControlRecv = props.WSREP_FLOW_CONTROL_RECV;\n this.wsrepFlowControlSent = props.WSREP_FLOW_CONTROL_SENT;\n this.wsrepLocalBfAborts = props.WSREP_LOCAL_BF_ABORTS;\n this.wsrepLocalRecvQueue = props.WSREP_LOCAL_RECV_QUEUE;\n this.wsrepLocalRecvQueueAvg = props.WSREP_LOCAL_RECV_QUEUE_AVG;\n this.wsrepLocalRcvQueueMax = props.WSREP_LOCAL_RECV_QUEUE_MAX;\n this.wsrepLocalRcvQueueMin = props.WSREP_LOCAL_RECV_QUEUE_MIN;\n this.wsrepLocalSendQueue = props.WSREP_LOCAL_SEND_QUEUE;\n this.wsrepLocalSendQueueAvg = props.WSREP_LOCAL_SEND_QUEUE_AVG;\n this.wsrepLocalSendQueueMax = props.WSREP_LOCAL_SEND_QUEUE_MAX;\n this.wsrepLocalSendQueueMin = props.WSREP_LOCAL_SEND_QUEUE_MIN;\n this.wsrepReceivedBytes = props.WSREP_RECEIVED_BYTES;\n this.wsrepReplicatedBytes = props.WSREP_REPLICATED_BYTES;\n this.wsrepReplDataBytes = props.WSREP_REPL_DATA_BYTES;\n this.wsrepReplKeysBytes = props.WSREP_REPL_KEYS_BYTES;\n this.wsrepReplOtherBytes = props.WSREP_REPL_OTHER_BYTES;\n this.blocksHit = props['blocks-hit'];\n this.blocksRead = props['blocks-read'];\n this.commits = props.commits;\n this.connectionsMySql = props.CONNECTIONS;\n this.created = props.created;\n this.interval = props.interval;\n this.rollbacks = props.rollbacks;\n this.rowsDeleted = props['rows-deleted'];\n this.rowsFetched = props['rows-fetched'];\n this.rowsInserted = props['rows-inserted'];\n this.rowsUpdated = props['rows-updated'];\n this.sampleEnds = props.sampleends;\n this.sampleKey = props.samplekey;\n this.serverId = props.serverid;\n this.transactions = props.transactions;\n }\n}\n","import { useEffect, useState } from 'react';\nimport StatService from '../../services/StatService';\nimport CmonSqlStat from '../../types/CmonSqlStat';\n\nexport default function useSqlStatsCompare(\n uuid: string,\n nodes?: any[],\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState(undefined);\n\n const load = async () => {\n if (uuid && nodes && nodes.length > 0) {\n try {\n const details = await Promise.all(\n nodes.map((n: string) => {\n const [host, port] = n.split(':');\n return StatService.getSqlStats(\n uuid,\n host,\n parseInt(port, 10),\n from,\n to\n );\n })\n );\n setStats(\n details.map((d: any, i: number) => {\n return d.map((dd: any) => new CmonSqlStat(dd));\n })\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, [uuid, nodes, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport AppEmpty from '../../AppEmpty';\nimport styles from './MySqlDbCompareDashboard.module.less';\nimport { Col, Row } from 'antd';\nimport MysqlConnectionsChart from '../../ccx/charts/MysqlConnectionsChart';\nimport MysqlComDeleteChart from '../../ccx/charts/MysqlComDeleteChart';\nimport MysqlComReplaceChart from '../../ccx/charts/MysqlComReplaceChart';\nimport MysqlComSelectChart from '../../ccx/charts/MysqlComSelectChart';\nimport MysqlComUpdateChart from '../../ccx/charts/MysqlComUpdateChart';\nimport MysqlComInsertChart from '../../ccx/charts/MysqlComInsertChart';\nimport useSqlStatsCompare from '../../../core/hooks/useSqlStatsCompare';\n\ninterface Props {\n uuid: string;\n from?: string;\n to?: string;\n interval: number;\n hidden?: boolean;\n displaySummary?: boolean;\n selectedNodes: any[];\n}\n\nfunction MySqlDbCompareDashboard({\n uuid,\n from,\n to,\n interval,\n hidden,\n displaySummary,\n selectedNodes,\n}: Props): ReactElement {\n const {\n stats: sqlStats,\n refresh: sqlStatsRefresh,\n loading: sqlStatsLoading,\n } = useSqlStatsCompare(uuid, selectedNodes, from, to);\n const [sqlInterval, setSqlInterval] = useState(\n undefined\n );\n const [refreshInterval, setRefreshInterval] = useState(interval);\n\n useEffect(() => {\n let interval: any;\n if (sqlStats && refreshInterval > 0) {\n interval = setInterval(() => {\n sqlStatsRefresh();\n }, refreshInterval);\n setSqlInterval(interval);\n }\n return () => clearInterval(interval);\n }, [sqlStats, refreshInterval]);\n\n useEffect(() => {\n if (interval === 0) {\n // when interval is 0, we must pause the refresh (clear existing intervals)\n clearInterval(sqlInterval);\n setSqlInterval(0);\n }\n setRefreshInterval(interval);\n }, [interval]);\n\n useEffect(() => {\n if (hidden) {\n // clear interval to stop updating data if the tab is not active (charts are not visible)\n clearInterval(sqlInterval);\n setSqlInterval(0);\n } else if (sqlInterval === 0) {\n // force refresh if the interval is 0, otherwise, the interval will refresh data soon\n // interval is undefined on the first load\n // interval will be 0 when paused or tab is hidden\n sqlStatsRefresh();\n }\n }, [hidden]);\n\n return (\n
\n {selectedNodes.length > 0 ? (\n \n {selectedNodes.map((n: any, idx: number) => (\n \n

{n}

\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ))}\n \n ) : (\n \n )}\n
\n );\n}\n\nexport default MySqlDbCompareDashboard;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonSqlStat from '../../../types/CmonSqlStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonSqlStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PostgreSqlConnectionsChart({\n data,\n loading,\n displaySummary,\n testId = 'PostgreSqlConnectionsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value].toFixed(),\n max: max[s.value].toFixed(),\n sum: sum[s.value].toFixed(),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonSqlStat) => {\n return [\n {\n yValue: stat.connectionsPostgreSql,\n series: 'connections',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'connectionsPostgreSql',\n label: 'connections',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Connections',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return text;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PostgreSqlConnectionsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonSqlStat from '../../../types/CmonSqlStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonSqlStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PostgreSqlCommitsChart({\n data,\n loading,\n displaySummary,\n testId = 'PostgreSqlCommitsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value].toFixed(),\n max: max[s.value].toFixed(),\n sum: sum[s.value].toFixed(),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonSqlStat) => {\n return [\n {\n yValue: stat.commits,\n series: 'commits',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'commits',\n label: 'commits',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Commits',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return text;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PostgreSqlCommitsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonSqlStat from '../../../types/CmonSqlStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonSqlStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PostgreSqlRollbacksChart({\n data,\n loading,\n displaySummary,\n testId = 'PostgreSqlRollbacksChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value].toFixed(),\n max: max[s.value].toFixed(),\n sum: sum[s.value].toFixed(),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonSqlStat) => {\n return [\n {\n yValue: stat.rollbacks,\n series: 'rollbacks',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'rollbacks',\n label: 'rollbacks',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Rollbacks',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return text;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PostgreSqlRollbacksChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonSqlStat from '../../../types/CmonSqlStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonSqlStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PostgreSqlRowsDeletedChart({\n data,\n loading,\n displaySummary,\n testId = 'PostgreSqlRowsDeletedChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value].toFixed(),\n max: max[s.value].toFixed(),\n sum: sum[s.value].toFixed(),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonSqlStat) => {\n return [\n {\n yValue: stat.rowsDeleted,\n series: 'rows-deleted',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'rowsDeleted',\n label: 'rows-deleted',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Rows Deleted',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return text;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PostgreSqlRowsDeletedChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonSqlStat from '../../../types/CmonSqlStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonSqlStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PostgreSqlRowsFetchedChart({\n data,\n loading,\n displaySummary,\n testId = 'PostgreSqlRowsFetchedChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value].toFixed(),\n max: max[s.value].toFixed(),\n sum: sum[s.value].toFixed(),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonSqlStat) => {\n return [\n {\n yValue: stat.rowsFetched,\n series: 'rows-fetched',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'rowsFetched',\n label: 'rows-fetched',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Rows Fetched',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return text;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PostgreSqlRowsFetchedChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonSqlStat from '../../../types/CmonSqlStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonSqlStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PostgreSqlRowsInsertedChart({\n data,\n loading,\n displaySummary,\n testId = 'PostgreSqlRowsInsertedChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value].toFixed(),\n max: max[s.value].toFixed(),\n sum: sum[s.value].toFixed(),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonSqlStat) => {\n return [\n {\n yValue: stat.rowsInserted,\n series: 'rows-inserted',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'rowsInserted',\n label: 'rows-inserted',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Rows Inserted',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return text;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PostgreSqlRowsInsertedChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonSqlStat from '../../../types/CmonSqlStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonSqlStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PostgreSqlRowsUpdatedChart({\n data,\n loading,\n displaySummary,\n testId = 'PostgreSqlRowsUpdatedChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value].toFixed(),\n max: max[s.value].toFixed(),\n sum: sum[s.value].toFixed(),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonSqlStat) => {\n return [\n {\n yValue: stat.rowsUpdated,\n series: 'rows-updated',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'rowsUpdated',\n label: 'rows-updated',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Rows Updated',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return text;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PostgreSqlRowsUpdatedChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport AppEmpty from '../../AppEmpty';\nimport styles from './HostCompareDashboard.module.less';\nimport { Col, Row } from 'antd';\nimport useSqlStatsCompare from '../../../core/hooks/useSqlStatsCompare';\nimport PostgreSqlConnectionsChart from '../../ccx/charts/PostgreSqlConnectionsChart';\nimport PostgreSqlCommitsChart from '../../ccx/charts/PostgreSqlCommitsChart';\nimport PostgreSqlRollbacksChart from '../../ccx/charts/PostgreSqlRollbacksChart';\nimport PostgreSqlRowsDeletedChart from '../../ccx/charts/PostgreSqlRowsDeletedChart';\nimport PostgreSqlRowsFetchedChart from '../../ccx/charts/PostgreSqlRowsFetchedChart';\nimport PostgreSqlRowsInsertedChart from '../../ccx/charts/PostgreSqlRowsInsertedChart';\nimport PostgreSqlRowsUpdatedChart from '../../ccx/charts/PostgreSqlRowsUpdatedChart';\n\ninterface Props {\n uuid: string;\n from?: string;\n to?: string;\n interval: number;\n hidden?: boolean;\n displaySummary?: boolean;\n selectedNodes: any[];\n}\n\nfunction PostgreSqlDbCompareDashboard({\n uuid,\n from,\n to,\n interval,\n hidden,\n displaySummary,\n selectedNodes,\n}: Props): ReactElement {\n const {\n stats: sqlStats,\n refresh: sqlStatsRefresh,\n loading: sqlStatsLoading,\n } = useSqlStatsCompare(uuid, selectedNodes, from, to);\n const [sqlInterval, setSqlInterval] = useState(\n undefined\n );\n const [refreshInterval, setRefreshInterval] = useState(interval);\n\n useEffect(() => {\n let interval: any;\n if (sqlStats && refreshInterval > 0) {\n interval = setInterval(() => {\n sqlStatsRefresh();\n }, refreshInterval);\n setSqlInterval(interval);\n }\n return () => clearInterval(interval);\n }, [sqlStats, refreshInterval]);\n\n useEffect(() => {\n if (interval === 0) {\n // when interval is 0, we must pause the refresh (clear existing intervals)\n clearInterval(sqlInterval);\n setSqlInterval(0);\n }\n setRefreshInterval(interval);\n }, [interval]);\n\n useEffect(() => {\n if (hidden) {\n // clear interval to stop updating data if the tab is not active (charts are not visible)\n clearInterval(sqlInterval);\n setSqlInterval(0);\n } else if (sqlInterval === 0) {\n // force refresh if the interval is 0, otherwise, the interval will refresh data soon\n // interval is undefined on the first load\n // interval will be 0 when paused or tab is hidden\n sqlStatsRefresh();\n }\n }, [hidden]);\n\n return (\n
\n {selectedNodes.length > 0 ? (\n \n {selectedNodes.map((n: any, idx: number) => (\n \n

{n}

\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ))}\n \n ) : (\n \n )}\n
\n );\n}\n\nexport default PostgreSqlDbCompareDashboard;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport styles from './DbCompareDashboard.module.less';\nimport MySqlDbCompareDashboard from './MySqlDbCompareDashboard';\nimport PostgreSqlDbCompareDashboard from './PostgreSqlDbCompareDashboard';\nimport Deployment from '../../../types/Deployment';\n\ntype DbCompareDashboardProps = {\n uuid: string;\n from?: string;\n to?: string;\n interval: number;\n deployment?: Deployment;\n hidden?: boolean;\n displaySummary?: boolean;\n selectedNodes: any[];\n};\n\nfunction DbCompareDashboard({\n uuid,\n from,\n to,\n interval,\n deployment,\n hidden,\n displaySummary,\n selectedNodes,\n}: DbCompareDashboardProps): ReactElement {\n return (\n
\n {deployment?.isClusterPostgreSql() ? (\n
\n );\n}\n\nexport default DbCompareDashboard;\n","export type CmonProxySqlStatBackendApiProps = {\n ACTIVE_TRANSACTIONS: number;\n BACKEND_QUERY_TIME_NSEC: number;\n CLIENT_CONNECTIONS_ABORTED: number;\n CLIENT_CONNECTIONS_CONNECTED: number;\n CLIENT_CONNECTIONS_CREATED: number;\n COM_AUTOCOMMIT: number;\n COM_AUTOCOMMIT_FILTERED: number;\n COM_COMMIT: number;\n COM_COMMIT_FILTERED: number;\n COM_ROLLBACK: number;\n COM_ROLLBACK_FILTERED: number;\n CONNPOOL_MEMORY_BYTES: number;\n MYSQL_BACKEND_BUFFERS_BYTES: number;\n MYSQL_FRONTEND_BUFFERS_BYTES: number;\n MYSQL_MONITOR_WORKERS: number;\n MYSQL_SESSION_INTERNAL_BYTES: number;\n MYSQL_THREAD_WORKERS: number;\n QUERIES_BACKENDS_BYTES_RECV: number;\n QUERIES_BACKENDS_BYTES_SENT: number;\n QUERY_CACHE_BYTES_IN: number;\n QUERY_CACHE_BYTES_OUT: number;\n QUERY_CACHE_COUNT_GET: number;\n QUERY_CACHE_COUNT_GET_OK: number;\n QUERY_CACHE_COUNT_SET: number;\n QUERY_CACHE_ENTRIES: number;\n QUERY_CACHE_MEMORY_BYTES: number;\n QUERY_CACHE_PURGED: number;\n QUERY_PROCESSOR_TIME_NSEC: number;\n QUESTIONS: number;\n SERVERS_TABLE_VERSION: number;\n SERVER_CONNECTIONS_ABORTED: number;\n SERVER_CONNECTIONS_CONNECTED: number;\n SERVER_CONNECTIONS_CREATED: number;\n SLOW_QUERIES: number;\n SQLITE3_MEMORY_BYTES: number;\n created: number;\n interval: number;\n sampleends: number;\n samplekey: string;\n serverid: number;\n};\n\nexport default class CmonProxySqlStat {\n readonly activeTransactions: number;\n readonly backendQueryTimeNsec: number;\n readonly clientConnectionsAborted: number;\n readonly clientConnectionsConnected: number;\n readonly clientConnectionsCreated: number;\n readonly comAutoCommit: number;\n readonly comAutoCommitFiltered: number;\n readonly comCommit: number;\n readonly comCommitFiltered: number;\n readonly comRollback: number;\n readonly comRollbackFiltered: number;\n readonly connPoolMemoryBytes: number;\n readonly mysqlBackendBuffersBytes: number;\n readonly mysqlFrontendBuffersBytes: number;\n readonly mysqlMonitorWorkers: number;\n readonly mysqlSessionInternalBytes: number;\n readonly mysqlThreadWorkers: number;\n readonly queriesBackendsBytesRecv: number;\n readonly queriesBackendsBytesSent: number;\n readonly queryCacheBytesIn: number;\n readonly queryCacheBytesOut: number;\n readonly queryCacheCountGet: number;\n readonly queryCacheCountGetOk: number;\n readonly queryCacheCountSet: number;\n readonly queryCacheEntries: number;\n readonly queryCacheMemoryBytes: number;\n readonly queryCachePurged: number;\n readonly queryProcessorTimeNsec: number;\n readonly questions: number;\n readonly serversTableVersion: number;\n readonly serverConnectionsAborted: number;\n readonly serverConnectionsConnected: number;\n readonly serverConnectionsCreated: number;\n readonly slowQueries: number;\n readonly sqlite3MemoryBytes: number;\n\n readonly created: number;\n readonly interval: number;\n readonly sampleEnds: number;\n readonly sampleKey: string;\n readonly serverId: number;\n\n constructor(props: CmonProxySqlStatBackendApiProps) {\n this.activeTransactions = props.ACTIVE_TRANSACTIONS;\n this.backendQueryTimeNsec = props.BACKEND_QUERY_TIME_NSEC;\n this.clientConnectionsAborted = props.CLIENT_CONNECTIONS_ABORTED;\n this.clientConnectionsConnected = props.CLIENT_CONNECTIONS_CONNECTED;\n this.clientConnectionsCreated = props.CLIENT_CONNECTIONS_CREATED;\n this.comAutoCommit = props.COM_AUTOCOMMIT;\n this.comAutoCommitFiltered = props.COM_AUTOCOMMIT_FILTERED;\n this.comCommit = props.COM_COMMIT;\n this.comCommitFiltered = props.COM_COMMIT_FILTERED;\n this.comRollback = props.COM_ROLLBACK;\n this.comRollbackFiltered = props.COM_ROLLBACK_FILTERED;\n this.connPoolMemoryBytes = props.CONNPOOL_MEMORY_BYTES;\n this.mysqlBackendBuffersBytes = props.MYSQL_BACKEND_BUFFERS_BYTES;\n this.mysqlFrontendBuffersBytes = props.MYSQL_FRONTEND_BUFFERS_BYTES;\n this.mysqlMonitorWorkers = props.MYSQL_MONITOR_WORKERS;\n this.mysqlSessionInternalBytes = props.MYSQL_SESSION_INTERNAL_BYTES;\n this.mysqlThreadWorkers = props.MYSQL_THREAD_WORKERS;\n this.queriesBackendsBytesRecv = props.QUERIES_BACKENDS_BYTES_RECV;\n this.queriesBackendsBytesSent = props.QUERIES_BACKENDS_BYTES_SENT;\n this.queryCacheBytesIn = props.QUERY_CACHE_BYTES_IN;\n this.queryCacheBytesOut = props.QUERY_CACHE_BYTES_OUT;\n this.queryCacheCountGet = props.QUERY_CACHE_COUNT_GET;\n this.queryCacheCountGetOk = props.QUERY_CACHE_COUNT_GET_OK;\n this.queryCacheCountSet = props.QUERY_CACHE_COUNT_SET;\n this.queryCacheEntries = props.QUERY_CACHE_ENTRIES;\n this.queryCacheMemoryBytes = props.QUERY_CACHE_MEMORY_BYTES;\n this.queryCachePurged = props.QUERY_CACHE_PURGED;\n this.queryProcessorTimeNsec = props.QUERY_PROCESSOR_TIME_NSEC;\n this.questions = props.QUESTIONS;\n this.serversTableVersion = props.SERVERS_TABLE_VERSION;\n this.serverConnectionsAborted = props.SERVER_CONNECTIONS_ABORTED;\n this.serverConnectionsConnected = props.SERVER_CONNECTIONS_CONNECTED;\n this.serverConnectionsCreated = props.SERVER_CONNECTIONS_CREATED;\n this.slowQueries = props.SLOW_QUERIES;\n this.sqlite3MemoryBytes = props.SQLITE3_MEMORY_BYTES;\n\n this.created = props.created;\n this.interval = props.interval;\n this.sampleEnds = props.sampleends;\n this.sampleKey = props.samplekey;\n this.serverId = props.serverid;\n }\n}\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonProxySqlStat from '../../../types/CmonProxySqlStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonProxySqlStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction ProxySqlQuestionsChart({\n data,\n loading,\n displaySummary,\n testId = 'ProxySqlQuestionsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value].toFixed(),\n max: max[s.value].toFixed(),\n sum: sum[s.value].toFixed(),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonProxySqlStat) => {\n return [\n {\n yValue: stat.questions,\n series: 'questions',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'questions',\n label: 'questions',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Questions',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return text;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default ProxySqlQuestionsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonProxySqlStat from '../../../types/CmonProxySqlStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonProxySqlStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction ProxySqlSlowQueriesChart({\n data,\n loading,\n displaySummary,\n testId = 'ProxySqlSlowQueriesChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value].toFixed(),\n max: max[s.value].toFixed(),\n sum: sum[s.value].toFixed(),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonProxySqlStat) => {\n return [\n {\n yValue: stat.slowQueries,\n series: 'slow_queries',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'slowQueries',\n label: 'slow_queries',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Slow queries',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return text;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default ProxySqlSlowQueriesChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonProxySqlStat from '../../../types/CmonProxySqlStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonProxySqlStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction ProxySqlActiveTransactionsChart({\n data,\n loading,\n displaySummary,\n testId = 'ProxySqlActiveTransactionsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value].toFixed(),\n max: max[s.value].toFixed(),\n sum: sum[s.value].toFixed(),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonProxySqlStat) => {\n return [\n {\n yValue: stat.activeTransactions,\n series: 'active_transactions',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'activeTransactions',\n label: 'active_transactions',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Active transactions',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return text;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default ProxySqlActiveTransactionsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonProxySqlStat from '../../../types/CmonProxySqlStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonProxySqlStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction ProxySqlQueryCacheMemoryBytesChart({\n data,\n loading,\n displaySummary,\n testId = 'ProxySqlQueryCacheMemoryBytesChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value].toFixed(),\n max: max[s.value].toFixed(),\n sum: sum[s.value].toFixed(),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonProxySqlStat) => {\n return [\n {\n yValue: stat.queryCacheMemoryBytes,\n series: 'query_cache_memory_bytes',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'queryCacheMemoryBytes',\n label: 'query_cache_memory_bytes',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Query cache - memory used by result sets',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return text;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default ProxySqlQueryCacheMemoryBytesChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonProxySqlStat from '../../../types/CmonProxySqlStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonProxySqlStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction ProxySqlClientConnectionsChart({\n data,\n loading,\n displaySummary,\n testId = 'ProxySqlClientConnectionsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value].toFixed(),\n max: max[s.value].toFixed(),\n sum: sum[s.value].toFixed(),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonProxySqlStat) => {\n return [\n {\n yValue: stat.clientConnectionsAborted,\n series: 'client_connections_aborted',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.clientConnectionsConnected,\n series: 'client_connections_connected',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.clientConnectionsCreated,\n series: 'client_connections_created',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'clientConnectionsAborted',\n label: 'client_connections_aborted',\n },\n {\n value: 'clientConnectionsConnected',\n label: 'client_connections_connected',\n },\n {\n value: 'clientConnectionsCreated',\n label: 'client_connections_created',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Client connections',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return text;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default ProxySqlClientConnectionsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonProxySqlStat from '../../../types/CmonProxySqlStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonProxySqlStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction ProxySqlServerConnectionsChart({\n data,\n loading,\n displaySummary,\n testId = 'ProxySqlServerConnectionsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value].toFixed(),\n max: max[s.value].toFixed(),\n sum: sum[s.value].toFixed(),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonProxySqlStat) => {\n return [\n {\n yValue: stat.serverConnectionsAborted,\n series: 'server_connections_aborted',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.serverConnectionsConnected,\n series: 'server_connections_connected',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.serverConnectionsCreated,\n series: 'server_connections_created',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'serverConnectionsAborted',\n label: 'server_connections_aborted',\n },\n {\n value: 'serverConnectionsConnected',\n label: 'server_connections_connected',\n },\n {\n value: 'serverConnectionsCreated',\n label: 'server_connections_created',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Server connections',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return text;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default ProxySqlServerConnectionsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport AppEmpty from '../../AppEmpty';\nimport styles from './ProxySqlLbCompareDashboard.module.less';\nimport { Col, Row } from 'antd';\nimport useProxySqlStatsCompare from '../../../core/hooks/useProxySqlStatsCompare';\nimport ProxySqlQuestionsChart from '../../ccx/charts/ProxySqlQuestionsChart';\nimport ProxySqlSlowQueriesChart from '../../ccx/charts/ProxySqlSlowQueriesChart';\nimport ProxySqlActiveTransactionsChart from '../../ccx/charts/ProxySqlActiveTransactionsChart';\nimport ProxySqlQueryCacheMemoryBytesChart from '../../ccx/charts/ProxySqlQueryCacheMemoryBytesChart';\nimport ProxySqlClientConnectionsChart from '../../ccx/charts/ProxySqlClientConnectionsChart';\nimport ProxySqlServerConnectionsChart from '../../ccx/charts/ProxySqlServerConnectionsChart';\n\ninterface Props {\n uuid: string;\n from?: string;\n to?: string;\n interval: number;\n hidden?: boolean;\n displaySummary?: boolean;\n selectedNodes: any[];\n}\n\nfunction ProxySqlLbCompareDashboard({\n uuid,\n from,\n to,\n interval,\n hidden,\n displaySummary,\n selectedNodes,\n}: Props): ReactElement {\n const {\n stats: proxySqlStats,\n refresh: proxySqlStatsRefresh,\n loading: proxySqlStatsLoading,\n } = useProxySqlStatsCompare(uuid, selectedNodes, from, to);\n const [sqlInterval, setSqlInterval] = useState(\n undefined\n );\n const [refreshInterval, setRefreshInterval] = useState(interval);\n\n useEffect(() => {\n let interval: any;\n if (proxySqlStats && refreshInterval > 0) {\n interval = setInterval(() => {\n proxySqlStatsRefresh();\n }, refreshInterval);\n setSqlInterval(interval);\n }\n return () => clearInterval(interval);\n }, [proxySqlStats, refreshInterval]);\n\n useEffect(() => {\n if (interval === 0) {\n // when interval is 0, we must pause the refresh (clear existing intervals)\n clearInterval(sqlInterval);\n setSqlInterval(0);\n }\n setRefreshInterval(interval);\n }, [interval]);\n\n useEffect(() => {\n if (hidden) {\n // clear interval to stop updating data if the tab is not active (charts are not visible)\n clearInterval(sqlInterval);\n setSqlInterval(0);\n } else if (sqlInterval === 0) {\n // force refresh if the interval is 0, otherwise, the interval will refresh data soon\n // interval is undefined on the first load\n // interval will be 0 when paused or tab is hidden\n proxySqlStatsRefresh();\n }\n }, [hidden]);\n\n return (\n
\n {selectedNodes.length > 0 ? (\n \n {selectedNodes.map((n: any, idx: number) => (\n \n

{n}

\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ))}\n \n ) : (\n \n )}\n
\n );\n}\n\nexport default ProxySqlLbCompareDashboard;\n","import { useEffect, useState } from 'react';\nimport StatService from '../../services/StatService';\nimport CmonProxySqlStat from '../../types/CmonProxySqlStat';\n\nexport default function useProxySqlStatsCompareCompare(\n uuid: string,\n nodes?: any[],\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState(undefined);\n\n const load = async () => {\n if (uuid && nodes && nodes.length > 0) {\n try {\n const details = await Promise.all(\n nodes.map((n: string) => {\n const [host, port] = n.split(':');\n return StatService.getProxySqlStats(\n uuid,\n host,\n parseInt(port, 10),\n from,\n to\n );\n })\n );\n setStats(\n details.map((d: any, i: number) => {\n return d.map((dd: any) => new CmonProxySqlStat(dd));\n })\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, [uuid, nodes, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","export type CmonHaProxyStatBackendApiProps = {\n bin: number;\n bout: number;\n comp_byp: number;\n comp_in: number;\n comp_out: number;\n comp_rsp: number;\n conn_rate: number;\n conn_rate_max: number;\n conn_tot: number;\n created: number;\n dcon: number;\n dreq: number;\n dresp: number;\n dses: number;\n ereq: number;\n hrsp_1xx: number;\n hrsp_2xx: number;\n hrsp_3xx: number;\n hrsp_4xx: number;\n hrsp_5xx: number;\n hrsp_other: number;\n iid: number;\n intercepted: number;\n interval: number;\n mode: string;\n pid: number;\n pxname: string;\n rate: number;\n rate_lim: number;\n rate_max: number;\n req_rate: number;\n req_rate_max: number;\n req_tot: number;\n sampleends: number;\n samplekey: string;\n scur: number;\n serverid: number;\n sid: number;\n slim: number;\n smax: number;\n status: string;\n stot: number;\n svname: string;\n type: number;\n};\n\nexport default class CmonHaProxyStat {\n readonly bIn: number;\n readonly bOut: number;\n readonly compByp: number;\n readonly compIn: number;\n readonly compOut: number;\n readonly compRsp: number;\n readonly connRate: number;\n readonly connRateMax: number;\n readonly connTot: number;\n readonly created: number;\n readonly dCon: number;\n readonly dReq: number;\n readonly dResp: number;\n readonly dSes: number;\n readonly eReq: number;\n readonly hrsp1xx: number;\n readonly hrsp2xx: number;\n readonly hrsp3xx: number;\n readonly hrsp4xx: number;\n readonly hrsp5xx: number;\n readonly hrspOther: number;\n readonly iId: number;\n readonly intercepted: number;\n readonly interval: number;\n readonly mode: string;\n readonly pid: number;\n readonly pxName: string;\n readonly rate: number;\n readonly rateLim: number;\n readonly rateMax: number;\n readonly reqRate: number;\n readonly reqRateMax: number;\n readonly reqTot: number;\n readonly sampleEnds: number;\n readonly sampleKey: string;\n readonly scur: number;\n readonly serverId: number;\n readonly sId: number;\n readonly sLim: number;\n readonly sMax: number;\n readonly status: string;\n readonly sTot: number;\n readonly svName: string;\n readonly type: number;\n\n constructor(props: CmonHaProxyStatBackendApiProps) {\n this.bIn = props.bin;\n this.bOut = props.bout;\n this.compByp = props.comp_byp;\n this.compIn = props.comp_in;\n this.compOut = props.comp_out;\n this.compRsp = props.comp_rsp;\n this.connRate = props.conn_rate;\n this.connRateMax = props.conn_rate_max;\n this.connTot = props.conn_tot;\n this.created = props.created;\n this.dCon = props.dcon;\n this.dReq = props.dreq;\n this.dResp = props.dresp;\n this.dSes = props.dses;\n this.eReq = props.ereq;\n this.hrsp1xx = props.hrsp_1xx;\n this.hrsp2xx = props.hrsp_2xx;\n this.hrsp3xx = props.hrsp_3xx;\n this.hrsp4xx = props.hrsp_4xx;\n this.hrsp5xx = props.hrsp_5xx;\n this.hrspOther = props.hrsp_other;\n this.iId = props.iid;\n this.intercepted = props.intercepted;\n this.interval = props.interval;\n this.mode = props.mode;\n this.pid = props.pid;\n this.pxName = props.pxname;\n this.rate = props.rate;\n this.rateLim = props.rate_lim;\n this.rateMax = props.rate_max;\n this.reqRate = props.req_rate;\n this.reqRateMax = props.req_rate_max;\n this.reqTot = props.req_tot;\n this.sampleEnds = props.sampleends;\n this.sampleKey = props.samplekey;\n this.scur = props.scur;\n this.serverId = props.serverid;\n this.sId = props.sid;\n this.sLim = props.slim;\n this.sMax = props.smax;\n this.status = props.status;\n this.sTot = props.stot;\n this.svName = props.svname;\n this.type = props.type;\n }\n\n isFrontend() {\n return this.svName === 'FRONTEND';\n }\n\n isBackend() {\n return this.svName === 'BACKEND';\n }\n}\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CmonHaProxyStat from '../../../types/CmonHaProxyStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport prettyBytes from 'pretty-bytes';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonHaProxyStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction HaProxyFrontendTrafficChart({\n data,\n loading,\n displaySummary,\n testId = 'HaProxyFrontendTrafficChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: prettyBytes(avg[s.value]),\n min: prettyBytes(min[s.value]),\n max: prettyBytes(max[s.value]),\n sum: prettyBytes(sum[s.value]),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data\n .filter((stat: CmonHaProxyStat) => {\n return stat.isFrontend();\n })\n .map((stat: CmonHaProxyStat) => {\n return [\n {\n yValue: stat.bIn,\n series: `Bytes In`,\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.bOut,\n series: `Bytes Out`,\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'bIn',\n label: 'Bytes In',\n },\n {\n value: 'bOut',\n label: 'Bytes Out',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Frontend Traffic',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return prettyBytes(parseInt(text, 10));\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: prettyBytes(parseInt(d?.data?.yValue, 10)),\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default HaProxyFrontendTrafficChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CmonHaProxyStat from '../../../types/CmonHaProxyStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport prettyBytes from 'pretty-bytes';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonHaProxyStat[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction HaProxyBackendTrafficChart({\n data,\n loading,\n displaySummary,\n testId = 'HaProxyBackendTrafficChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: prettyBytes(avg[s.value]),\n min: prettyBytes(min[s.value]),\n max: prettyBytes(max[s.value]),\n sum: prettyBytes(sum[s.value]),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data\n .filter((stat: CmonHaProxyStat) => {\n return stat.isBackend();\n })\n .map((stat: CmonHaProxyStat) => {\n return [\n {\n yValue: stat.bIn,\n series: `Bytes In`,\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.bOut,\n series: `Bytes Out`,\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'bIn',\n label: 'Bytes In',\n },\n {\n value: 'bOut',\n label: 'Bytes Out',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Backend Traffic',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return prettyBytes(parseInt(text, 10));\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: prettyBytes(parseInt(d?.data?.yValue, 10)),\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default HaProxyBackendTrafficChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport AppEmpty from '../../AppEmpty';\nimport styles from './HaProxyLbCompareDashboard.module.less';\nimport { Col, Row } from 'antd';\nimport useHaProxyStatsCompare from '../../../core/hooks/useHaProxyStatsCompare';\nimport HaProxyFrontendTrafficChart from '../../ccx/charts/HaProxyFrontendTrafficChart';\nimport HaProxyBackendTrafficChart from '../../ccx/charts/HaProxyBackendTrafficChart';\n\ninterface Props {\n uuid: string;\n from?: string;\n to?: string;\n interval: number;\n hidden?: boolean;\n displaySummary?: boolean;\n selectedNodes: any[];\n}\n\nfunction HaProxyLbCompareDashboard({\n uuid,\n from,\n to,\n interval,\n hidden,\n displaySummary,\n selectedNodes,\n}: Props): ReactElement {\n const {\n stats: haProxyStats,\n refresh: haProxyStatsRefresh,\n loading: haProxyStatsLoading,\n } = useHaProxyStatsCompare(uuid, selectedNodes, from, to);\n const [sqlInterval, setSqlInterval] = useState(\n undefined\n );\n const [refreshInterval, setRefreshInterval] = useState(interval);\n\n useEffect(() => {\n let interval: any;\n if (haProxyStats && refreshInterval > 0) {\n interval = setInterval(() => {\n haProxyStatsRefresh();\n }, refreshInterval);\n setSqlInterval(interval);\n }\n return () => clearInterval(interval);\n }, [haProxyStats, refreshInterval]);\n\n useEffect(() => {\n if (interval === 0) {\n // when interval is 0, we must pause the refresh (clear existing intervals)\n clearInterval(sqlInterval);\n setSqlInterval(0);\n }\n setRefreshInterval(interval);\n }, [interval]);\n\n useEffect(() => {\n if (hidden) {\n // clear interval to stop updating data if the tab is not active (charts are not visible)\n clearInterval(sqlInterval);\n setSqlInterval(0);\n } else if (sqlInterval === 0) {\n // force refresh if the interval is 0, otherwise, the interval will refresh data soon\n // interval is undefined on the first load\n // interval will be 0 when paused or tab is hidden\n haProxyStatsRefresh();\n }\n }, [hidden]);\n\n return (\n
\n {selectedNodes.length > 0 ? (\n \n {selectedNodes.map((n: any, idx: number) => (\n \n

{n}

\n\n \n \n \n \n \n \n \n \n \n ))}\n \n ) : (\n \n )}\n
\n );\n}\n\nexport default HaProxyLbCompareDashboard;\n","import { useEffect, useState } from 'react';\nimport StatService from '../../services/StatService';\nimport CmonHaProxyStat from '../../types/CmonHaProxyStat';\n\nexport default function useHaProxyStatsCompare(\n uuid: string,\n nodes?: any[],\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState(undefined);\n\n const load = async () => {\n if (uuid && nodes && nodes.length > 0) {\n try {\n const details = await Promise.all(\n nodes.map((n: string) => {\n const [host, port] = n.split(':');\n return StatService.getHaProxyStats(\n uuid,\n host,\n parseInt(port, 10),\n from,\n to\n );\n })\n );\n setStats(\n details.map((d: any, i: number) => {\n return d.map((dd: any) => new CmonHaProxyStat(dd));\n })\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, [uuid, nodes, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import React, { ReactElement } from 'react';\nimport styles from './LbCompareDashboard.module.less';\nimport Deployment from '../../../types/Deployment';\nimport ProxySqlLbCompareDashboard from './ProxySqlLbCompareDashboard';\nimport HaProxyLbCompareDashboard from './HaProxyLbCompareDashboard';\n\ntype LbCompareDashboardProps = {\n uuid: string;\n from?: string;\n to?: string;\n interval: number;\n deployment?: Deployment;\n hidden?: boolean;\n displaySummary?: boolean;\n selectedNodes: any[];\n};\n\nfunction LbCompareDashboard({\n uuid,\n from,\n to,\n interval,\n deployment,\n hidden,\n displaySummary,\n selectedNodes,\n}: LbCompareDashboardProps): ReactElement {\n return (\n
\n {deployment?.isClusterPostgreSql() ? (\n
\n );\n}\n\nexport default LbCompareDashboard;\n","import { PageViews, CustomEvent } from '@piwikpro/react-piwik-pro';\nimport { isProdEnv } from '../helpers';\n\nconst usePiwikPro = () => {\n const trackPageView = (pageName: string) => {\n if (isProdEnv()) {\n PageViews.trackPageView(pageName);\n }\n };\n\n const trackEvent = (category: string, action: string, name?: string) => {\n if (isProdEnv()) {\n CustomEvent.trackEvent(category, action, name);\n }\n };\n\n return { trackPageView, trackEvent };\n};\n\nexport default usePiwikPro;\n","// Pages\nexport const LANDING_PAGE = 'Landing_page';\nexport const ACCOUNT_PAGE = 'Account_page';\nexport const ORGANIZATIONS_PAGE = 'Organizations_page';\nexport const INITIATED_ADDING_NEW_DATASTORE = 'Initiated_Adding_New_Datastore';\nexport const INITIATED_ADDING_NEW_VPC = 'Initiated_Adding_New_VPC';\nexport const ERROR_404_PAGE = 'Error_404_Page';\nexport const DEPLOYMENT_COMPARE_PAGE = 'Deployment_Compare_Page';\nexport const DATASTORE_TAB = 'DataStore_tab_';\nexport const OPEN_COMMON_MODAL_FORM = 'Open_Common_Modal_Form_';\nexport const CANCEL_COMMON_MODAL_FORM = 'Cancel_Common_Modal_Form_';\n\n// Events\nexport const CLICK_EVENT = 'click';\n\n// Event Actions\nexport const DATASTORE_BACKUP_SETTINGS_UPDATED =\n 'datastore_backup_settings_updated';\nexport const DATASTORE_ADDING_TRUSTED_SOURCE =\n 'datastore_adding_trusted_source';\nexport const DATASTORE_ADDED_TRUSTED_SOURCE_FIREWALL_SUCCESSFULLY =\n 'datastore_added_trusted_source_firewall_successfully';\nexport const DATASTORE_ADDED_TRUSTED_SOURCE_FIREWALL_FAILED =\n 'datastore_added_trusted_source_firewall_failed';\nexport const DATASTORE_ADDED_DB_PARAMETERS = 'datastore_added_db_parameters';\nexport const DATASTORE_FAILED_TO_ADD_DB_PARAMETERS =\n 'datastore_failed_to_add_db_parameters';\nexport const DATASTORE_ADDED_NEW_DB_PARAMETERS =\n 'datastore_added_new_db_parameters';\nexport const DATASTORE_ADDING_DATABASE_TRIGGERED_SUCCESSFULLY =\n 'datastore_adding_database_triggered_successfully';\nexport const DATASTORE_ADDING_DATABASE_TRIGGERED_FAILED =\n 'datastore_adding_database_triggered_failed';\nexport const DATASTORE_DB_USER_ALREADY_EXISTS =\n 'datastore_db_user_already_exists';\nexport const DATASTORE_ADD_NEW_DB_USER_TRIGGERED_SUCCESSFULLY =\n 'datastore_new_db_user_triggered_successfully';\nexport const DATASTORE_ADD_NEW_DB_USER_TRIGGERED_FAILED =\n 'datastore_new_db_user_trggered_failed';\nexport const DATASTORE_UPDATE_DB_USER_TRIGGERED_SUCCESSFULLY =\n 'datastore_update_db_user_triggered_successfully';\nexport const DATASTORE_UPDATE_DB_USER_TRIGGERED_FAILED =\n 'datastore_update_db_user_trggered_failed';\nexport const CREATE_NEW_DATASTORE_SUCCESS = 'create_new_datastore_success';\nexport const CREATE_NEW_DATASTORE_ERROR = 'create_new_datastore_error';\nexport const CREATE_NEW_VPC_SUCCESS = 'create_new_vpc_success';\nexport const CREATE_NEW_VPC_ERROR = 'create_new_vpc_error';\nexport const DATASTORE_UPGRADING_STORAGE_TRIGGERED_SUCCESSFULLY =\n 'datastore_upgrading_storage_triggered_successfully';\nexport const DATASTORE_UPGRADING_STORAGE_TRIGGERED_FAILED =\n 'datastore_upgrading_storage_triggered_failed';\nexport const OPEN_DATASTORE_SCALE_NODES_MODAL =\n 'open_datastore_scale_nodes_modal';\nexport const OPEN_DATASTORE_UPGRADE_STORAGE_MODAL =\n 'open_datastore_upgrade_storage_modal';\nexport const DATASTORE_SACLING_NODES_TRIGGERED_SUCCESSFULLY =\n 'datastore_sacling_nodes_triggered';\nexport const DATASTORE_SACLING_NODES_TRIGGERED_FAILED =\n 'datastore_sacling_nodes_triggered_failed';\nexport const DATASTORE_EXTEND_STORAGE_TRIGGERED_SUCCESSFULLY =\n 'datastore_extend_storage_triggered_successfully';\nexport const DATASTORE_EXTEND_STORAGE_TRIGGERED_FAILED =\n 'datastore_extend_storage_triggered_failed';\nexport const ADDING_NEW_CARD_TRIGGERED_SUCCESSFULLY =\n 'adding_new_card_triggered_successfully';\nexport const ADDING_NEW_CARD_TRIGGERED_FAILED =\n 'adding_new_card_triggered_failed';\nexport const DATASTORE_ADDING_VPC_PEERING_SUCCESSFULLY =\n 'datastore_adding_vpc_peering_successfully';\nexport const DATASTORE_ADDING_VPC_PEERING_FAILED =\n 'datastore_adding_vpc_peering_failed';\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport styles from './DeploymentCompare.module.less';\nimport { Card, Tabs } from 'antd';\nimport { StickyContainer, Sticky } from 'react-sticky';\nimport { withRouter, useParams } from 'react-router-dom';\nimport AppLabeledComponent from '../../ccx/common/AppLabeledComponent';\nimport AppRangePicker from '../../ccx/common/AppRangePicker';\nimport DeploymentDashboardOptions from '../dashboard/DeploymentDashboardOptions';\nimport { Select } from 'antd';\nimport useDataStore from '../../../core/hooks/useDataStore';\nimport DbNode from '../../../types/DbNode';\nimport HostCompareDashboard from './HostCompareDashboard';\nimport DbCompareDashboard from './DbCompareDashboard';\nimport LbCompareDashboard from './LbCompareDashboard';\nimport { message } from 'antd';\nimport dayjs from 'dayjs';\nimport usePiwikPro from '../../../core/hooks/usePiwikPro';\nimport { DEPLOYMENT_COMPARE_PAGE } from '../../../core/PiwikConstants';\n\ninterface Props {}\n\ninterface UrlProps {\n dataStoreUuid: string;\n projectUuid: string;\n tab: string;\n}\n\nfunction DeploymentCompare({}: Props): ReactElement {\n const { dataStoreUuid, projectUuid, tab } = useParams();\n const { dataStore: deployment } = useDataStore(dataStoreUuid);\n const { trackPageView } = usePiwikPro();\n const [refreshInterval, setRefreshInterval] = useState(15000);\n const [displaySummary, setDisplaySummary] = useState(false);\n const [rangeFrom, setRangeFrom] = useState(undefined);\n const [rangeTo, setRangeTo] = useState(undefined);\n const [range, setRange] = useState('30m');\n const [currentTab, setCurrentTab] = useState('host');\n const [selectedNodes, setSelectedNodes] = useState([]);\n const [availableNodes, setAvailableNodes] = useState({\n hosts: [],\n dbNodes: [],\n });\n const [field, setField] = useState(undefined);\n\n const fieldSetup = {\n placeholder: 'Select up to 3 Hosts or Nodes to compare',\n disabled: false,\n options: [],\n };\n\n useEffect(() => {\n trackPageView(DEPLOYMENT_COMPARE_PAGE);\n }, []);\n\n useEffect(() => {\n // selectFirstInstanceHost();\n if (deployment) {\n // load avialable db nodes\n const availableDbNodes = deployment\n .getDbNodes()\n .map((n: DbNode) => {\n return {\n value: `${n.privateIp}:${n.port}`,\n label: n.getFqdnPort(),\n };\n });\n\n const filteredDbHosts = availableDbNodes.map((n: any) => {\n return { value: n.value, label: n.label.split(':')[0] };\n });\n\n const availableHosts = filteredDbHosts;\n\n setAvailableNodes({\n hosts: availableHosts,\n dbNodes: availableDbNodes,\n });\n }\n }, [deployment]);\n\n useEffect(() => {\n if (availableNodes) {\n const newField = fieldSetup;\n switch (currentTab) {\n case 'db':\n newField.options = availableNodes.dbNodes;\n setField(newField);\n break;\n case 'host':\n default:\n newField.options = availableNodes.hosts;\n setField(newField);\n }\n }\n }, [availableNodes, currentTab]);\n\n const handleIntervalChange = (interval: number) => {\n setRefreshInterval(interval * 1000);\n };\n\n const handleDisplaySummaryChange = (value: boolean) => {\n setDisplaySummary(value);\n };\n\n const handleRangeChange = (from: any, to?: number) => {\n // from and to parameters are set only for custom ranges\n if (to && from) {\n setRangeTo(dayjs(to * 1000).format());\n setRangeFrom(dayjs(from * 1000).format());\n setRange('custom');\n } else {\n // must unset \"to\" when only \"from\" was passed\n setRangeTo(undefined);\n\n if (from) {\n // from is always passed, but in this case it's not a number but the value of the radio group\n // which is a string like '1d'\n const minutes = 1000 * 60;\n const hours = minutes * 60;\n const days = hours * 24;\n const date = new Date();\n\n switch (from) {\n case '30m':\n date.setTime(date.getTime() - 30 * minutes);\n break;\n case '1h':\n date.setTime(date.getTime() - 1 * hours);\n break;\n case '1d':\n date.setTime(date.getTime() - 1 * days);\n break;\n case '1w':\n date.setTime(date.getTime() - 7 * days);\n break;\n }\n\n setRangeFrom(date.toISOString());\n setRange(from);\n }\n }\n };\n\n const onTabChange = (t: any) => {\n setSelectedNodes([]);\n setCurrentTab(t);\n };\n\n const { TabPane } = Tabs;\n const { Option } = Select;\n\n const handleNodeChange = (value: any) => {\n if (value.length > 3) {\n message.error('Warning: Too many nodes have been selected.');\n return;\n }\n setSelectedNodes(value);\n };\n\n const extraTabContent = (\n
\n \n
\n \n option.children\n .toLowerCase()\n .indexOf(input.toLowerCase()) >= 0\n }\n >\n {field?.options.map((o: any) => {\n return (\n 3\n ? selectedNodes.includes(o.value)\n ? false\n : true\n : false\n }\n >\n {o.label}\n \n );\n })}\n \n
\n \n
\n );\n\n const renderTabBar = (props: any, DefaultTabBar: any) => (\n \n {({ style }: any) => (\n \n )}\n \n );\n\n return (\n \n \n
\n \n \n
\n \n \n \n \n
\n\n \n \n \n \n \n );\n}\n\nexport default withRouter(DeploymentCompare);\n","export type CloudProviderRegionClassProps = {\n code: string;\n name: string;\n country_code?: string;\n continent_code?: string;\n city: string;\n display_code?: string;\n countryCode?: string;\n continentCode?: string;\n displayCode?: string;\n preferredDisplayCode?: string;\n};\n\nexport interface CloudProviderRegionInterface {\n code: string;\n name: string;\n countryCode: string;\n continentCode: string;\n displayCode: string;\n city: string;\n}\n\nexport default class CloudProviderRegion\n implements CloudProviderRegionInterface\n{\n readonly code: string;\n readonly name: string;\n readonly countryCode: string;\n readonly continentCode: string;\n readonly city: string;\n readonly displayCode: string;\n\n constructor(props: CloudProviderRegionClassProps) {\n const map: { [key: string]: (keyof CloudProviderRegionClassProps)[] } =\n {\n countryCode: ['country_code', 'countryCode'],\n continentCode: ['continent_code', 'continentCode'],\n displayCode: ['display_code', 'displayCode'],\n };\n\n this.code = props.code;\n this.name = props.name;\n this.city = props.city;\n\n this.countryCode = this.getMappedValue(\n props,\n map.countryCode\n ).toLowerCase();\n this.continentCode = this.getMappedValue(props, map.continentCode);\n this.displayCode = this.getMappedValue(props, map.displayCode);\n }\n\n private getMappedValue(\n props: CloudProviderRegionClassProps,\n keys: (keyof CloudProviderRegionClassProps)[]\n ): string {\n for (const key of keys) {\n const value = props[key];\n if (value) {\n return value;\n }\n }\n return '';\n }\n}\n","import CloudProviderRegion, {\n CloudProviderRegionClassProps,\n} from '../types/CloudProviderRegion';\n\nexport const CLOUD_PROVIDER_AWS = 'aws';\nexport const CLOUD_PROVIDER_SAFESPRING = 'safespring';\nexport const CLOUD_PROVIDER_CITYCLOUD = 'citycloud';\nexport const CLOUD_PROVIDER_GOOGLECLOUD = 'gce';\nexport const CLOUD_PROVIDER_VMWARE = 'vmware';\nexport const CLOUD_PROVIDER_VULTR = 'vultr';\nexport const CLOUD_PROVIDER_LINTASARTA = 'lintasarta';\nexport const CLOUD_PROVIDER_ELASTX = 'elastx';\nexport const CLOUD_PROVIDER_SYSELEVEN = 'syseleven';\nexport const CLOUD_PROVIDER_GOOGLECLOUDPLATFORM = 'gcp';\nexport const CLOUD_PROVIDER_CLEURA_STO = 'cleura-sto';\nexport const CLOUD_PROVIDER_CLEURA_KNA = 'cleura-kna';\nexport const CLOUD_PROVIDER_CLEURA_FRA = 'cleura-fra';\nexport const CLOUD_PROVIDER_PAPPAYA = 'mycloud';\nexport const CLOUD_PROVIDER_KUBEVIRT = 'kubevirt';\n\nexport type CloudProviderClassProps = {\n code: string;\n name: string;\n full_name: string;\n regions: CloudProviderRegionClassProps[];\n logo: string;\n group: string;\n};\n\nexport interface CloudProviderInterface {\n code: string;\n name: string;\n regions: CloudProviderRegion[];\n logo: string;\n group: string;\n isAws: Function;\n isSafespring: Function;\n isCityCloud: Function;\n isGoogle: Function;\n isVultr: Function;\n getFullName: Function;\n}\n\nexport default class CloudProvider implements CloudProviderInterface {\n readonly code: string;\n readonly name: string;\n readonly regions: CloudProviderRegion[];\n readonly logo: string;\n readonly full_name: string;\n readonly group: string;\n\n constructor(props: CloudProviderClassProps) {\n this.code = props.code;\n this.name = props.name;\n this.full_name = props.full_name;\n this.regions = props.regions?.map(\n (r: CloudProviderRegionClassProps) => {\n return new CloudProviderRegion(r);\n }\n );\n this.logo = props.logo;\n this.group = props.group;\n }\n\n getCloudProviderLogo(): any {\n return this.logo;\n }\n\n isAws(): boolean {\n return this.code === CLOUD_PROVIDER_AWS;\n }\n\n isSafespring(): boolean {\n return this.code === CLOUD_PROVIDER_SAFESPRING;\n }\n\n isCityCloud(): boolean {\n return this.code === CLOUD_PROVIDER_CITYCLOUD;\n }\n\n isGoogle(): boolean {\n return this.code === CLOUD_PROVIDER_GOOGLECLOUD;\n }\n\n isVMWare(): boolean {\n return this.code === CLOUD_PROVIDER_VMWARE;\n }\n\n isKubevirt(): boolean {\n return this.code === CLOUD_PROVIDER_KUBEVIRT;\n }\n\n isVultr(): boolean {\n return this.code === CLOUD_PROVIDER_VULTR;\n }\n\n isLintasarta(): boolean {\n return this.code === CLOUD_PROVIDER_LINTASARTA;\n }\n\n isElastx(): boolean {\n return this.code === CLOUD_PROVIDER_ELASTX;\n }\n\n isSyseleven(): boolean {\n return this.code === CLOUD_PROVIDER_SYSELEVEN;\n }\n\n isPappaya(): boolean {\n return this.code === CLOUD_PROVIDER_PAPPAYA;\n }\n\n isOpenStack(): boolean {\n return (\n this.isLintasarta() ||\n this.isSafespring() ||\n this.isElastx() ||\n this.isSyseleven()\n );\n }\n\n getFullName(): string {\n if (this.full_name) {\n return this.full_name;\n }\n\n switch (this.code) {\n case CLOUD_PROVIDER_AWS:\n return 'Amazon Web Services';\n case CLOUD_PROVIDER_SAFESPRING:\n return 'Safespring';\n case CLOUD_PROVIDER_CITYCLOUD:\n return 'City Cloud';\n case CLOUD_PROVIDER_GOOGLECLOUD:\n return 'Google Cloud Computing';\n case CLOUD_PROVIDER_VULTR:\n return 'Vultr';\n case CLOUD_PROVIDER_LINTASARTA:\n return 'Lintasarta';\n case CLOUD_PROVIDER_ELASTX:\n return 'Elastx';\n case CLOUD_PROVIDER_SYSELEVEN:\n return 'Syseleven';\n case CLOUD_PROVIDER_GOOGLECLOUDPLATFORM:\n return 'Google Cloud Platform';\n case CLOUD_PROVIDER_CLEURA_STO:\n case CLOUD_PROVIDER_CLEURA_KNA:\n case CLOUD_PROVIDER_CLEURA_FRA:\n return 'Cleura';\n default:\n return this.name || 'Unknown';\n }\n }\n\n getRegionContinents(): string[] {\n const allContinents = this.regions.map(\n (value: CloudProviderRegion) => value.continentCode\n );\n\n return Array.from(new Set(allContinents));\n }\n getDefaultRegion(): CloudProviderRegion {\n return this.regions[0];\n }\n}\n","export type CountryClassProps = {\n code: string;\n name: string;\n};\n\nexport interface CountryInterface {\n code: string;\n name: string;\n}\n\nexport default class Country implements CountryInterface {\n readonly code: string;\n readonly name: string;\n\n constructor(props: CountryClassProps) {\n this.code = props.code;\n this.name = props.name;\n }\n}\n","import ApiService from './ApiService';\nimport CloudProvider, { CloudProviderClassProps } from '../types/CloudProvider';\nimport Country, { CountryClassProps } from '../types/Country';\nimport { API_CONTENT } from '../core/CcxEnv';\nimport DeploymentOptions from '../types/DeploymentOptions';\nimport InstanceSize from '../types/InstanceSize';\n\n// constants\nconst API_URL = API_CONTENT;\n\ntype ContentProps = {\n countries: Country[];\n cloudProviders: CloudProvider[];\n};\n\nexport type InstanceSizeItemProps = {\n size: string;\n label: string;\n cpu: number;\n ram: number;\n};\n\nexport type InstanceSizeProps = {\n region: string;\n development: InstanceSize[];\n production: InstanceSize[];\n};\n\nexport default class ContentService extends ApiService {\n /**\n * Get list of CIDRs.\n */\n static async getCidrs(): Promise {\n return await this.request('GET', `cidrs`);\n }\n\n /**\n * Get list of cloud providers.\n */\n static async getProviders(): Promise {\n const response = await this.request('GET', `cloud-providers`);\n return response?.map(\n (r: CloudProviderClassProps) => new CloudProvider(r)\n );\n }\n\n /**\n * Get list of countries.\n */\n static async getCountries(): Promise {\n const response = await this.request('GET', `countries`);\n return response?.map((r: CountryClassProps) => new Country(r));\n }\n\n /**\n * Get client public ip.\n */\n static async getClientIp(): Promise {\n const response = await this.request('GET', `ip`);\n return response?.ip;\n }\n\n /**\n * Return list of instance type / sizes.\n * @TODO: This is hardcoded now\n */\n static async getInstanceSize(\n cloudCode: string\n ): Promise {\n return await this.request('GET', `instances/${cloudCode}`);\n }\n\n /**\n * Return logic data to use on the deployment wizard.\n */\n static async getDeploymentWizardOptions(): Promise {\n return await this.request('GET', `deploy-wizard`);\n }\n\n protected static getApiUrl() {\n return API_URL;\n }\n}\n","import { useEffect, useState } from 'react';\nimport ContentService from '../../services/ContentService';\nimport CloudProvider from '../../types/CloudProvider';\n\nexport default function useContentProviders() {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n const [cloudProviders, setCloudProviders] = useState<\n CloudProvider[] | undefined\n >(undefined);\n\n const load = async () => {\n if (cloudProviders) {\n // this is some sort of caching for the content api. Data form the content api will not change\n // so we only fetch once. After that, we return the previous values (cache)\n return;\n }\n\n try {\n const providerList = await ContentService.getProviders();\n setCloudProviders(providerList);\n setLoading(false);\n setError(null);\n } catch (e: any) {\n setLoading(false);\n setError(e);\n }\n };\n\n const refresh = () => {\n load();\n };\n\n useEffect(() => {\n refresh();\n }, []);\n\n return { cloudProviders, refresh, loading, error };\n}\n","import styles from './StretchedClick.module.less';\n\nexport type StretchedClickProps = {\n handleClick?: (...args: any[]) => void;\n};\n\nconst StretchedClick = ({ handleClick }: StretchedClickProps) => {\n return
;\n};\n\nexport default StretchedClick;\n","import React, { ReactElement, useState } from 'react';\nimport { Modal, Space } from 'antd';\nimport { ExclamationCircleOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport styles from './AppConfirmDialog.module.less';\nimport { Input, Alert, message, Form, Tooltip } from 'antd';\nimport CcxComponentProps from '../core/CcxComponent';\nimport classNames from 'classnames';\nimport StretchedClick from './common/StretchedClick';\n\ninterface Props extends CcxComponentProps {\n icon?: any;\n title?: any;\n alertTitle?: any;\n content: string;\n onOk?: Function;\n onCancel?: Function;\n stretchedClick?: boolean;\n label?: React.ReactNode;\n tooltip?: React.ReactNode;\n actionIcon?: any;\n confirmPhrase?: string;\n confirmHintText?: string;\n confirmPlaceholder?: string;\n disabled?: boolean;\n critical?: boolean;\n inLined?: boolean;\n}\n\nfunction AppConfirmDialog({\n icon,\n title,\n alertTitle,\n content,\n onOk,\n onCancel,\n stretchedClick = false,\n label,\n tooltip,\n actionIcon,\n confirmPhrase,\n confirmHintText,\n confirmPlaceholder,\n disabled,\n testId = 'AppConfirmDialog',\n critical,\n inLined = false,\n}: Props): ReactElement {\n const { confirm } = Modal;\n const [visible, setVisible] = useState(false);\n const [form] = Form.useForm();\n\n const handleClickIcon = () => {\n if (disabled) {\n return;\n }\n\n if (!confirmPhrase) {\n confirm({\n title: title || `Are you sure?`,\n icon: icon ?? (\n \n ),\n className: styles.AppConfirmationModal,\n content,\n onOk() {\n onOk && onOk();\n },\n onCancel() {\n onCancel && onCancel();\n },\n });\n } else {\n setVisible(true);\n }\n };\n\n const verifyMatch = (value: string) => {\n return value === confirmPhrase;\n };\n\n const handleOk = () => {\n const phrase = form.getFieldValue('confirmation');\n if (verifyMatch(phrase)) {\n setVisible(false);\n form.setFieldsValue({ confirmation: '' });\n onOk && onOk();\n } else {\n message.error(\n 'Incorrect confirmation. Did you enter the correct value?'\n );\n }\n };\n\n const handleCancel = () => {\n setVisible(false);\n onCancel && onCancel();\n };\n\n const handleKeyUpEvent = (event: any) => {\n if (event.key === 'Enter') {\n handleOk();\n }\n };\n\n return (\n <>\n {stretchedClick && }\n\n {inLined ? (\n {\n if (stretchedClick) return;\n handleClickIcon();\n }}\n >\n Delete\n \n ) : (\n {\n if (stretchedClick) return;\n handleClickIcon();\n }}\n data-testid={`${testId}IconLabel`}\n >\n {tooltip ? (\n \n \n {actionIcon}\n {label}\n \n \n ) : label ? (\n \n {actionIcon}\n {label}\n \n ) : (\n {actionIcon}\n )}\n \n )}\n\n {visible ? (\n \n \n {alertTitle || 'Warning'}\n \n }\n description={\n \n {content}\n \n }\n type=\"warning\"\n showIcon={true}\n />\n
\n

\n {confirmHintText}\n

\n \n \n \n \n \n \n ) : null}\n \n );\n}\n\nexport default AppConfirmDialog;\n","export default class Helpers {\n public static capitalizeFirstLetter(text: string): string {\n return text.charAt(0).toUpperCase() + text.slice(1);\n }\n}\n","import Helpers from '../services/Helpers';\nimport { VpcDTO } from '../sdk/VpcApi';\nimport { Subnet } from '../sdk/vpc/typescript-axios';\n\nexport type VpcClassProps = VpcDTO & {};\n\nexport enum VpcStatus {\n OK = 'AVAILABLE',\n ERROR = 'NOT_AVAILABLE',\n WARNING = 'WARNING',\n}\n\nexport interface VpcInterface {\n id: string;\n name: string;\n cloudspace?: string;\n cloud: string;\n region: string;\n project?: string;\n cidrIpv4Block: string;\n state?: string;\n stateMessage?: string;\n datastores?: number;\n subnets?: { [key: string]: Subnet };\n isStatusOk: Function;\n isStatusError: Function;\n isStatusWarning: Function;\n getCidrIpv4Block: Function;\n getName: Function;\n getState: Function;\n getStatusMessage: Function;\n vpc_name: string;\n}\n\nexport default class Vpc implements VpcInterface {\n readonly id: string;\n readonly name: string;\n readonly cloudspace?: string;\n readonly cloud: string;\n readonly region: string;\n readonly project?: string;\n readonly cidrIpv4Block: string;\n readonly state?: string;\n readonly stateMessage?: string;\n readonly datastores?: number;\n readonly subnets?: { [key: string]: Subnet };\n readonly vpc_name!: string;\n\n constructor(props: VpcClassProps | any) {\n this.id = props.id || props.vpc_uuid;\n this.name = props.name;\n this.cloudspace = props.cloudspace;\n this.cloud = props.cloud;\n this.region = props.region;\n this.project = props.project;\n this.cidrIpv4Block = props.cidr_ipv4_block;\n this.state = props.state;\n this.stateMessage = props.state_message;\n this.datastores = props.datastores;\n this.subnets = props.subnets;\n this.vpc_name = props.vpc_name;\n }\n\n getVpcName(): string {\n return this.vpc_name;\n }\n\n isStatusOk() {\n return this.state?.toUpperCase() === VpcStatus.OK;\n }\n\n isStatusError() {\n return this.state?.toUpperCase() === VpcStatus.ERROR;\n }\n\n getName(): string {\n return this.name;\n }\n\n isStatusWarning() {\n return this.state?.toUpperCase() === VpcStatus.WARNING;\n }\n\n getStatusMessage() {\n return Helpers.capitalizeFirstLetter(this.stateMessage || '');\n }\n\n getCidrIpv4Block() {\n return this.cidrIpv4Block;\n }\n\n getState() {\n return this.state;\n }\n\n getVpcStatus(): string {\n if (this.isStatusOk()) return 'Available';\n if (this.isStatusWarning()) return 'Warning';\n if (this.isStatusError()) return 'Not available';\n if (!this.stateMessage)\n return Helpers.capitalizeFirstLetter(this.state || '');\n return this.getStatusMessage();\n }\n}\n","export type VpcAwsAvailabilityZoneClassProps = {\n id: string;\n name: string;\n region: string;\n};\n\nexport interface VpcAwsAvailabilityZoneInterface {\n availabilityZoneId: string;\n name: string;\n region: string;\n}\n\nexport default class VpcAwsAvailabilityZone\n implements VpcAwsAvailabilityZoneInterface\n{\n readonly availabilityZoneId: string;\n readonly name: string;\n readonly region: string;\n\n constructor(props: VpcAwsAvailabilityZoneClassProps) {\n this.availabilityZoneId = props.id;\n this.name = props.name;\n this.region = props.region;\n }\n}\n","export type VpcAwsSubnetClassProps = {\n availability_zone: string;\n availability_zone_id: string;\n available_ip_address_count: number;\n cidr_ipv4_block: string;\n default_for_az: boolean;\n state: string;\n subnet_id: string;\n vpc_id: string;\n};\n\nexport interface VpcAwsSubnetInterface {\n availabilityZone: string;\n availabilityZoneId: string;\n availableIpAddressCount: number;\n cidrIpv4Block: string;\n defaultForAz: boolean;\n state: string;\n subnetId: string;\n vpcId: string;\n}\n\nexport default class VpcAwsSubnet implements VpcAwsSubnetInterface {\n readonly availabilityZone: string;\n readonly availabilityZoneId: string;\n readonly availableIpAddressCount: number;\n readonly cidrIpv4Block: string;\n readonly defaultForAz: boolean;\n readonly state: string;\n readonly subnetId: string;\n readonly vpcId: string;\n\n constructor(props: VpcAwsSubnetClassProps) {\n this.availableIpAddressCount = props.available_ip_address_count;\n this.availabilityZone = props.availability_zone;\n this.availabilityZoneId = props.availability_zone_id;\n this.cidrIpv4Block = props.cidr_ipv4_block;\n this.defaultForAz = props.default_for_az;\n this.state = props.state;\n this.subnetId = props.subnet_id;\n this.vpcId = props.vpc_id;\n }\n}\n","import Vpc, { VpcClassProps, VpcInterface } from './Vpc';\nimport VpcPeeringData, {\n VpcPeeringDataClassProps,\n VpcPeeringDataInterface,\n} from './VpcPeeringData';\nimport { VpcPeeringDTO } from '../sdk/VpcApi';\n// import {ApiVpcPeeringInterface} from \"../services/VpcService\";\n\nexport enum VpcPeeringState {\n ACTIVE = 'ACTIVE',\n FAILED = 'FAILED',\n EXPIRED = 'EXPIRED',\n PROVISIONING = 'PROVISIONING',\n DELETING = 'DELETING',\n REJECTED = 'REJECTED',\n PENDING = 'PENDING-ACCEPTANCE',\n DELETED = 'DELETED',\n}\n\ntype VpcPerringClassProps = VpcPeeringDTO & {\n vpc_id: string;\n};\n\nexport interface VpcPeeringInterface {\n id?: string;\n targetCloudRegion?: string;\n targetCloudUserId?: string;\n targetCloudVpcId?: string;\n targetCidr?: string;\n state?: VpcPeeringState;\n stateMessage?: string;\n\n getCidrIpv4Block: Function;\n isStatusOk: Function;\n isStatusError: Function;\n isStatusWarning: Function;\n getStatus: Function;\n getStatusMessage: Function;\n isStatusDeleted: Function;\n isStatusDeleting: Function;\n isStatusPending: Function;\n}\n\nexport default class VpcPeering implements VpcPeeringInterface {\n readonly id?: string;\n readonly targetCloudRegion?: string;\n readonly targetCloudUserId?: string;\n readonly targetCloudVpcId?: string;\n readonly targetCidr?: string;\n readonly state?: VpcPeeringState;\n readonly stateMessage?: string;\n readonly vpcId: string;\n\n constructor(props: VpcPerringClassProps) {\n this.id = props.id;\n this.targetCloudRegion = props.target_cloud_region;\n this.targetCloudUserId = props.target_cloud_user_id;\n this.targetCloudVpcId = props.target_cloud_vpc_id;\n this.targetCidr = props.target_cidr;\n this.state = props.state?.toUpperCase() as VpcPeeringState;\n this.stateMessage = props.state_message;\n this.vpcId = props.vpc_id;\n }\n\n getStatus() {\n return this.state;\n }\n\n getCidrIpv4Block() {\n return this.targetCidr;\n }\n\n isStatusOk() {\n return this.state === VpcPeeringState.ACTIVE;\n }\n\n isStatusError() {\n return [\n VpcPeeringState.FAILED,\n VpcPeeringState.EXPIRED,\n VpcPeeringState.REJECTED,\n ].includes(this.state as VpcPeeringState);\n }\n\n isStatusWarning() {\n return [\n VpcPeeringState.DELETED,\n VpcPeeringState.DELETING,\n VpcPeeringState.PROVISIONING,\n ].includes(this.state as VpcPeeringState);\n }\n\n isStatusDeleted() {\n return this.state === VpcPeeringState.DELETED;\n }\n\n isStatusDeleting() {\n return this.state === VpcPeeringState.DELETING;\n }\n\n isStatusPending() {\n return this.state === VpcPeeringState.PENDING;\n }\n getStatusMessage() {\n return this.stateMessage;\n }\n\n getExpirationTime() {\n throw new Error('Method not implemented.');\n }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * CCX VPC Service\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: v2.0.0\n * Contact: support@severalnines.com\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport type { Configuration } from './configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport type { AxiosPromise, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport globalAxios from 'axios';\n\nexport const BASE_PATH = 'https://ccx.s9s-dev.net/api/vpc/api/v2'.replace(\n /\\/+$/,\n ''\n);\n\n/**\n *\n * @export\n */\nexport const COLLECTION_FORMATS = {\n csv: ',',\n ssv: ' ',\n tsv: '\\t',\n pipes: '|',\n};\n\n/**\n *\n * @export\n * @interface RequestArgs\n */\nexport interface RequestArgs {\n url: string;\n options: AxiosRequestConfig;\n}\n\n/**\n *\n * @export\n * @class BaseAPI\n */\nexport class BaseAPI {\n protected configuration: Configuration | undefined;\n\n constructor(\n configuration?: Configuration,\n protected basePath: string = BASE_PATH,\n protected axios: AxiosInstance = globalAxios\n ) {\n if (configuration) {\n this.configuration = configuration;\n this.basePath = configuration.basePath || this.basePath;\n }\n }\n}\n\n/**\n *\n * @export\n * @class RequiredError\n * @extends {Error}\n */\nexport class RequiredError extends Error {\n constructor(public field: string, msg?: string) {\n super(msg);\n this.name = 'RequiredError';\n }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * CCX VPC Service\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: v2.0.0\n * Contact: support@severalnines.com\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport type { Configuration } from './configuration';\nimport type { RequestArgs } from './base';\nimport type { AxiosInstance, AxiosResponse } from 'axios';\nimport { RequiredError } from './base';\n\n/**\n *\n * @export\n */\nexport const DUMMY_BASE_URL = 'https://example.com';\n\n/**\n *\n * @throws {RequiredError}\n * @export\n */\nexport const assertParamExists = function (\n functionName: string,\n paramName: string,\n paramValue: unknown\n) {\n if (paramValue === null || paramValue === undefined) {\n throw new RequiredError(\n paramName,\n `Required parameter ${paramName} was null or undefined when calling ${functionName}.`\n );\n }\n};\n\n/**\n *\n * @export\n */\nexport const setApiKeyToObject = async function (\n object: any,\n keyParamName: string,\n configuration?: Configuration\n) {\n if (configuration && configuration.apiKey) {\n const localVarApiKeyValue =\n typeof configuration.apiKey === 'function'\n ? await configuration.apiKey(keyParamName)\n : await configuration.apiKey;\n object[keyParamName] = localVarApiKeyValue;\n }\n};\n\n/**\n *\n * @export\n */\nexport const setBasicAuthToObject = function (\n object: any,\n configuration?: Configuration\n) {\n if (configuration && (configuration.username || configuration.password)) {\n object['auth'] = {\n username: configuration.username,\n password: configuration.password,\n };\n }\n};\n\n/**\n *\n * @export\n */\nexport const setBearerAuthToObject = async function (\n object: any,\n configuration?: Configuration\n) {\n if (configuration && configuration.accessToken) {\n const accessToken =\n typeof configuration.accessToken === 'function'\n ? await configuration.accessToken()\n : await configuration.accessToken;\n object['Authorization'] = 'Bearer ' + accessToken;\n }\n};\n\n/**\n *\n * @export\n */\nexport const setOAuthToObject = async function (\n object: any,\n name: string,\n scopes: string[],\n configuration?: Configuration\n) {\n if (configuration && configuration.accessToken) {\n const localVarAccessTokenValue =\n typeof configuration.accessToken === 'function'\n ? await configuration.accessToken(name, scopes)\n : await configuration.accessToken;\n object['Authorization'] = 'Bearer ' + localVarAccessTokenValue;\n }\n};\n\nfunction setFlattenedQueryParams(\n urlSearchParams: URLSearchParams,\n parameter: any,\n key: string = ''\n): void {\n if (parameter == null) return;\n if (typeof parameter === 'object') {\n if (Array.isArray(parameter)) {\n (parameter as any[]).forEach((item) =>\n setFlattenedQueryParams(urlSearchParams, item, key)\n );\n } else {\n Object.keys(parameter).forEach((currentKey) =>\n setFlattenedQueryParams(\n urlSearchParams,\n parameter[currentKey],\n `${key}${key !== '' ? '.' : ''}${currentKey}`\n )\n );\n }\n } else {\n if (urlSearchParams.has(key)) {\n urlSearchParams.append(key, parameter);\n } else {\n urlSearchParams.set(key, parameter);\n }\n }\n}\n\n/**\n *\n * @export\n */\nexport const setSearchParams = function (url: URL, ...objects: any[]) {\n const searchParams = new URLSearchParams(url.search);\n setFlattenedQueryParams(searchParams, objects);\n url.search = searchParams.toString();\n};\n\n/**\n *\n * @export\n */\nexport const serializeDataIfNeeded = function (\n value: any,\n requestOptions: any,\n configuration?: Configuration\n) {\n const nonString = typeof value !== 'string';\n const needsSerialization =\n nonString && configuration && configuration.isJsonMime\n ? configuration.isJsonMime(requestOptions.headers['Content-Type'])\n : nonString;\n return needsSerialization\n ? JSON.stringify(value !== undefined ? value : {})\n : value || '';\n};\n\n/**\n *\n * @export\n */\nexport const toPathString = function (url: URL) {\n return url.pathname + url.search + url.hash;\n};\n\n/**\n *\n * @export\n */\nexport const createRequestFunction = function (\n axiosArgs: RequestArgs,\n globalAxios: AxiosInstance,\n BASE_PATH: string,\n configuration?: Configuration\n) {\n return >(\n axios: AxiosInstance = globalAxios,\n basePath: string = BASE_PATH\n ) => {\n const axiosRequestArgs = {\n ...axiosArgs.options,\n url: (configuration?.basePath || basePath) + axiosArgs.url,\n };\n return axios.request(axiosRequestArgs);\n };\n};\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * CCX VPC Service\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: v2.0.0\n * Contact: support@severalnines.com\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport type { Configuration } from './configuration';\nimport type { AxiosPromise, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport globalAxios from 'axios';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport {\n DUMMY_BASE_URL,\n assertParamExists,\n setApiKeyToObject,\n setBasicAuthToObject,\n setBearerAuthToObject,\n setOAuthToObject,\n setSearchParams,\n serializeDataIfNeeded,\n toPathString,\n createRequestFunction,\n} from './common';\nimport type { RequestArgs } from './base';\n// @ts-ignore\nimport { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError } from './base';\n\n/**\n * Error response\n * @export\n * @interface ErrorResponse\n */\nexport interface ErrorResponse {\n /**\n * Error code\n * @type {number}\n * @memberof ErrorResponse\n */\n code?: number;\n /**\n * Error message\n * @type {string}\n * @memberof ErrorResponse\n */\n err: string;\n}\n/**\n * A subnet in a VPC\n * @export\n * @interface Subnet\n */\nexport interface Subnet {\n /**\n * Cloud availability zone\n * @type {string}\n * @memberof Subnet\n */\n availability_zone?: string;\n /**\n * Subnet state\n * @type {string}\n * @memberof Subnet\n */\n state?: string;\n}\n/**\n * VPC object\n * @export\n * @interface Vpc\n */\nexport interface Vpc {\n /**\n * ID of the VPC\n * @type {string}\n * @memberof Vpc\n */\n id: string;\n /**\n * User chosen name\n * @type {string}\n * @memberof Vpc\n */\n name: string;\n /**\n * Full descriptor of the cloud space containing the VPC\n * @type {string}\n * @memberof Vpc\n */\n cloudspace?: string;\n /**\n * Cloud provider code\n * @type {string}\n * @memberof Vpc\n */\n cloud: string;\n /**\n * Cloud provider region code\n * @type {string}\n * @memberof Vpc\n */\n region: string;\n /**\n * Cloud project ID, if exists\n * @type {string}\n * @memberof Vpc\n */\n project?: string;\n /**\n * IPv4 CIDR\n * @type {string}\n * @memberof Vpc\n */\n cidr_ipv4_block: string;\n /**\n * VPC state\n * @type {string}\n * @memberof Vpc\n */\n state?: string;\n /**\n * More verbose status message\n * @type {string}\n * @memberof Vpc\n */\n state_message?: string;\n /**\n * Number of data stores using this VPC\n * @type {number}\n * @memberof Vpc\n */\n datastores?: number;\n /**\n * Subnets of a VPC\n * @type {{ [key: string]: Subnet; }}\n * @memberof Vpc\n */\n subnets?: { [key: string]: Subnet };\n}\n/**\n * VPC Peering connection\n * @export\n * @interface VpcPeering\n */\nexport interface VpcPeering {\n /**\n * Peering ID\n * @type {string}\n * @memberof VpcPeering\n */\n id?: string;\n /**\n * Cloud region code of the target VPC to peer to\n * @type {string}\n * @memberof VpcPeering\n */\n target_cloud_region?: string;\n /**\n * Target VPC\\'s owner account ID\n * @type {string}\n * @memberof VpcPeering\n */\n target_cloud_user_id?: string;\n /**\n * Target VPC\\'s cloud ID\n * @type {string}\n * @memberof VpcPeering\n */\n target_cloud_vpc_id?: string;\n /**\n * Target VPC\\'s IPv4 CIRD\n * @type {string}\n * @memberof VpcPeering\n */\n target_cidr?: string;\n /**\n * Status of the peering connection\n * @type {string}\n * @memberof VpcPeering\n */\n state?: string;\n /**\n * More verbose status message\n * @type {string}\n * @memberof VpcPeering\n */\n state_message?: string;\n}\n/**\n *\n * @export\n * @interface VpcsGet200Response\n */\nexport interface VpcsGet200Response {\n /**\n *\n * @type {number}\n * @memberof VpcsGet200Response\n */\n count?: number;\n /**\n *\n * @type {Array}\n * @memberof VpcsGet200Response\n */\n vpcs?: Array;\n}\n/**\n *\n * @export\n * @interface VpcsPost201Response\n */\nexport interface VpcsPost201Response {\n /**\n *\n * @type {Vpc}\n * @memberof VpcsPost201Response\n */\n vpc?: Vpc;\n}\n/**\n *\n * @export\n * @interface VpcsPostRequest\n */\nexport interface VpcsPostRequest {\n /**\n * VPC name\n * @type {string}\n * @memberof VpcsPostRequest\n */\n name?: string;\n /**\n * Cloud provider code - for basic usage, just set cloud/region\n * @type {string}\n * @memberof VpcsPostRequest\n */\n cloudspace?: string;\n /**\n * Cloud provider code\n * @type {string}\n * @memberof VpcsPostRequest\n */\n cloud?: string;\n /**\n * Cloud region code\n * @type {string}\n * @memberof VpcsPostRequest\n */\n region?: string;\n /**\n * IPv4 CIDR\n * @type {string}\n * @memberof VpcsPostRequest\n */\n cidr_ipv4_block: string;\n}\n/**\n *\n * @export\n * @interface VpcsVpcIdPeeringsGet200Response\n */\nexport interface VpcsVpcIdPeeringsGet200Response {\n /**\n *\n * @type {Array}\n * @memberof VpcsVpcIdPeeringsGet200Response\n */\n peerings?: Array;\n}\n/**\n *\n * @export\n * @interface VpcsVpcIdPeeringsPost201Response\n */\nexport interface VpcsVpcIdPeeringsPost201Response {\n /**\n *\n * @type {VpcPeering}\n * @memberof VpcsVpcIdPeeringsPost201Response\n */\n peering?: VpcPeering;\n}\n/**\n *\n * @export\n * @interface VpcsVpcIdPeeringsPostRequest\n */\nexport interface VpcsVpcIdPeeringsPostRequest {\n /**\n * IPv4 CIDR\n * @type {string}\n * @memberof VpcsVpcIdPeeringsPostRequest\n */\n target_cidr?: string;\n /**\n * Cloud region code\n * @type {string}\n * @memberof VpcsVpcIdPeeringsPostRequest\n */\n target_cloud_region?: string;\n /**\n * Cloud account ID\n * @type {string}\n * @memberof VpcsVpcIdPeeringsPostRequest\n */\n target_cloud_user_id?: string;\n /**\n * Cloud provider\\'s VPC ID\n * @type {string}\n * @memberof VpcsVpcIdPeeringsPostRequest\n */\n target_cloud_vpc_id?: string;\n}\n\n/**\n * VPCApi - axios parameter creator\n * @export\n */\nexport const VPCApiAxiosParamCreator = function (\n configuration?: Configuration\n) {\n return {\n /**\n * Can be optionally filtered by cloud provider and/or region\n * @summary Lists VPCs accessible to the user\n * @param {string} [cloud] The cloud provider code\n * @param {string} [region] Cloud region code\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n vpcsGet: async (\n cloud?: string,\n region?: string,\n options: AxiosRequestConfig = {}\n ): Promise => {\n const localVarPath = `/vpcs`;\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = {\n method: 'GET',\n ...baseOptions,\n ...options,\n };\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication cookieAuth required\n\n if (cloud !== undefined) {\n localVarQueryParameter['cloud'] = cloud;\n }\n\n if (region !== undefined) {\n localVarQueryParameter['region'] = region;\n }\n\n setSearchParams(localVarUrlObj, localVarQueryParameter);\n let headersFromBaseOptions =\n baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {\n ...localVarHeaderParameter,\n ...headersFromBaseOptions,\n ...options.headers,\n };\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n /**\n *\n * @summary Creates a new VPC\n * @param {VpcsPostRequest} vpcsPostRequest Create VPC request - needs either cloudspace, or cloud+region\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n vpcsPost: async (\n vpcsPostRequest: VpcsPostRequest,\n options: AxiosRequestConfig = {}\n ): Promise => {\n // verify required parameter 'vpcsPostRequest' is not null or undefined\n assertParamExists('vpcsPost', 'vpcsPostRequest', vpcsPostRequest);\n const localVarPath = `/vpcs`;\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = {\n method: 'POST',\n ...baseOptions,\n ...options,\n };\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication cookieAuth required\n\n localVarHeaderParameter['Content-Type'] = 'application/json';\n\n setSearchParams(localVarUrlObj, localVarQueryParameter);\n let headersFromBaseOptions =\n baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {\n ...localVarHeaderParameter,\n ...headersFromBaseOptions,\n ...options.headers,\n };\n localVarRequestOptions.data = serializeDataIfNeeded(\n vpcsPostRequest,\n localVarRequestOptions,\n configuration\n );\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n /**\n *\n * @summary Removes a VPC\n * @param {string} vpcId\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n vpcsVpcIdDelete: async (\n vpcId: string,\n options: AxiosRequestConfig = {}\n ): Promise => {\n // verify required parameter 'vpcId' is not null or undefined\n assertParamExists('vpcsVpcIdDelete', 'vpcId', vpcId);\n const localVarPath = `/vpcs/{vpc_id}`.replace(\n `{${'vpc_id'}}`,\n encodeURIComponent(String(vpcId))\n );\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = {\n method: 'DELETE',\n ...baseOptions,\n ...options,\n };\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication cookieAuth required\n\n setSearchParams(localVarUrlObj, localVarQueryParameter);\n let headersFromBaseOptions =\n baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {\n ...localVarHeaderParameter,\n ...headersFromBaseOptions,\n ...options.headers,\n };\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n /**\n *\n * @summary Returns VPC details\n * @param {string} vpcId\n * @param {boolean} [update] Whether to force update of status fields\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n vpcsVpcIdGet: async (\n vpcId: string,\n update?: boolean,\n options: AxiosRequestConfig = {}\n ): Promise => {\n // verify required parameter 'vpcId' is not null or undefined\n assertParamExists('vpcsVpcIdGet', 'vpcId', vpcId);\n const localVarPath = `/vpcs/{vpc_id}`.replace(\n `{${'vpc_id'}}`,\n encodeURIComponent(String(vpcId))\n );\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = {\n method: 'GET',\n ...baseOptions,\n ...options,\n };\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication cookieAuth required\n\n if (update !== undefined) {\n localVarQueryParameter['update'] = update;\n }\n\n setSearchParams(localVarUrlObj, localVarQueryParameter);\n let headersFromBaseOptions =\n baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {\n ...localVarHeaderParameter,\n ...headersFromBaseOptions,\n ...options.headers,\n };\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n };\n};\n\n/**\n * VPCApi - functional programming interface\n * @export\n */\nexport const VPCApiFp = function (configuration?: Configuration) {\n const localVarAxiosParamCreator = VPCApiAxiosParamCreator(configuration);\n return {\n /**\n * Can be optionally filtered by cloud provider and/or region\n * @summary Lists VPCs accessible to the user\n * @param {string} [cloud] The cloud provider code\n * @param {string} [region] Cloud region code\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async vpcsGet(\n cloud?: string,\n region?: string,\n options?: AxiosRequestConfig\n ): Promise<\n (\n axios?: AxiosInstance,\n basePath?: string\n ) => AxiosPromise\n > {\n const localVarAxiosArgs = await localVarAxiosParamCreator.vpcsGet(\n cloud,\n region,\n options\n );\n return createRequestFunction(\n localVarAxiosArgs,\n globalAxios,\n BASE_PATH,\n configuration\n );\n },\n /**\n *\n * @summary Creates a new VPC\n * @param {VpcsPostRequest} vpcsPostRequest Create VPC request - needs either cloudspace, or cloud+region\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async vpcsPost(\n vpcsPostRequest: VpcsPostRequest,\n options?: AxiosRequestConfig\n ): Promise<\n (\n axios?: AxiosInstance,\n basePath?: string\n ) => AxiosPromise\n > {\n const localVarAxiosArgs = await localVarAxiosParamCreator.vpcsPost(\n vpcsPostRequest,\n options\n );\n return createRequestFunction(\n localVarAxiosArgs,\n globalAxios,\n BASE_PATH,\n configuration\n );\n },\n /**\n *\n * @summary Removes a VPC\n * @param {string} vpcId\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async vpcsVpcIdDelete(\n vpcId: string,\n options?: AxiosRequestConfig\n ): Promise<\n (axios?: AxiosInstance, basePath?: string) => AxiosPromise\n > {\n const localVarAxiosArgs =\n await localVarAxiosParamCreator.vpcsVpcIdDelete(vpcId, options);\n return createRequestFunction(\n localVarAxiosArgs,\n globalAxios,\n BASE_PATH,\n configuration\n );\n },\n /**\n *\n * @summary Returns VPC details\n * @param {string} vpcId\n * @param {boolean} [update] Whether to force update of status fields\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async vpcsVpcIdGet(\n vpcId: string,\n update?: boolean,\n options?: AxiosRequestConfig\n ): Promise<\n (\n axios?: AxiosInstance,\n basePath?: string\n ) => AxiosPromise\n > {\n const localVarAxiosArgs =\n await localVarAxiosParamCreator.vpcsVpcIdGet(\n vpcId,\n update,\n options\n );\n return createRequestFunction(\n localVarAxiosArgs,\n globalAxios,\n BASE_PATH,\n configuration\n );\n },\n };\n};\n\n/**\n * VPCApi - factory interface\n * @export\n */\nexport const VPCApiFactory = function (\n configuration?: Configuration,\n basePath?: string,\n axios?: AxiosInstance\n) {\n const localVarFp = VPCApiFp(configuration);\n return {\n /**\n * Can be optionally filtered by cloud provider and/or region\n * @summary Lists VPCs accessible to the user\n * @param {string} [cloud] The cloud provider code\n * @param {string} [region] Cloud region code\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n vpcsGet(\n cloud?: string,\n region?: string,\n options?: any\n ): AxiosPromise {\n return localVarFp\n .vpcsGet(cloud, region, options)\n .then((request) => request(axios, basePath));\n },\n /**\n *\n * @summary Creates a new VPC\n * @param {VpcsPostRequest} vpcsPostRequest Create VPC request - needs either cloudspace, or cloud+region\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n vpcsPost(\n vpcsPostRequest: VpcsPostRequest,\n options?: any\n ): AxiosPromise {\n return localVarFp\n .vpcsPost(vpcsPostRequest, options)\n .then((request) => request(axios, basePath));\n },\n /**\n *\n * @summary Removes a VPC\n * @param {string} vpcId\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n vpcsVpcIdDelete(vpcId: string, options?: any): AxiosPromise {\n return localVarFp\n .vpcsVpcIdDelete(vpcId, options)\n .then((request) => request(axios, basePath));\n },\n /**\n *\n * @summary Returns VPC details\n * @param {string} vpcId\n * @param {boolean} [update] Whether to force update of status fields\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n vpcsVpcIdGet(\n vpcId: string,\n update?: boolean,\n options?: any\n ): AxiosPromise {\n return localVarFp\n .vpcsVpcIdGet(vpcId, update, options)\n .then((request) => request(axios, basePath));\n },\n };\n};\n\n/**\n * VPCApi - object-oriented interface\n * @export\n * @class VPCApi\n * @extends {BaseAPI}\n */\nexport class VPCApi extends BaseAPI {\n /**\n * Can be optionally filtered by cloud provider and/or region\n * @summary Lists VPCs accessible to the user\n * @param {string} [cloud] The cloud provider code\n * @param {string} [region] Cloud region code\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof VPCApi\n */\n public vpcsGet(\n cloud?: string,\n region?: string,\n options?: AxiosRequestConfig\n ) {\n return VPCApiFp(this.configuration)\n .vpcsGet(cloud, region, options)\n .then((request) => request(this.axios, this.basePath));\n }\n\n /**\n *\n * @summary Creates a new VPC\n * @param {VpcsPostRequest} vpcsPostRequest Create VPC request - needs either cloudspace, or cloud+region\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof VPCApi\n */\n public vpcsPost(\n vpcsPostRequest: VpcsPostRequest,\n options?: AxiosRequestConfig\n ) {\n return VPCApiFp(this.configuration)\n .vpcsPost(vpcsPostRequest, options)\n .then((request) => request(this.axios, this.basePath));\n }\n\n /**\n *\n * @summary Removes a VPC\n * @param {string} vpcId\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof VPCApi\n */\n public vpcsVpcIdDelete(vpcId: string, options?: AxiosRequestConfig) {\n return VPCApiFp(this.configuration)\n .vpcsVpcIdDelete(vpcId, options)\n .then((request) => request(this.axios, this.basePath));\n }\n\n /**\n *\n * @summary Returns VPC details\n * @param {string} vpcId\n * @param {boolean} [update] Whether to force update of status fields\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof VPCApi\n */\n public vpcsVpcIdGet(\n vpcId: string,\n update?: boolean,\n options?: AxiosRequestConfig\n ) {\n return VPCApiFp(this.configuration)\n .vpcsVpcIdGet(vpcId, update, options)\n .then((request) => request(this.axios, this.basePath));\n }\n}\n\n/**\n * VPCPeeringApi - axios parameter creator\n * @export\n */\nexport const VPCPeeringApiAxiosParamCreator = function (\n configuration?: Configuration\n) {\n return {\n /**\n *\n * @summary Returns peering connections for a VPC\n * @param {string} vpcId\n * @param {boolean} [update] Whether to force update of status fields\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n vpcsVpcIdPeeringsGet: async (\n vpcId: string,\n update?: boolean,\n options: AxiosRequestConfig = {}\n ): Promise => {\n // verify required parameter 'vpcId' is not null or undefined\n assertParamExists('vpcsVpcIdPeeringsGet', 'vpcId', vpcId);\n const localVarPath = `/vpcs/{vpc_id}/peerings`.replace(\n `{${'vpc_id'}}`,\n encodeURIComponent(String(vpcId))\n );\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = {\n method: 'GET',\n ...baseOptions,\n ...options,\n };\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication cookieAuth required\n\n if (update !== undefined) {\n localVarQueryParameter['update'] = update;\n }\n\n setSearchParams(localVarUrlObj, localVarQueryParameter);\n let headersFromBaseOptions =\n baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {\n ...localVarHeaderParameter,\n ...headersFromBaseOptions,\n ...options.headers,\n };\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n /**\n *\n * @summary Removes a VPC peering\n * @param {string} vpcId\n * @param {string} peeringId\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n vpcsVpcIdPeeringsPeeringIdDelete: async (\n vpcId: string,\n peeringId: string,\n options: AxiosRequestConfig = {}\n ): Promise => {\n // verify required parameter 'vpcId' is not null or undefined\n assertParamExists(\n 'vpcsVpcIdPeeringsPeeringIdDelete',\n 'vpcId',\n vpcId\n );\n // verify required parameter 'peeringId' is not null or undefined\n assertParamExists(\n 'vpcsVpcIdPeeringsPeeringIdDelete',\n 'peeringId',\n peeringId\n );\n const localVarPath = `/vpcs/{vpc_id}/peerings/{peering_id}`\n .replace(`{${'vpc_id'}}`, encodeURIComponent(String(vpcId)))\n .replace(\n `{${'peering_id'}}`,\n encodeURIComponent(String(peeringId))\n );\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = {\n method: 'DELETE',\n ...baseOptions,\n ...options,\n };\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication cookieAuth required\n\n setSearchParams(localVarUrlObj, localVarQueryParameter);\n let headersFromBaseOptions =\n baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {\n ...localVarHeaderParameter,\n ...headersFromBaseOptions,\n ...options.headers,\n };\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n /**\n *\n * @summary Gets a VPC peering\n * @param {string} vpcId\n * @param {string} peeringId\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n vpcsVpcIdPeeringsPeeringIdGet: async (\n vpcId: string,\n peeringId: string,\n options: AxiosRequestConfig = {}\n ): Promise => {\n // verify required parameter 'vpcId' is not null or undefined\n assertParamExists('vpcsVpcIdPeeringsPeeringIdGet', 'vpcId', vpcId);\n // verify required parameter 'peeringId' is not null or undefined\n assertParamExists(\n 'vpcsVpcIdPeeringsPeeringIdGet',\n 'peeringId',\n peeringId\n );\n const localVarPath = `/vpcs/{vpc_id}/peerings/{peering_id}`\n .replace(`{${'vpc_id'}}`, encodeURIComponent(String(vpcId)))\n .replace(\n `{${'peering_id'}}`,\n encodeURIComponent(String(peeringId))\n );\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = {\n method: 'GET',\n ...baseOptions,\n ...options,\n };\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication cookieAuth required\n\n setSearchParams(localVarUrlObj, localVarQueryParameter);\n let headersFromBaseOptions =\n baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {\n ...localVarHeaderParameter,\n ...headersFromBaseOptions,\n ...options.headers,\n };\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n /**\n *\n * @summary Creates a new peering connection for a VPC\n * @param {string} vpcId\n * @param {VpcsVpcIdPeeringsPostRequest} vpcsVpcIdPeeringsPostRequest Create VPC peering request\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n vpcsVpcIdPeeringsPost: async (\n vpcId: string,\n vpcsVpcIdPeeringsPostRequest: VpcsVpcIdPeeringsPostRequest,\n options: AxiosRequestConfig = {}\n ): Promise => {\n // verify required parameter 'vpcId' is not null or undefined\n assertParamExists('vpcsVpcIdPeeringsPost', 'vpcId', vpcId);\n // verify required parameter 'vpcsVpcIdPeeringsPostRequest' is not null or undefined\n assertParamExists(\n 'vpcsVpcIdPeeringsPost',\n 'vpcsVpcIdPeeringsPostRequest',\n vpcsVpcIdPeeringsPostRequest\n );\n const localVarPath = `/vpcs/{vpc_id}/peerings`.replace(\n `{${'vpc_id'}}`,\n encodeURIComponent(String(vpcId))\n );\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = {\n method: 'POST',\n ...baseOptions,\n ...options,\n };\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication cookieAuth required\n\n localVarHeaderParameter['Content-Type'] = 'application/json';\n\n setSearchParams(localVarUrlObj, localVarQueryParameter);\n let headersFromBaseOptions =\n baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {\n ...localVarHeaderParameter,\n ...headersFromBaseOptions,\n ...options.headers,\n };\n localVarRequestOptions.data = serializeDataIfNeeded(\n vpcsVpcIdPeeringsPostRequest,\n localVarRequestOptions,\n configuration\n );\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n };\n};\n\n/**\n * VPCPeeringApi - functional programming interface\n * @export\n */\nexport const VPCPeeringApiFp = function (configuration?: Configuration) {\n const localVarAxiosParamCreator =\n VPCPeeringApiAxiosParamCreator(configuration);\n return {\n /**\n *\n * @summary Returns peering connections for a VPC\n * @param {string} vpcId\n * @param {boolean} [update] Whether to force update of status fields\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async vpcsVpcIdPeeringsGet(\n vpcId: string,\n update?: boolean,\n options?: AxiosRequestConfig\n ): Promise<\n (\n axios?: AxiosInstance,\n basePath?: string\n ) => AxiosPromise\n > {\n const localVarAxiosArgs =\n await localVarAxiosParamCreator.vpcsVpcIdPeeringsGet(\n vpcId,\n update,\n options\n );\n return createRequestFunction(\n localVarAxiosArgs,\n globalAxios,\n BASE_PATH,\n configuration\n );\n },\n /**\n *\n * @summary Removes a VPC peering\n * @param {string} vpcId\n * @param {string} peeringId\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async vpcsVpcIdPeeringsPeeringIdDelete(\n vpcId: string,\n peeringId: string,\n options?: AxiosRequestConfig\n ): Promise<\n (axios?: AxiosInstance, basePath?: string) => AxiosPromise\n > {\n const localVarAxiosArgs =\n await localVarAxiosParamCreator.vpcsVpcIdPeeringsPeeringIdDelete(\n vpcId,\n peeringId,\n options\n );\n return createRequestFunction(\n localVarAxiosArgs,\n globalAxios,\n BASE_PATH,\n configuration\n );\n },\n /**\n *\n * @summary Gets a VPC peering\n * @param {string} vpcId\n * @param {string} peeringId\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async vpcsVpcIdPeeringsPeeringIdGet(\n vpcId: string,\n peeringId: string,\n options?: AxiosRequestConfig\n ): Promise<\n (\n axios?: AxiosInstance,\n basePath?: string\n ) => AxiosPromise\n > {\n const localVarAxiosArgs =\n await localVarAxiosParamCreator.vpcsVpcIdPeeringsPeeringIdGet(\n vpcId,\n peeringId,\n options\n );\n return createRequestFunction(\n localVarAxiosArgs,\n globalAxios,\n BASE_PATH,\n configuration\n );\n },\n /**\n *\n * @summary Creates a new peering connection for a VPC\n * @param {string} vpcId\n * @param {VpcsVpcIdPeeringsPostRequest} vpcsVpcIdPeeringsPostRequest Create VPC peering request\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async vpcsVpcIdPeeringsPost(\n vpcId: string,\n vpcsVpcIdPeeringsPostRequest: VpcsVpcIdPeeringsPostRequest,\n options?: AxiosRequestConfig\n ): Promise<\n (\n axios?: AxiosInstance,\n basePath?: string\n ) => AxiosPromise\n > {\n const localVarAxiosArgs =\n await localVarAxiosParamCreator.vpcsVpcIdPeeringsPost(\n vpcId,\n vpcsVpcIdPeeringsPostRequest,\n options\n );\n return createRequestFunction(\n localVarAxiosArgs,\n globalAxios,\n BASE_PATH,\n configuration\n );\n },\n };\n};\n\n/**\n * VPCPeeringApi - factory interface\n * @export\n */\nexport const VPCPeeringApiFactory = function (\n configuration?: Configuration,\n basePath?: string,\n axios?: AxiosInstance\n) {\n const localVarFp = VPCPeeringApiFp(configuration);\n return {\n /**\n *\n * @summary Returns peering connections for a VPC\n * @param {string} vpcId\n * @param {boolean} [update] Whether to force update of status fields\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n vpcsVpcIdPeeringsGet(\n vpcId: string,\n update?: boolean,\n options?: any\n ): AxiosPromise {\n return localVarFp\n .vpcsVpcIdPeeringsGet(vpcId, update, options)\n .then((request) => request(axios, basePath));\n },\n /**\n *\n * @summary Removes a VPC peering\n * @param {string} vpcId\n * @param {string} peeringId\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n vpcsVpcIdPeeringsPeeringIdDelete(\n vpcId: string,\n peeringId: string,\n options?: any\n ): AxiosPromise {\n return localVarFp\n .vpcsVpcIdPeeringsPeeringIdDelete(vpcId, peeringId, options)\n .then((request) => request(axios, basePath));\n },\n /**\n *\n * @summary Gets a VPC peering\n * @param {string} vpcId\n * @param {string} peeringId\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n vpcsVpcIdPeeringsPeeringIdGet(\n vpcId: string,\n peeringId: string,\n options?: any\n ): AxiosPromise {\n return localVarFp\n .vpcsVpcIdPeeringsPeeringIdGet(vpcId, peeringId, options)\n .then((request) => request(axios, basePath));\n },\n /**\n *\n * @summary Creates a new peering connection for a VPC\n * @param {string} vpcId\n * @param {VpcsVpcIdPeeringsPostRequest} vpcsVpcIdPeeringsPostRequest Create VPC peering request\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n vpcsVpcIdPeeringsPost(\n vpcId: string,\n vpcsVpcIdPeeringsPostRequest: VpcsVpcIdPeeringsPostRequest,\n options?: any\n ): AxiosPromise {\n return localVarFp\n .vpcsVpcIdPeeringsPost(\n vpcId,\n vpcsVpcIdPeeringsPostRequest,\n options\n )\n .then((request) => request(axios, basePath));\n },\n };\n};\n\n/**\n * VPCPeeringApi - object-oriented interface\n * @export\n * @class VPCPeeringApi\n * @extends {BaseAPI}\n */\nexport class VPCPeeringApi extends BaseAPI {\n /**\n *\n * @summary Returns peering connections for a VPC\n * @param {string} vpcId\n * @param {boolean} [update] Whether to force update of status fields\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof VPCPeeringApi\n */\n public vpcsVpcIdPeeringsGet(\n vpcId: string,\n update?: boolean,\n options?: AxiosRequestConfig\n ) {\n return VPCPeeringApiFp(this.configuration)\n .vpcsVpcIdPeeringsGet(vpcId, update, options)\n .then((request) => request(this.axios, this.basePath));\n }\n\n /**\n *\n * @summary Removes a VPC peering\n * @param {string} vpcId\n * @param {string} peeringId\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof VPCPeeringApi\n */\n public vpcsVpcIdPeeringsPeeringIdDelete(\n vpcId: string,\n peeringId: string,\n options?: AxiosRequestConfig\n ) {\n return VPCPeeringApiFp(this.configuration)\n .vpcsVpcIdPeeringsPeeringIdDelete(vpcId, peeringId, options)\n .then((request) => request(this.axios, this.basePath));\n }\n\n /**\n *\n * @summary Gets a VPC peering\n * @param {string} vpcId\n * @param {string} peeringId\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof VPCPeeringApi\n */\n public vpcsVpcIdPeeringsPeeringIdGet(\n vpcId: string,\n peeringId: string,\n options?: AxiosRequestConfig\n ) {\n return VPCPeeringApiFp(this.configuration)\n .vpcsVpcIdPeeringsPeeringIdGet(vpcId, peeringId, options)\n .then((request) => request(this.axios, this.basePath));\n }\n\n /**\n *\n * @summary Creates a new peering connection for a VPC\n * @param {string} vpcId\n * @param {VpcsVpcIdPeeringsPostRequest} vpcsVpcIdPeeringsPostRequest Create VPC peering request\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof VPCPeeringApi\n */\n public vpcsVpcIdPeeringsPost(\n vpcId: string,\n vpcsVpcIdPeeringsPostRequest: VpcsVpcIdPeeringsPostRequest,\n options?: AxiosRequestConfig\n ) {\n return VPCPeeringApiFp(this.configuration)\n .vpcsVpcIdPeeringsPost(vpcId, vpcsVpcIdPeeringsPostRequest, options)\n .then((request) => request(this.axios, this.basePath));\n }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * CCX VPC Service\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: v2.0.0\n * Contact: support@severalnines.com\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nexport interface ConfigurationParameters {\n apiKey?:\n | string\n | Promise\n | ((name: string) => string)\n | ((name: string) => Promise);\n username?: string;\n password?: string;\n accessToken?:\n | string\n | Promise\n | ((name?: string, scopes?: string[]) => string)\n | ((name?: string, scopes?: string[]) => Promise);\n basePath?: string;\n baseOptions?: any;\n formDataCtor?: new () => any;\n}\n\nexport class Configuration {\n /**\n * parameter for apiKey security\n * @param name security name\n * @memberof Configuration\n */\n apiKey?:\n | string\n | Promise\n | ((name: string) => string)\n | ((name: string) => Promise);\n /**\n * parameter for basic security\n *\n * @type {string}\n * @memberof Configuration\n */\n username?: string;\n /**\n * parameter for basic security\n *\n * @type {string}\n * @memberof Configuration\n */\n password?: string;\n /**\n * parameter for oauth2 security\n * @param name security name\n * @param scopes oauth2 scope\n * @memberof Configuration\n */\n accessToken?:\n | string\n | Promise\n | ((name?: string, scopes?: string[]) => string)\n | ((name?: string, scopes?: string[]) => Promise);\n /**\n * override base path\n *\n * @type {string}\n * @memberof Configuration\n */\n basePath?: string;\n /**\n * base options for axios calls\n *\n * @type {any}\n * @memberof Configuration\n */\n baseOptions?: any;\n /**\n * The FormData constructor that will be used to create multipart form data\n * requests. You can inject this here so that execution environments that\n * do not support the FormData class can still run the generated client.\n *\n * @type {new () => FormData}\n */\n formDataCtor?: new () => any;\n\n constructor(param: ConfigurationParameters = {}) {\n this.apiKey = param.apiKey;\n this.username = param.username;\n this.password = param.password;\n this.accessToken = param.accessToken;\n this.basePath = param.basePath;\n this.baseOptions = param.baseOptions;\n this.formDataCtor = param.formDataCtor;\n }\n\n /**\n * Check if the given MIME is a JSON MIME.\n * JSON MIME examples:\n * application/json\n * application/json; charset=UTF8\n * APPLICATION/JSON\n * application/vnd.company+json\n * @param mime - MIME (Multipurpose Internet Mail Extensions)\n * @return True if the given MIME is JSON, false otherwise.\n */\n public isJsonMime(mime: string): boolean {\n const jsonMime: RegExp = new RegExp(\n '^(application/json|[^;/ \\t]+/[^;/ \\t]+[+]json)[ \\t]*(;.*)?$',\n 'i'\n );\n return (\n mime !== null &&\n (jsonMime.test(mime) ||\n mime.toLowerCase() === 'application/json-patch+json')\n );\n }\n}\n","import { AxiosResponseHeaders } from 'axios';\nimport {\n AUTH_APP_URL,\n AUTH_REDIRECT_URL,\n AUTH_UI_APP_DISABLED,\n} from '../core/CcxEnv';\n\nexport const SDK_AXIOS_DEFAULT_BASE_OPTIONS = {\n // to prevent triggering errors on error status and look into response.ok props instead\n validateStatus: () => true,\n transformResponse: [\n (data: any, headers: AxiosResponseHeaders, status: number) => {\n // this os copy&paste from src/services/ApiService.tsx method ApiService.request\n if (status === 401) {\n try {\n const response = JSON.parse(data[0]);\n if (!response.admin) {\n if (AUTH_REDIRECT_URL) {\n window.location.href = AUTH_REDIRECT_URL;\n } else if (AUTH_UI_APP_DISABLED) {\n window.location.href = AUTH_APP_URL;\n } else {\n window.location.href = `${AUTH_APP_URL}/?redirectTo=${encodeURIComponent(\n window.location.href\n )}`;\n }\n }\n } catch (err) {\n return null;\n }\n }\n\n let response: any;\n try {\n response = JSON.parse(data);\n } catch (err) {\n return null;\n }\n\n const error = response?.err || response?.statusText;\n if (error) {\n throw new Error(error);\n }\n return response;\n },\n ],\n};\n","import {\n Configuration,\n Vpc,\n VPCApi,\n VpcPeering,\n VPCPeeringApi,\n} from './vpc/typescript-axios';\nimport { API_VPC_V2 } from '../core/CcxEnv';\nimport { SDK_AXIOS_DEFAULT_BASE_OPTIONS } from './config';\n\nexport const vpcApiInstance = new VPCApi(\n new Configuration({\n basePath: API_VPC_V2,\n baseOptions: SDK_AXIOS_DEFAULT_BASE_OPTIONS,\n })\n);\nexport const vpcPeeringApiInstance = new VPCPeeringApi(\n new Configuration({\n basePath: API_VPC_V2,\n baseOptions: SDK_AXIOS_DEFAULT_BASE_OPTIONS,\n })\n);\n\nexport interface VpcDTO extends Vpc {}\n\nexport interface VpcPeeringDTO extends VpcPeering {}\n","import ApiService from './ApiService';\nimport Vpc from '../types/Vpc';\nimport VpcAwsAvailabilityZone, {\n VpcAwsAvailabilityZoneClassProps,\n} from '../types/VpcAwsAvailabilityZone';\nimport VpcAwsSubnet, { VpcAwsSubnetClassProps } from '../types/VpcAwsSubnet';\nimport { API_VPC, API_VPC_V2 } from '../core/CcxEnv';\nimport VpcPeering from '../types/VpcPeering';\nimport {\n vpcApiInstance,\n VpcDTO,\n vpcPeeringApiInstance,\n VpcPeeringDTO,\n} from '../sdk/VpcApi';\n\ntype GetAllAvailabilityZoneParams = {\n cloud: string;\n region: string;\n};\n\ntype GetAllVpcParams = {\n cloud: string;\n region: string;\n};\n\ntype GetVpcParams = {\n cloud: string;\n region: string;\n vpcUuid: string;\n};\n\nexport type CreateVpcParams = {\n cidrIpv4Block: string;\n cloud: string;\n region: string;\n vpcName: string;\n};\n\ntype DeleteVpcParams = {\n vpcUuid: string;\n};\n\ntype GetAllSubnetParams = {\n cloud: string;\n region: string;\n vpcId: string;\n};\n\ntype CreateSubnetParams = {\n cloud: string;\n region: string;\n vpcId: string;\n availabilityZone: string;\n cidrBlock: string;\n};\n\ntype DeleteSubnetParams = {\n cloud: string;\n region: string;\n vpcId: string;\n subnetId: string;\n};\n\ntype GetAllPeerParams = {\n cloud: string;\n region: string;\n};\n\nexport type CreatePeerParams = {\n accepterCidr: string;\n accepterOwnerId: string;\n accepterRegion: string;\n accepterVpcId: string;\n cloud?: string;\n region?: string;\n vpcUuid: string;\n};\n\ntype DeletePeeringParams = {\n vpcId: string;\n cloud?: string;\n region?: string;\n peeringId: string;\n};\n\nexport default class VpcService extends ApiService {\n /**\n * Get list of AZ.\n * @param {string} cloud\n * @param {string} region\n */\n static async getAllAvailabilityZone({\n cloud,\n region,\n }: GetAllAvailabilityZoneParams): Promise {\n const response = await this.request('GET', `${cloud}/${region}/azs`);\n return response.map(\n (az: VpcAwsAvailabilityZoneClassProps) =>\n new VpcAwsAvailabilityZone(az)\n );\n }\n\n /**\n * Get list of VPCs.\n * @param {string} cloud\n * @param {string} region\n */\n static async getAllVpc({\n cloud,\n region,\n }: GetAllVpcParams): Promise {\n const response = await vpcApiInstance.vpcsGet(cloud, region);\n return response?.data?.vpcs?.map((vpc: VpcDTO) => new Vpc(vpc));\n }\n\n /**\n * Get Total Count of VPCs.\n */\n static async getTotalVpc(): Promise {\n const response = await vpcApiInstance.vpcsGet();\n return response?.data?.count || 0;\n }\n\n /**\n * Get a VPC.\n * @param {string} cloud\n * @param {string} region\n * @param {string} vpcUuid\n */\n static async getVpc({\n cloud,\n region,\n vpcUuid,\n }: GetVpcParams): Promise {\n const result = await vpcApiInstance.vpcsVpcIdGet(vpcUuid);\n if (result.data.vpc) {\n return new Vpc(result.data.vpc);\n }\n }\n\n /**\n * Create a VPC\n * @param {string} accountId\n */\n static async createVpc({\n cidrIpv4Block,\n cloud,\n region,\n vpcName,\n }: CreateVpcParams): Promise {\n return await vpcApiInstance.vpcsPost({\n cloud,\n region,\n cidr_ipv4_block: cidrIpv4Block,\n name: vpcName,\n });\n }\n\n /**\n * Delete a VPC\n * @param {string} cloud\n * @param {string} region\n * @param {string} vpcId\n */\n static async deleteVpc({ vpcUuid }: DeleteVpcParams): Promise {\n return await vpcApiInstance.vpcsVpcIdDelete(vpcUuid);\n }\n\n /**\n * Get list of Subnets for a VPC.\n * @param {string} cloud\n * @param {string} region\n * @param {string} vpcId\n */\n static async getAllSubnet({\n cloud,\n region,\n vpcId,\n }: GetAllSubnetParams): Promise {\n const response = await this.request(\n 'GET',\n `${cloud}/${region}/vpc/${vpcId}/subnets`\n );\n return response.map(\n (subnet: VpcAwsSubnetClassProps) => new VpcAwsSubnet(subnet)\n );\n }\n\n /**\n * Create a Subnet\n * @param {string} availabilityZone\n * @param {string} cidrBlock\n * @param {string} cloud\n * @param {string} region\n * @param {string} vpcId\n */\n static async createSubnet({\n availabilityZone,\n cidrBlock,\n cloud,\n region,\n vpcId,\n }: CreateSubnetParams): Promise {\n const requestData = {\n data: {\n cloud,\n region,\n vpc_id: vpcId,\n availability_zone: availabilityZone,\n cidr_block: cidrBlock,\n },\n };\n return await this.request(\n 'POST',\n `${cloud}/${region}/vpc/${vpcId}/subnet`,\n requestData\n );\n }\n\n /**\n * Delete a Subnet\n * @param {string} cloud\n * @param {string} region\n * @param {string} subnetId\n * @param {string} vpcId\n */\n static async deleteSubnet({\n cloud,\n region,\n subnetId,\n vpcId,\n }: DeleteSubnetParams): Promise {\n return await this.request(\n 'DELETE',\n `${cloud}/${region}/vpc/${vpcId}/subnet/${subnetId}`\n );\n }\n\n /**\n * Get list of Peers.\n * @param {string} cloud\n * @param {string} region\n */\n static async getAllPeer({\n cloud,\n region,\n }: GetAllPeerParams): Promise {\n throw new Error('Not implemented');\n const response = await this.request(\n 'GET',\n `${cloud}/${region}/peerings`\n );\n return response.map((vpc: any) => new VpcPeering(vpc));\n }\n\n static async getVpcPeer(vpcId: string): Promise {\n const response = await vpcPeeringApiInstance.vpcsVpcIdPeeringsGet(\n vpcId\n );\n return (\n response.data.peerings?.map(\n (vpc: VpcPeeringDTO) =>\n new VpcPeering({ ...vpc, vpc_id: vpcId })\n ) || []\n );\n }\n\n /**\n * Create a Peer\n * @param {string} cloud\n * @param {string} internetGatewayId\n * @param {string} privateSubnetId\n * @param {string} region\n * @param {string} routeTableId\n * @param {string} vpcId\n */\n static async createPeer({\n accepterCidr,\n accepterOwnerId,\n accepterRegion,\n accepterVpcId,\n cloud,\n region,\n vpcUuid,\n }: CreatePeerParams): Promise {\n const response = await vpcPeeringApiInstance.vpcsVpcIdPeeringsPost(\n vpcUuid,\n {\n target_cidr: accepterCidr,\n target_cloud_user_id: accepterOwnerId,\n target_cloud_region: accepterRegion,\n target_cloud_vpc_id: accepterVpcId,\n }\n );\n\n return response?.data;\n }\n\n /**\n * Delete a Subnet\n * @param {string} vpcId\n * @param {string} cloud\n * @param {string} region\n * @param {string} peeringId\n */\n static async deletePeer({\n vpcId,\n cloud,\n region,\n peeringId,\n }: DeletePeeringParams): Promise {\n return await vpcPeeringApiInstance.vpcsVpcIdPeeringsPeeringIdDelete(\n vpcId,\n peeringId\n );\n }\n\n protected static getApiUrl(version: number) {\n if (version === 2) {\n return API_VPC_V2;\n }\n return API_VPC;\n }\n}\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport styles from './AppLabeledIconStatus.module.less';\n\ninterface Props extends CcxComponentProps {\n className?: string;\n icon?: ReactElement;\n label?: string;\n}\n\nfunction AppLabeledIconStatus({\n className,\n icon,\n label,\n testId = 'AppLabeledIconStatus',\n}: Props): ReactElement {\n return (\n \n \n {icon}\n \n \n {label}\n \n \n );\n}\n\nexport default AppLabeledIconStatus;\n","import { CheckCircleOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport React from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {\n twoToneColor?: string;\n}\n\nconst CcxIconCheckCircle = ({\n testId = 'CcxIconCheckCircle',\n twoToneColor,\n}: Props) => ;\n\nexport default CcxIconCheckCircle;\n","import { ExclamationCircleOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport React, { ReactElement } from 'react';\n\nfunction CcxIconExclamationCircle(): ReactElement {\n return ;\n}\n\nexport default CcxIconExclamationCircle;\n","import React, { ReactElement, useState } from 'react';\nimport { Row, Col, Slider, InputNumber } from 'antd';\nimport styles from './AppForm.module.less';\nimport CcxComponentProps from '../../../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {\n field: any; // @TODO: define a AppFormSliderField interface\n onChange?: Function;\n}\n\nfunction AppFormSlider({\n field,\n onChange,\n testId = 'AppFormSlider',\n}: Props): ReactElement {\n const [sliderInputValue, setSliderInputValue] = useState(\n field.defaultValue\n );\n\n const onSliderChange = (value: number) => {\n setSliderInputValue(value);\n onChange && onChange(value);\n };\n\n const onSliderInputChange = (value: number | null) => {\n setSliderInputValue(value);\n onChange && onChange(value);\n };\n\n const baseTestId = testId || field.testId;\n\n return field.showInputNumber ? (\n
\n \n \n \n \n \n \n \n \n \n
\n ) : (\n
\n \n
\n );\n}\n\nexport default AppFormSlider;\n","import React, { ReactElement } from 'react';\nimport { Select } from 'antd';\nimport styles from './AppForm.module.less';\nimport CcxComponentProps from '../../../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {\n field: any; // @TODO: define a AppFormFlagSelectField interface\n onPressEnter?: Function;\n onChange?: Function;\n}\n\nfunction AppFormFlagSelect({\n field,\n onChange,\n onPressEnter,\n testId = 'AppFormFlagSelect',\n}: Props): ReactElement {\n return (\n
\n \n option?.props?.children?.props?.children[1]\n .toLowerCase()\n .indexOf(input?.toLowerCase()) >= 0\n }\n onChange={field.onChange}\n data-testid={`${testId}Select`}\n >\n {field.options.map((o: any, i: number) => {\n return (\n \n {o.label}\n \n );\n })}\n \n
\n );\n}\n\nexport default AppFormFlagSelect;\n","import React, { ReactElement } from 'react';\nimport { InfoCircleOutlined } from '@severalnines/frontend_hub/libs/icons';\n\nfunction CcxIconInfoCircleOutlined(): ReactElement {\n return ;\n}\n\nexport default CcxIconInfoCircleOutlined;\n","import { ReactElement, useEffect, useState } from 'react';\nimport { Form, Input, Select, Switch, Radio } from 'antd';\nimport styles from './AppForm.module.less';\nimport { Validator } from 'ip-num/Validator';\nimport { IPv4 } from 'ip-num/IPNumber';\nimport { IPv4CidrRange } from 'ip-num/IPRange';\nimport { InputNumber } from 'antd';\nimport AppFormSlider from './AppFormSlider';\nimport AppFormFlagSelect from './AppFormFlagSelect';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CcxIconInfoCircleOutlined from '../icons/CcxIconInfoCircleOutlined';\nimport { Tooltip } from 'antd';\n\ninterface Props extends CcxComponentProps {\n fields?: any[];\n form?: any;\n onPressEnter?: Function;\n errorFields?: any[];\n formClassName?: string;\n useGrid?: boolean;\n overideValidationFunction?: Function;\n}\n\nfunction AppForm({\n fields,\n onPressEnter,\n errorFields,\n testId = 'AppForm',\n formClassName,\n useGrid = false,\n overideValidationFunction = () => {},\n}: Props): ReactElement {\n const { Option } = Select;\n\n const [formList, setFormList] = useState(fields);\n\n useEffect(() => {\n const sortedArray = sortByGroup(fields);\n setFormList([...sortedArray]);\n }, [errorFields, fields]);\n\n const sortByGroup = (fields?: any[]) => {\n const groupedItems: any = {};\n fields &&\n fields.forEach((field) => {\n const groupName = field.groupBy;\n if (!groupedItems[groupName]) {\n groupedItems[groupName] = [];\n }\n groupedItems[groupName].push(field);\n });\n\n for (const groupName in groupedItems) {\n if (groupedItems.hasOwnProperty(groupName)) {\n groupedItems[groupName].sort((a: any, b: any) => {\n return a.groupBy - b.groupBy;\n });\n }\n }\n const sortedArray = Object.values(groupedItems).flat();\n return sortedArray;\n };\n\n const getFormComponent = (field: any) => {\n if (!field) {\n return null;\n }\n\n switch (field.type) {\n case 'flagSelect':\n return (\n \n );\n case 'select':\n return (\n \n option?.props?.children?.props?.children[1]\n .toLowerCase()\n .indexOf(input?.toLowerCase()) >= 0\n }\n onChange={field.onChange}\n data-testid={field.testId}\n >\n {field.options?.map((o: any) => {\n return (\n \n {o.content || o.label}\n \n );\n })}\n \n );\n case 'multiple':\n return (\n \n option.children\n .toLowerCase()\n .indexOf(input.toLowerCase()) >= 0\n }\n data-testid={field.testId}\n >\n {field.options.map((o: any) => {\n return (\n \n );\n })}\n \n );\n case 'textarea':\n return (\n \n );\n case 'password':\n return (\n \n );\n case 'ip':\n case 'cidr':\n return (\n \n );\n case 'radioGroup':\n return (\n \n {field.options?.map((o: any) => {\n return (\n \n {o.children}\n \n );\n })}\n \n );\n case 'hidden':\n return (\n \n );\n case 'rawElement':\n return field.rawElement;\n case 'switch':\n return (\n \n );\n case 'slider':\n return (\n \n );\n\n case 'number':\n return (\n \n );\n default:\n return (\n \n );\n }\n };\n\n return (\n \n {formList?.map((field: any, index) => {\n const getFieldErrors = () => {\n return errorFields\n ? errorFields?.filter((f) => {\n // f.name and field.name are like: [\"source\"]\n return f.name[0] === field.name[0];\n })\n : [];\n };\n\n const hasErrors = () => {\n return getFieldErrors().length > 0;\n };\n\n const helpText =\n (hasErrors() &&\n getFieldErrors()\n .map((f: any) => {\n return f.errors.join(' ');\n })\n .join()) ||\n field.helpText;\n\n const validateStatus = !hasErrors() ? 'success' : 'error';\n\n const checkReservedIp = (rule: any, value: any) => {\n if (!value) {\n return Promise.resolve();\n }\n\n const cidrComponents = value.split('/');\n const ip = cidrComponents[0];\n if (!ip) {\n return Promise.resolve();\n }\n const [validIpv4String] = Validator.isValidIPv4String(ip);\n if (!validIpv4String) {\n return Promise.resolve();\n }\n const ipV4 = new IPv4(ip);\n\n const reservedRange = [\n '0.0.0.0/8',\n '127.0.0.0/8',\n '169.254.0.0/16',\n '198.51.100.0/24',\n '203.0.113.0/24',\n '224.0.0.0/4',\n '240.0.0.0/4',\n '255.255.255.255/32',\n ];\n\n let valid = true;\n reservedRange.forEach((r: string) => {\n const ipv4Range = IPv4CidrRange.fromCidr(r);\n if (\n ipV4.isGreaterThanOrEquals(ipv4Range.getFirst()) &&\n ipV4.isLessThanOrEquals(ipv4Range.getLast())\n ) {\n valid = false;\n }\n });\n\n if (!valid) {\n return Promise.reject('Cannot use a reserved IP range');\n }\n\n return Promise.resolve();\n };\n\n const checkCidr = (rule: any, value: any) => {\n if (!value) {\n return Promise.resolve();\n }\n\n const [result, message] =\n Validator.isValidIPv4CidrNotation(value);\n\n if (result) {\n return Promise.resolve();\n }\n\n return Promise.reject(message);\n };\n\n const checkIp = (rule: any, value: any) => {\n if (!value) {\n return Promise.resolve();\n }\n\n const [result, message] =\n Validator.isValidIPv4String(value);\n\n if (result) {\n return Promise.resolve();\n }\n\n return Promise.reject(message);\n };\n\n const checkTimeDuration = (rule: any, value: any) => {\n const isValidDuration: Boolean =\n overideValidationFunction();\n if (!isValidDuration)\n return Promise.reject(\n 'Please enter a duration that corresponds to whole hours.'\n );\n\n return Promise.resolve();\n };\n\n const checkPatterns = (rule: any, value: any) => {\n if (!value || !field.validators) {\n return Promise.resolve();\n }\n\n let valid = true;\n let message = '';\n\n field.validators.forEach((v: any) => {\n const regex = RegExp(v.pattern);\n if (!regex.test(value)) {\n valid = false;\n message = v.message;\n }\n });\n\n if (!valid) {\n return Promise.reject(message);\n }\n\n return Promise.resolve();\n };\n\n const validationRules: any[] = field.rules || [];\n\n if (typeof field.label === 'string') {\n validationRules.push({\n required: field.required,\n message: `${field.label} is required.`,\n });\n } else if (field.validationName) {\n validationRules.push({\n required: field.required,\n message: `${field.validationName} is required.`,\n });\n }\n\n if (field.maxLength) {\n validationRules.push({\n max: field.maxLength,\n message: `Up to ${field.maxLength} characters in length.`,\n });\n }\n\n if (field.minLength) {\n validationRules.push({\n min: field.minLength,\n message: `At least ${field.minLength} characters in length.`,\n });\n }\n\n if (field.validators) {\n validationRules.push({ validator: checkPatterns });\n }\n\n if (field.type === 'cidr') {\n validationRules.push({ validator: checkCidr });\n validationRules.push({ validator: checkReservedIp });\n }\n\n if (field.type === 'ip') {\n validationRules.push({ validator: checkIp });\n }\n\n if (\n field.type === 'number' &&\n field.name[0] === 'expirationTime'\n ) {\n validationRules.push({\n validator: checkTimeDuration,\n });\n }\n\n return (\n \n {field.label}\n {field.tips ? (\n \n \n \n \n \n ) : null}\n \n )\n }\n validateStatus={validateStatus as any}\n key={field.name}\n required={field.required}\n help={helpText}\n className={field.groupBy ? styles.GroupForm : ''}\n extra={field.extra}\n >\n prevValues !== currentValues}\n initialValue={\n field.defaultValue ? field.defaultValue : null\n }\n >\n {getFormComponent(field)}\n \n \n );\n })}\n \n );\n}\n\nexport default AppForm;\n","import { ReactElement, useState, useEffect } from 'react';\nimport { Button, Row, Col, Form, message, Modal, Alert } from 'antd';\nimport styles from './ButtonModalForm.module.less';\nimport AppForm from './ccx/common/AppForm';\nimport CcxComponentProps from '../core/CcxComponent';\nimport { Tooltip } from 'antd';\nimport { FormLayout } from 'antd/lib/form/Form';\nimport StretchedClick from './common/StretchedClick';\nimport usePiwikPro from '../core/hooks/usePiwikPro';\nimport {\n CANCEL_COMMON_MODAL_FORM,\n CLICK_EVENT,\n OPEN_COMMON_MODAL_FORM,\n} from '../core/PiwikConstants';\n\ninterface Props extends CcxComponentProps {\n title: string | ReactElement;\n buttonText: string;\n buttonIcon?: ReactElement;\n onSubmit: Function;\n onSuccess: Function;\n onCancel?: Function;\n fields?: any[];\n children?: ReactElement;\n buttonType?: string;\n buttonClassName?: string;\n formValues?: any;\n formLayout?: FormLayout;\n overideValidationFunction?: Function;\n disabled?: boolean;\n disabledText?: string;\n formClassName?: string;\n submitText?: string;\n cancelText?: string;\n width?: number;\n leftCol?: number;\n rightCol?: number;\n useGrid?: boolean;\n onFormLoad?: Function;\n stretchedClick?: boolean;\n warningMessage?: string;\n handleModalForcely?: boolean;\n}\n\nfunction ButtonModalForm({\n title,\n buttonText,\n buttonIcon,\n className,\n onSubmit,\n onSuccess,\n onCancel,\n fields,\n children,\n buttonType,\n buttonClassName,\n formValues,\n formLayout,\n overideValidationFunction,\n testId,\n disabled,\n disabledText,\n formClassName,\n submitText = 'Submit',\n cancelText = 'Cancel',\n width = 720,\n leftCol = 5,\n rightCol = 4,\n useGrid,\n onFormLoad,\n stretchedClick = false,\n warningMessage,\n handleModalForcely = false,\n}: Props): ReactElement {\n const [form] = Form.useForm();\n const { trackPageView, trackEvent } = usePiwikPro();\n const [visible, setVisible] = useState(false);\n const [errorFields, setErrorFields] = useState([]);\n const [loading, setLoading] = useState(false);\n const [initialFormValues, setInitialFormValues] = useState({});\n\n useEffect(() => {\n if (form && onFormLoad) {\n onFormLoad(form);\n }\n }, [form, onFormLoad]);\n\n useEffect(() => {\n if (!handleModalForcely) {\n setVisible(handleModalForcely);\n form.resetFields();\n }\n }, [handleModalForcely]);\n\n useEffect(() => {\n if (formValues) {\n setInitialFormValues(formValues);\n }\n }, [formValues]);\n\n const validateForm = async () => {\n if (overideValidationFunction) {\n return overideValidationFunction();\n }\n\n try {\n await form.validateFields();\n return true;\n } catch (e: any) {\n setErrorFields(e.errorFields);\n message.error(\n 'One or more fields have errors. Please double check and try again.'\n );\n return false;\n }\n };\n\n const onSubmitButtonClick = async () => {\n const stepValid = await validateForm();\n\n if (stepValid) {\n setLoading(true);\n try {\n await onSubmit(form.getFieldsValue());\n onSuccess && onSuccess();\n onClose();\n } catch (e) {\n console.error('error e=', e);\n } finally {\n setLoading(false);\n }\n }\n };\n\n const onButtonClick = () => {\n trackPageView(`${OPEN_COMMON_MODAL_FORM}${title}`);\n setVisible(true);\n };\n\n const onClose = () => {\n form.resetFields();\n setErrorFields([]);\n setVisible(false);\n trackEvent(CLICK_EVENT, `${CANCEL_COMMON_MODAL_FORM}${title}`);\n onCancel && onCancel();\n };\n\n return (\n <>\n \n {stretchedClick ? (\n \n ) : (\n \n {buttonIcon}\n \n )\n }\n type={buttonType as any}\n className={\n className || buttonType === 'simple'\n ? `${styles.ButtonModalFormTypeSimple} ${buttonClassName} ${styles.ButtonModalForm}`\n : `${styles.ButtonModalForm} ${buttonClassName}`\n }\n data-testid={testId || 'ButtonModalForm'}\n >\n {buttonText}\n \n )}\n \n \n \n \n {cancelText}\n \n \n {submitText}\n \n \n \n }\n >\n {children}\n \n \n \n {warningMessage && (\n \n )}\n \n \n );\n}\n\nexport default ButtonModalForm;\n","import { useEffect, useState } from 'react';\nimport ContentService from '../../services/ContentService';\n\nexport default function useContentCidrs() {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [cidrs, setCidrs] = useState(undefined);\n\n const load = async () => {\n if (cidrs) {\n setLoading(false);\n // this is some sort of caching for the content api. Data form the content api will not change\n // so we only fetch once. After that, we return the previous values (cache)\n return;\n }\n\n try {\n const resultList = await ContentService.getCidrs();\n setCidrs(resultList);\n setLoading(false);\n setError(null);\n } catch (e: any) {\n setLoading(false);\n setError(e);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, []);\n\n return { cidrs, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport VpcService from '../../services/VpcService';\nimport Vpc from '../../types/Vpc';\n\nexport default function useVpcs(cloud?: string, region?: string) {\n const [loading, setLoading] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [vpcs, setVpcs] = useState(undefined);\n\n const load = async () => {\n // vpcs are for only aws datastores\n if (cloud && region && ['aws', 'lintasarta'].includes(cloud)) {\n try {\n const details = await VpcService.getAllVpc({\n cloud,\n region,\n });\n setVpcs(details);\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, [cloud, region]);\n\n return { vpcs, refresh, loading, updating, error };\n}\n","import { CloseCircleTwoTone } from '@ant-design/icons';\nimport React from 'react';\n\ntype Props = {\n twoToneColor?: string;\n};\n\nconst CcxIconCloseCircleTwoTone = ({ twoToneColor }: Props) => {\n return (\n \n );\n};\n\nexport default CcxIconCloseCircleTwoTone;\n","import React, { ReactElement, useState, useEffect } from 'react';\nimport { CloudSyncOutlined, InfoCircleOutlined } from '@ant-design/icons';\nimport ButtonModalForm from '../ButtonModalForm';\nimport useContentCidrs from '../../core/hooks/useContentCidrs';\nimport useContentProviders from '../../core/hooks/useContentProviders';\nimport styles from './CreateVpcPeerButton.module.less';\nimport VpcService, { CreatePeerParams } from '../../services/VpcService';\nimport CloudProvider from '../../types/CloudProvider';\nimport CloudProviderRegion from '../../types/CloudProviderRegion';\nimport useVpcs from '../../core/hooks/useVpcs';\nimport Vpc from '../../types/Vpc';\nimport { notification } from 'antd';\nimport CcxIconCheckCircle from '../ccx/icons/CcxIconCheckCircle';\nimport CcxIconCloseCircleTwoTone from '../ccx/icons/CcxIconCloseCircleTwoTone';\nimport usePiwikPro from '../../core/hooks/usePiwikPro';\nimport {\n CLICK_EVENT,\n DATASTORE_ADDING_VPC_PEERING_FAILED,\n DATASTORE_ADDING_VPC_PEERING_SUCCESSFULLY,\n} from '../../core/PiwikConstants';\n\ntype CreateVpcPeerButtonProps = {\n cloud?: string;\n onSuccess: Function;\n region?: string;\n buttonType?: string;\n buttonText?: string;\n hideIcon?: boolean;\n buttonClassName?: string;\n selectedVpcUuid?: string;\n};\n\nfunction CreateVpcPeerButton({\n cloud,\n onSuccess,\n region,\n buttonType,\n buttonText,\n hideIcon,\n buttonClassName,\n selectedVpcUuid,\n}: CreateVpcPeerButtonProps): ReactElement {\n const { cloudProviders, loading: loadingProviders } = useContentProviders();\n const { cidrs, loading: loadingCidrs } = useContentCidrs();\n const {\n vpcs,\n loading: loadingVpcs,\n refresh: refreshVpcs,\n } = useVpcs(cloud, region);\n const { trackEvent } = usePiwikPro();\n const [initialFormValues, setInitialFormValues] = useState({});\n\n const fieldsSetup = {\n step1: [\n {\n name: ['vpcUuid'],\n testId: 'CreateVpcPeerButtonVpcUuid',\n required: false,\n label: 'Source VPC',\n type: 'select',\n placeholder: 'Select a VPC to peer to your VPC',\n options: [],\n disabled: loadingVpcs,\n },\n {\n name: ['accepterOwnerId'],\n testId: 'CreateVpcPeerButtonAccepterOwnerId',\n required: true,\n label: 'Your AWS account ID',\n placeholder: 'Enter the owner account ID',\n type: 'input',\n tips: <>The AWS owner account ID of the peering VPC.,\n },\n {\n name: ['accepterRegion'],\n testId: 'CreateVpcPeerButtonAccepterRegion',\n required: true,\n label: 'Your cloud region',\n placeholder: 'Enter the peering VPC region',\n type: 'input',\n tips: <>The region of the peering VPC, i.e.: eu-west-2,\n },\n {\n name: ['accepterVpcId'],\n testId: 'CreateVpcPeerButtonAccepterVpcId',\n required: true,\n label: 'Your VPC ID',\n placeholder: 'Enter the peering VPC ID',\n type: 'input',\n tips: <>The VPC ID of the peering VPC.,\n },\n {\n name: ['accepterCidr'],\n testId: 'CreateVpcPeerButtonAcceptedCidr',\n required: true,\n label: 'Your IPv4 CIDR',\n placeholder: 'Enter the peering VPC IPv4 CIDR',\n type: 'input',\n tips: <>IPv4 CIDR of the peering VPC.,\n },\n ],\n };\n\n const [fields, setFields] = useState(fieldsSetup);\n\n useEffect(() => {\n if (fields && cloudProviders && cloudProviders.length > 0) {\n const newStep1 = fields.step1.map((f: any) => {\n if (f.name && f.name[0] === 'cloud') {\n f.options =\n cloudProviders\n ?.filter((c: CloudProvider) => {\n // only show AWS for now\n return c.isAws();\n })\n .map((c: CloudProvider) => {\n return { label: c.name, value: c.code };\n }) || [];\n }\n\n if (f.name && f.name[0] === 'region') {\n f.options =\n cloudProviders\n ?.filter((c: CloudProvider) => {\n // only show AWS for now\n return c.isAws();\n })[0]\n .regions.map((r: CloudProviderRegion) => {\n return {\n label: `${r.code} - ${r.name}`,\n value: r.code,\n };\n }) || [];\n }\n return f;\n });\n const newFields = fields;\n newFields.step1 = newStep1;\n setFields(newFields);\n const newValues = initialFormValues;\n newValues.cloud = cloudProviders[0].code;\n newValues.region = cloudProviders[0].regions[0].code;\n setInitialFormValues(newValues);\n }\n }, [cloudProviders, fields]);\n\n useEffect(() => {\n if (fields && cidrs && cidrs.length > 0) {\n const newStep1 = fields.step1.map((f: any) => {\n if (f.name && f.name[0] === 'cidrIpv4Block') {\n f.options =\n cidrs?.map((c: string) => {\n return { label: c, value: c };\n }) || [];\n }\n\n return f;\n });\n const newFields = fields;\n newFields.step1 = newStep1;\n setFields(newFields);\n }\n }, [cidrs, fields]);\n\n useEffect(() => {\n if (vpcs && vpcs.length > 0) {\n const newStep1 = fields.step1.map((f: any) => {\n if (f.name && f.name[0] === 'vpcUuid') {\n f.options =\n vpcs?.map((item: Vpc) => {\n return {\n label: `${item?.getName()} - ${item?.getCidrIpv4Block()}`,\n value: item?.id,\n };\n }) || [];\n }\n\n return f;\n });\n const newFields = fields;\n newFields.step1 = newStep1;\n setFields(newFields);\n }\n }, [vpcs]);\n\n useEffect(() => {\n if (selectedVpcUuid) {\n const newFormValues = initialFormValues;\n newFormValues.vpcUuid = selectedVpcUuid;\n setInitialFormValues(newFormValues);\n\n const newStep1 = fields.step1.map((f: any) => {\n if (f.name && f.name[0] === 'vpcUuid') {\n f.disabled = true;\n }\n return f;\n });\n const newFields = fields;\n newFields.step1 = newStep1;\n setFields(newFields);\n }\n }, [selectedVpcUuid]);\n\n const doApiRequest = async ({\n accepterCidr,\n accepterOwnerId,\n accepterRegion,\n accepterVpcId,\n vpcUuid,\n }: CreatePeerParams) => {\n try {\n await VpcService.createPeer({\n accepterCidr,\n accepterOwnerId,\n accepterRegion,\n accepterVpcId,\n cloud,\n region,\n vpcUuid,\n });\n\n notification.open({\n message: 'Create VPC peering',\n description: `New VPC peering successfully created!`,\n icon: ,\n });\n trackEvent(CLICK_EVENT, DATASTORE_ADDING_VPC_PEERING_SUCCESSFULLY);\n return true;\n } catch (e) {\n trackEvent(CLICK_EVENT, DATASTORE_ADDING_VPC_PEERING_FAILED);\n notification.open({\n message: 'Create VPC peering',\n description: `There was an error creating your VPC peering. ${e}`,\n icon: ,\n });\n\n console.error(e);\n\n throw e;\n }\n };\n\n return (\n : }\n onSubmit={doApiRequest}\n onSuccess={onSuccess}\n fields={fields.step1}\n buttonType={buttonType}\n buttonClassName={buttonClassName}\n formValues={initialFormValues}\n submitText=\"Create\"\n formLayout=\"vertical\"\n useGrid={true}\n >\n \n

Create new peering connection

\n
\n \n );\n}\n\nexport default CreateVpcPeerButton;\n","import { useEffect, useState } from 'react';\nimport VpcService from '../../services/VpcService';\nimport VpcPeering from '../../types/VpcPeering';\n\nexport default function useVpcPeers(\n cloud?: string,\n region?: string,\n vpcIds?: string[]\n) {\n const [loaded, setLoaded] = useState(false);\n const [loading, setLoading] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [vpcPeers, setVpcPeers] = useState(\n undefined\n );\n const ids = vpcIds?.join(',') || '';\n\n const load = async () => {\n if (cloud && region && vpcIds && vpcIds.length > 0) {\n try {\n setLoading(true);\n // @todo handler error and find a way to display error message\n const details = await Promise.all(\n vpcIds.map(async (vpcId) => {\n return await VpcService.getVpcPeer(vpcId);\n })\n );\n setVpcPeers(details.flat());\n setError(null);\n setLoaded(true);\n } catch (e: any) {\n console.log('error', e);\n setError(e);\n } finally {\n setLoading(false);\n }\n }\n };\n\n const refresh = async () => {\n await load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n await load();\n };\n\n init();\n }, [cloud, region, ids]);\n\n return { vpcPeers, refresh, loading, loaded, updating, error };\n}\n","// from https://gist.github.com/mbelsky/72c1117a63489daf8e6067049d4532d0\n// based on https://usehooks.com/useHover/\nimport { useState, useCallback, useRef } from 'react';\n\nexport const useHover = (): [\n (node?: T | null) => void,\n boolean\n] => {\n const [value, setValue] = useState(false);\n\n // Wrap in useCallback so we can use in dependencies below\n const handleMouseOver = useCallback(() => setValue(true), []);\n const handleMouseOut = useCallback(() => setValue(false), []);\n\n // Keep track of the last node passed to callbackRef\n // so we can remove its event listeners.\n const ref = useRef();\n\n // Use a callback ref instead of useEffect so that event listeners\n // get changed in the case that the returned ref gets added to\n // a different element later. With useEffect, changes to ref.current\n // wouldn't cause a rerender and thus the effect would run again.\n const callbackRef = useCallback<(node?: null | T) => void>(\n (node) => {\n if (ref.current) {\n ref.current.removeEventListener('mouseover', handleMouseOver);\n ref.current.removeEventListener('mouseout', handleMouseOut);\n }\n\n ref.current = node || undefined;\n\n if (ref.current) {\n ref.current.addEventListener('mouseover', handleMouseOver);\n ref.current.addEventListener('mouseout', handleMouseOut);\n }\n },\n [handleMouseOver, handleMouseOut]\n );\n\n return [callbackRef, value];\n};\n","import React, { ReactElement } from 'react';\nimport { useHover } from '../core/hooks/useHover';\nimport styles from './Hoverable.module.less';\n\nexport type HoverableProps = {\n icon?: any;\n children?: any;\n};\n\nfunction Hoverable({ icon, children }: HoverableProps): ReactElement {\n const [hoverRef, isHovered] = useHover();\n\n return (\n
\n {children}\n {isHovered ? (\n {icon}\n ) : null}\n
\n );\n}\n\nexport default Hoverable;\n","import React from 'react';\nimport { Button, Space } from 'antd';\nimport classNames from 'classnames';\nimport styles from './AppButton.module.less';\nimport { SizeType } from 'antd/lib/config-provider/SizeContext';\n\nexport default AppButton;\nexport type AppButtonProps = any & {\n textSize?: SizeType;\n testId?: string;\n};\n\nfunction AppButton({\n textSize = 'middle',\n children,\n icon,\n testId = 'AppButton',\n className,\n ...rest\n}: AppButtonProps) {\n return (\n \n {children ? (\n \n {icon}\n \n {children}\n \n \n ) : (\n icon\n )}\n \n );\n}\n","import React, { ReactElement, useState } from 'react';\nimport styles from './CopyToClipboardText.module.less';\nimport { CopyOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport { notification, Tooltip } from 'antd';\nimport Hoverable from './Hoverable';\nimport classNames from 'classnames';\nimport AppButton from './ccx/common/AppButton';\nimport CcxIconCheckCircle from './ccx/icons/CcxIconCheckCircle';\n\nexport type CopyToClipboardTextProps = {\n text?: string;\n preview?: string;\n hoverable?: boolean;\n tooltip?: string;\n nowrap?: boolean;\n buttonProps?: any;\n successMessage?: string;\n showPreview?: boolean;\n};\n\nfunction CopyToClipboardText({\n text,\n preview,\n hoverable = true,\n tooltip = 'Click to copy to clipboard.',\n nowrap,\n buttonProps = {},\n successMessage,\n showPreview = true,\n}: CopyToClipboardTextProps): ReactElement {\n const [isHovered, setIsHovered] = useState(false);\n\n const handleMouseEnter = () => setIsHovered(true);\n const handleMouseLeave = () => setIsHovered(false);\n\n const handleClick = () => {\n copyMessage(text);\n notification.open({\n message: 'Clipboard Updated',\n description: successMessage || 'Copied to clipboard.',\n icon: ,\n });\n };\n\n const copyMessage = (val: string | undefined) => {\n if (!val) {\n return;\n }\n const selBox = document.createElement('textarea');\n selBox.style.position = 'fixed';\n selBox.style.left = '0';\n selBox.style.top = '0';\n selBox.style.opacity = '0';\n selBox.value = val;\n document.body.appendChild(selBox);\n selBox.focus();\n selBox.select();\n document.execCommand('copy');\n document.body.removeChild(selBox);\n };\n\n return hoverable ? (\n \n : }>\n \n {preview ? preview : text}\n \n \n \n ) : (\n \n \n \n {showPreview ? (preview ? preview : text) : ''}{' '}\n : }\n {...buttonProps}\n />\n \n \n \n );\n}\n\nexport default CopyToClipboardText;\n","import { InfoCircleTwoTone } from '@ant-design/icons';\nimport React from 'react';\n\ntype Props = {\n twoToneColor?: string;\n};\n\nconst CcxIconInfoCircleTwoTone = ({ twoToneColor }: Props) => {\n return (\n \n );\n};\n\nexport default CcxIconInfoCircleTwoTone;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport {\n Col,\n Collapse,\n Row,\n Modal,\n notification,\n Space,\n Descriptions,\n Menu,\n Dropdown,\n PageHeader,\n} from 'antd';\nimport useContentProviders from '../../core/hooks/useContentProviders';\nimport AppLoading from '../AppLoading';\nimport AppEmpty from '../AppEmpty';\nimport styles from './VpcPeers.module.less';\nimport AppTable from '../AppTable';\nimport AppConfirmDialog from '../AppConfirmDialog';\nimport { MenuOutlined } from '@ant-design/icons';\nimport VpcService from '../../services/VpcService';\nimport AppLabeledIconStatus from '../ccx/common/AppLabeledIconStatus';\nimport CcxIconCheckCircle from '../ccx/icons/CcxIconCheckCircle';\nimport CcxIconExclamationCircle from '../ccx/icons/CcxIconExclamationCircle';\nimport CreateVpcPeerButton from './CreateVpcPeerButton';\nimport useVpcPeers from '../../core/hooks/useVpcPeers';\nimport { useHistory, useParams } from 'react-router-dom';\nimport VpcPeering from '../../types/VpcPeering';\nimport useVpc from '../../core/hooks/useVpc';\nimport FriendlyDateTime from '../../types/FriendlyDateTime';\nimport CopyToClipboardText from '../CopyToClipboardText';\nimport CcxIconCloseCircleTwoTone from '../ccx/icons/CcxIconCloseCircleTwoTone';\nimport CcxIconInfoCircleTwoTone from '../ccx/icons/CcxIconInfoCircleTwoTone';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport usePiwikPro from '../../core/hooks/usePiwikPro';\nimport { INITIATED_ADDING_NEW_VPC } from '../../core/PiwikConstants';\n\ninterface UrlProps {\n projectUuid: string;\n vpcUuid: string;\n}\n\ninterface Props extends CcxComponentProps {}\n\nfunction VpcPeers({ testId = 'VpcPeers' }: Props): ReactElement {\n const { trackPageView } = usePiwikPro();\n const history = useHistory();\n const { projectUuid, vpcUuid } = useParams();\n const { loading: loadingProviders } = useContentProviders();\n const [cloud, setCloud] = useState(undefined);\n const [region, setRegion] = useState(undefined);\n\n const {\n vpcPeers,\n loading: loadingPeers,\n loaded: peersLoaded,\n refresh: refreshPeers,\n } = useVpcPeers(cloud, region, [vpcUuid]);\n const { vpc } = useVpc(cloud, region, vpcUuid);\n const [tableData, setTableData] = useState([]);\n\n useEffect(() => {\n trackPageView(INITIATED_ADDING_NEW_VPC);\n }, []);\n\n const [deleting, setDeleting] = useState(false);\n const { Panel } = Collapse;\n\n useEffect(() => {\n if (history) {\n setCloud(history.location.state.cloud);\n setRegion(history.location.state.region);\n }\n }, [history]);\n\n useEffect(() => {\n const AUTO_REFRESH_INTERVAL = 10000;\n const interval = setInterval(async () => {\n refreshPeers && (await refreshPeers());\n }, AUTO_REFRESH_INTERVAL);\n\n return () => clearInterval(interval);\n }, [cloud, region]);\n\n useEffect(() => {\n if (vpcPeers && vpcPeers.length > 0) {\n const data = vpcPeers\n .filter((vpcPeering: VpcPeering) => {\n return vpcPeering.vpcId === vpcUuid;\n })\n ?.map((vpcPeering: VpcPeering) => {\n return {\n ...vpcPeering,\n vpcCidr: vpcPeering.getCidrIpv4Block(),\n peerRegion: vpcPeering?.targetCloudRegion,\n peerCidr: vpcPeering.getCidrIpv4Block() || '---',\n isStatusOk: vpcPeering.isStatusOk(),\n isStatusError: vpcPeering.isStatusError(),\n isStatusWarning: vpcPeering.isStatusWarning(),\n isStatusDeleted: vpcPeering.isStatusDeleted(),\n isStatusDeleting: vpcPeering.isStatusDeleting(),\n isStatusPending: vpcPeering.isStatusPending(),\n // @todo wait for backend, expiration_date is missing in response atm\n // expirationTime: vpcPeering.getExpirationTime(),\n statusMessage: vpcPeering.getStatusMessage(),\n vpcPeeringConnectionId: vpcPeering.id,\n expandableRowContent: (\n \n \n \n \n \n \n\n \n \n \n\n \n \n \n \n \n \n ),\n };\n });\n setTableData(data);\n }\n }, [vpcPeers]);\n\n function handleMenuOptionClick(e: any) {\n // delete\n if (e.key === 'delete') {\n // showConfirm();\n }\n\n // viewPeerings\n if (e.key === 'viewPeerings') {\n // showConfirm();\n }\n\n // createPeering\n if (e.key === 'createPeering') {\n // showConfirm();\n }\n }\n\n const columns = [\n {\n title: 'Region',\n key: 'region',\n dataIndex: 'peerRegion',\n },\n {\n title: 'CIDR',\n key: 'peerCidr',\n dataIndex: 'peerCidr',\n },\n {\n title: 'Status',\n key: 'status',\n render: (value: string, record: any) => {\n let statusClassName = undefined;\n let statusIcon = undefined;\n if (record?.isStatusOk) {\n // ok\n statusClassName = styles.VpcPeersStatusOk;\n statusIcon = ;\n } else if (record?.isStatusError) {\n // error\n statusClassName = styles.VpcPeersStatusError;\n statusIcon = ;\n } else if (record?.isStatusWarning) {\n // error\n statusClassName = styles.VpcPeersStatusWarning;\n statusIcon = ;\n }\n return (\n
\n \n {record?.isStatusPending ? (\n \n Peering request expires{' '}\n {new FriendlyDateTime({\n date: record?.expirationTime,\n }).getFullDate()}\n \n ) : null}\n
\n );\n },\n },\n {\n title: 'Actions',\n key: 'actions',\n width: 85,\n render: (text: string, record: any) => {\n const onConfirmDelete = () => {\n return new Promise(async (resolve, reject) => {\n setDeleting(true);\n\n // if (deployment) {\n notification.open({\n message: 'Remove Peering Connection',\n description:\n 'The selected peering connection will be removed soon.',\n icon: ,\n });\n\n Modal.destroyAll();\n\n try {\n if (!record?.vpcId) {\n throw new Error('no VPC ID has provided');\n }\n const data = {\n vpcId: record?.vpcId,\n cloud,\n region,\n peeringId: record.id,\n };\n await VpcService.deletePeer(data);\n\n refreshPeers && (await refreshPeers());\n\n notification.open({\n message: 'Remove Peering Connection',\n description:\n 'Peering connection successfully removed.',\n icon: ,\n });\n\n setDeleting(false);\n resolve(null);\n } catch (e) {\n notification.open({\n message: 'Remove Peering Connection',\n description: `There was an error removing the peering connection. ${e}`,\n icon: (\n \n ),\n });\n\n console.error(e);\n\n setDeleting(false);\n reject();\n }\n }).catch(() => console.log('Oops errors!'));\n };\n\n const menu = (\n \n \n \n \n \n );\n\n return (\n
\n {record.isStatusDeleted ||\n record.isStatusDeleting ? null : (\n \n \n \n )}\n
\n );\n },\n },\n ];\n\n return (\n
\n \n \n {\n history.push(`/projects/${projectUuid}/vpcs`);\n }}\n title=\"Back to VPCs\"\n />\n \n \n \n {/* {\n history.push(\n `/projects/${projectUuid}/vpcs/${vpcUuid}/peerings`\n );\n }}\n >\n Show all peerings\n */}\n \n \n \n \n
\n {loadingProviders || (loadingPeers && !peersLoaded) ? (\n \n ) : null}\n {(!vpcPeers || vpcPeers.length === 0) &&\n !loadingProviders &&\n !loadingPeers ? (\n \n ) : null}\n {!loadingProviders &&\n (!loadingPeers || peersLoaded) &&\n vpcPeers &&\n vpcPeers?.length > 0 ? (\n
\n \n \n \n {/* */}\n \n \n \n\n \n \n \n \n \n
\n ) : null}\n
\n
\n );\n}\n\nexport default VpcPeers;\n","import { useEffect, useState } from 'react';\nimport VpcService from '../../services/VpcService';\nimport Vpc from '../../types/Vpc';\n\nexport default function useVpc(\n cloud?: string,\n region?: string,\n vpcUuid?: string\n) {\n const [loading, setLoading] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [vpc, setVpc] = useState(undefined);\n\n const load = async () => {\n if (cloud && region && vpcUuid) {\n try {\n const details = await VpcService.getVpc({\n cloud,\n region,\n vpcUuid,\n });\n setVpc(details);\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, [cloud, region, vpcUuid]);\n\n return { vpc, refresh, loading, updating, error };\n}\n","export type BillingAddressClassProps = {\n city: string;\n country: string;\n line_1: string;\n line_2: string;\n postal_code: string;\n state: string;\n};\n\nexport default class BillingAddress {\n public readonly city: string;\n public readonly country: string;\n public readonly line1: string;\n public readonly line2: string;\n public readonly postalCode: string;\n public readonly state: string;\n\n constructor(props: BillingAddressClassProps) {\n this.city = props.city || '';\n this.country = props.country || '';\n this.line1 = props.line_1 || '';\n this.line2 = props.line_2 || '';\n this.postalCode = props.postal_code || '';\n this.state = props.state || '';\n }\n}\n","export type BillingUserDataClassProps = {\n company_name: string;\n eu_vat_id: string;\n first_name: string;\n last_name: string;\n};\n\nexport interface BillingUserDataInterface {\n companyName: string;\n euVatId: string;\n firstName: string;\n lastName: string;\n}\n\nexport default class BillingUserData implements BillingUserDataInterface {\n readonly companyName: string;\n readonly euVatId: string;\n readonly firstName: string;\n readonly lastName: string;\n\n constructor(props: BillingUserDataClassProps) {\n this.companyName = props.company_name || 'N/A';\n this.euVatId = props.eu_vat_id || 'N/A';\n this.firstName = props.first_name;\n this.lastName = props.last_name;\n }\n}\n","import BillingAddress, { BillingAddressClassProps } from './BillingAddress';\nimport BillingUserData, { BillingUserDataClassProps } from './BillingUserData';\n\nexport type SubscriptionBillingUserClassProps = {\n created_at: string;\n stripe_customer_id: string;\n stripe_subscription_id: string;\n updated_at: string;\n user_data: BillingUserDataClassProps;\n address_data: BillingAddressClassProps;\n user_id: string;\n uuid: string;\n};\n\nexport interface SubscriptionBillingUserInterface {\n createdAt: string;\n stripeCustomerId: string;\n stripeSubscriptionId: string;\n updatedAt: string;\n userData?: BillingUserData;\n addressData?: BillingAddress;\n userId: string;\n uuid: string;\n}\n\nexport default class SubscriptionBillingUser\n implements SubscriptionBillingUserInterface\n{\n readonly createdAt: string;\n readonly stripeCustomerId: string;\n readonly stripeSubscriptionId: string;\n readonly updatedAt: string;\n readonly userData?: BillingUserData;\n readonly addressData?: BillingAddress;\n readonly userId: string;\n readonly uuid: string;\n\n constructor(props: SubscriptionBillingUserClassProps) {\n this.createdAt = props.created_at;\n this.stripeCustomerId = props.stripe_customer_id;\n this.stripeSubscriptionId = props.stripe_subscription_id;\n this.updatedAt = props.updated_at;\n this.userData = props.user_data\n ? new BillingUserData(props.user_data)\n : undefined;\n this.addressData = props.address_data\n ? new BillingAddress(props.address_data)\n : undefined;\n this.userId = props.user_id;\n this.uuid = props.uuid;\n }\n\n getBillingAddress(): BillingAddress | undefined {\n return this.addressData;\n }\n\n getUserData(): BillingUserData | undefined {\n return this.userData;\n }\n}\n","import SubscriptionBillingUser from './SubscriptionBillingUser';\n\nexport type SubscriptionClassProps = {\n billing_user: any;\n err?: string;\n valid: boolean;\n};\n\nexport interface SubscriptionInterface {\n billingUser?: SubscriptionBillingUser;\n valid: boolean;\n}\n\nexport default class Subscription implements SubscriptionInterface {\n readonly billingUser?: SubscriptionBillingUser;\n readonly valid: boolean;\n\n constructor(props: SubscriptionClassProps) {\n this.billingUser =\n props.billing_user !== null\n ? new SubscriptionBillingUser(props.billing_user)\n : undefined;\n this.valid = props.valid;\n }\n\n isValid() {\n return this.valid;\n }\n}\n","export type CardClassProps = {\n brand: string;\n country: string;\n default: boolean;\n exp_month: number;\n exp_year: number;\n fingerprint: string;\n id: string;\n last4: string;\n error: string;\n};\n\nexport interface CardInterface {\n brand: string;\n country: string;\n default: boolean;\n expMonth: number;\n expYear: number;\n fingerprint: string;\n id: string;\n last4: string;\n error: string;\n}\n\nexport default class Card implements CardInterface {\n readonly brand: string;\n readonly country: string;\n readonly default: boolean;\n readonly expMonth: number;\n readonly expYear: number;\n readonly fingerprint: string;\n readonly id: string;\n readonly last4: string;\n readonly error: string;\n\n constructor(props: CardClassProps) {\n this.brand = props.brand;\n this.country = props.country;\n this.default = props.default;\n this.expMonth = props.exp_month;\n this.expYear = props.exp_year;\n this.fingerprint = props.fingerprint;\n this.id = props.id;\n this.last4 = props.last4;\n this.error = props.error;\n }\n\n getElegantBrandName(): string {\n return this.brand.charAt(0).toUpperCase() + this.brand.slice(1);\n }\n\n isValid(): boolean {\n return this.error.length === 0 ? true : false;\n }\n}\n","export type CouponClassProps = {\n amount_off: number;\n coupon: string;\n duration: string;\n duration_in_months: number;\n name: string;\n percent_off: number;\n valid: boolean;\n};\n\nexport interface CouponInterface {\n amountOff: number;\n coupon: string;\n duration: string;\n durationInMonths: number;\n name: string;\n percentOff: number;\n valid: boolean;\n isValid: Function;\n}\n\nexport default class Coupon implements CouponInterface {\n readonly amountOff: number;\n readonly coupon: string;\n readonly duration: string;\n readonly durationInMonths: number;\n readonly name: string;\n readonly percentOff: number;\n readonly valid: boolean;\n\n constructor(props: CouponClassProps) {\n this.amountOff = props.amount_off;\n this.coupon = props.coupon;\n this.duration = props.duration;\n this.durationInMonths = props.duration_in_months;\n this.name = props.name;\n this.percentOff = props.percent_off;\n this.valid = props.valid;\n }\n\n isValid() {\n return this.valid === true;\n }\n}\n","import PaymentMethod, {\n PaymentMethodClassProps,\n PaymentMethodInterface,\n} from './PaymentMethod';\n\nexport type InvoiceClassProps = {\n amount: number;\n date: string;\n id: string;\n payment_method: any;\n pdf: string;\n status: string;\n currency_prefix: string;\n currency_suffix: string;\n};\n\nexport interface InvoiceInterface {\n amount: number;\n date: string;\n invoiceNumber: string;\n paymentMethod: PaymentMethodInterface;\n pdf: string;\n status: string;\n getStatus: Function;\n getPaymentMethodString: Function;\n isStatusOk: Function;\n}\n\nconst STATUS_OK = 'PAID';\n\nexport default class Invoice implements InvoiceInterface {\n readonly amount: number;\n readonly date: string;\n readonly invoiceNumber: string;\n readonly paymentMethod: PaymentMethodInterface;\n readonly pdf: string;\n readonly status: string;\n readonly currencyPrefix: string;\n readonly currencySuffix: string;\n\n constructor(props: InvoiceClassProps) {\n this.amount = props.amount;\n this.date = props.date;\n this.invoiceNumber = props.id;\n this.paymentMethod = props.payment_method;\n this.pdf = props.pdf;\n this.status = props.status;\n this.currencyPrefix = props.currency_prefix || '€';\n this.currencySuffix = props.currency_suffix || 'EUR';\n }\n\n getStatus() {\n return this.status[0].toUpperCase() + this.status.slice(1);\n }\n\n getPaymentMethodString() {\n return this.paymentMethod?.card\n ? `${this.paymentMethod?.card?.brand} *${this.paymentMethod?.card?.last4}`\n : 'N/A';\n }\n\n isStatusOk() {\n return this.status.toUpperCase() === STATUS_OK;\n }\n}\n","export type SetupIntentClassProps = {\n status: string;\n setup_intent_id: string;\n payment_method_id: string;\n};\n\nexport interface SetupIntentInterface {\n status: string;\n setupIntentID: string;\n paymentMethodID: string;\n}\n\nexport default class SetupIntent implements SetupIntentInterface {\n readonly status: string;\n readonly setupIntentID: string;\n readonly paymentMethodID: string;\n\n constructor(props: SetupIntentClassProps) {\n this.status = props.status;\n this.setupIntentID = props.setup_intent_id;\n this.paymentMethodID = props.payment_method_id;\n }\n}\n","import ApiService from './ApiService';\nimport { API_BILLING } from '../core/CcxEnv';\nimport Address from '../types/Address';\nimport BillingUserData from '../types/BillingUserData';\nimport Subscription from '../types/Subscription';\nimport Card from '../types/Card';\nimport SubscriptionBillingUser from '../types/SubscriptionBillingUser';\nimport Coupon from '../types/Coupon';\nimport Invoice from '../types/Invoice';\nimport SetupIntent from '../types/SetupIntent';\n\n// constants\nconst API_URL = API_BILLING;\n\ntype CreateUserSubscriptionParams = {\n address: Address;\n cardToken?: string;\n paymentMethod?: string;\n coupon?: string;\n userData: BillingUserData;\n};\n\nexport default class BillingService extends ApiService {\n /**\n * Check if the current user in session has a valid subscription.\n */\n static async checkUserSubscription(): Promise {\n const result = await this.request('GET', `subscription`);\n return new Subscription(result);\n }\n\n /**\n * Create billing user for current user in session.\n * @param {Address} address\n * @param {string} cardToken\n * @param {string} coupon\n * @param {BillingUserData} userData\n */\n static async createBillingUser({\n address,\n coupon,\n userData,\n }: CreateUserSubscriptionParams): Promise {\n const requestData = {\n data: {\n address: {\n line_1: address.line1,\n line_2: address.line2,\n city: address.city,\n country: address.country,\n postal_code: address.postalCode,\n state: address.state,\n },\n coupon,\n user_data: {\n first_name: userData.firstName,\n last_name: userData.lastName,\n company_name: userData.companyName,\n eu_vat_id: userData.euVatId,\n },\n },\n };\n return await this.request('POST', `users`, requestData);\n }\n\n /**\n * Create a subscription for current user in session.\n * @param {Address} address\n * @param {string} cardToken\n * @param {string} coupon\n * @param {BillingUserData} userData\n */\n static async createUserSubscription({\n address,\n paymentMethod,\n coupon,\n userData,\n }: CreateUserSubscriptionParams): Promise {\n const requestData = {\n data: {\n address: {\n line_1: address.line1,\n line_2: address.line2,\n city: address.city,\n country: address.country,\n postal_code: address.postalCode,\n state: address.state,\n },\n payment_method: paymentMethod,\n coupon,\n user_data: {\n first_name: userData.firstName,\n last_name: userData.lastName,\n company_name: userData.companyName,\n eu_vat_id: userData.euVatId,\n },\n },\n };\n return await this.request('POST', `subscription`, requestData);\n }\n\n /**\n * Edit a subscription for current user in session.\n * @param {Address} address\n * @param {BillingUserData} userData\n *\n */\n static async editUserSubscription(\n { address, userData }: CreateUserSubscriptionParams,\n uuid: string\n ): Promise {\n const requestData = {\n data: {\n address: {\n line_1: address.line1,\n line_2: address.line2,\n city: address.city,\n country: address.country,\n postal_code: address.postalCode,\n state: address.state,\n },\n user_data: {\n first_name: userData.firstName,\n last_name: userData.lastName,\n company_name: userData.companyName,\n eu_vat_id: userData.euVatId,\n },\n },\n };\n return await this.request('PUT', `billing_users/${uuid}`, requestData);\n }\n\n /**\n * End the subscription of the current user in session.\n */\n static async deleteUserSubscription(): Promise {\n return await this.request('DELETE', `subscription`);\n }\n\n /**\n * Get a list of the cards for the current user in session.\n */\n static async getCards(): Promise {\n const result = await this.request('GET', `cards`);\n return {\n cards: result?.cards?.map((r: any) => new Card(r)),\n billingUser: new SubscriptionBillingUser(result?.billing_user),\n };\n }\n\n /**\n * Add a new card to the current user in session.\n * @param {string} cardToken\n */\n static async addCard(cardToken?: string): Promise {\n const requestData = {\n data: {\n token: cardToken,\n },\n };\n return await this.request('POST', `cards`, requestData);\n }\n\n /**\n * Add a setup intents for the current user in session.\n * @param {string} cardToken\n */\n static async createBillingIntent(cardToken?: string): Promise {\n try {\n const requestData = {\n data: {\n token: cardToken,\n },\n };\n const result = await this.request(\n 'POST',\n `setupintents`,\n requestData\n );\n\n return new SetupIntent(result);\n } catch (e) {\n throw new Error('There was an error adding your Card. ' + e);\n }\n }\n\n /**\n * Removes a card for the current user in session.\n * @param {string} cardId\n */\n static async deleteCard(cardId: string): Promise {\n return await this.request('DELETE', `cards/${cardId}`);\n }\n\n /**\n * Check if the current user in session has a valid subscription.\n * @param {string} coupon\n */\n static async checkCoupon(coupon: string): Promise {\n const requestData = {\n data: {\n coupon,\n },\n };\n try {\n const result = await this.request(\n 'POST',\n `coupons/check`,\n requestData\n );\n return {\n coupon: new Coupon(result?.coupon),\n };\n } catch (e) {\n return {\n coupon: null,\n };\n }\n }\n\n /**\n * Get the coupon for the current user in session.\n */\n static async getCoupons(): Promise {\n const result = await this.request('GET', `coupons/customer`);\n\n return result;\n }\n\n /**\n * Add a new coupon to the current user in session.\n * @param {string} coupon\n */\n static async addCoupon(coupon?: string): Promise {\n const requestData = {\n data: {\n coupon,\n },\n };\n return await this.request('POST', `coupons/customer`, requestData);\n }\n\n /**\n * delete coupon for the current user in session.\n */\n static async deleteCoupon(): Promise {\n return await this.request('DELETE', `coupons/customer`);\n }\n\n /**\n * Set a card as the default payment method for the current user in session.\n * @param {string} cardId\n */\n static async setDefaultCard(cardId: string): Promise {\n return await this.request('PATCH', `cards/${cardId}/set-default`);\n }\n\n /**\n * Get a list of the invoices.\n */\n static async getInvoices(): Promise {\n const result = await this.request('GET', `invoices`);\n\n return result?.invoices?.map((i: any) => new Invoice(i));\n }\n\n /**\n * Get next invoice.\n */\n static async getNextInvoice(): Promise {\n const result = await this.request('GET', `invoices/next`);\n\n return new Invoice(result.invoice);\n }\n\n protected static getApiUrl() {\n return API_URL;\n }\n}\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { Col, Row, Table, Tooltip } from 'antd';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport styles from './AppGridTable.module.less';\nimport { LoadingOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport { Spin } from 'antd';\n\ninterface Props extends CcxComponentProps {\n columns: any[];\n rows: any;\n isDatastore?: boolean;\n}\n\nfunction AppGridTable({\n columns,\n rows,\n testId = 'AppGridTable',\n isDatastore = false,\n}: Props): ReactElement {\n return (\n \n
\n \n {columns?.map((c: any, i: number) => (\n \n {c.title}\n \n ))}\n \n {rows?.map((r: any, i: number) => {\n let cssClassname = styles.AppGridTableDataRow;\n cssClassname = r?.borderAlert\n ? `${cssClassname} ${styles.AppGridTableDataRowAlert}`\n : `${cssClassname} ${styles.AppGridTableDataRowNormal}`;\n\n const row = (\n \n {r?.columns?.map((c: any, i: number) => {\n let cssClassName;\n switch (c.align) {\n case 'center':\n cssClassName =\n styles.AppGridTableDataColCenter;\n break;\n case 'end':\n cssClassName =\n styles.AppGridTableDataColEnd;\n break;\n case 'start':\n default:\n cssClassName =\n styles.AppGridTableDataColStart;\n break;\n }\n cssClassName = c.disabled\n ? `${cssClassName} ${styles.AppGridTableDataColDisabled}`\n : `${cssClassName} ${styles.AppGridTableDataCol}`;\n\n return (\n \n {c.content}\n \n );\n })}\n \n );\n\n return r?.disabled ? (\n \n }\n >\n {row}\n \n ) : (\n row\n );\n })}\n
\n \n );\n}\n\nexport default AppGridTable;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CcxIconExclamationCircle from '../icons/CcxIconExclamationCircle';\nimport AppLabeledIconStatus from './AppLabeledIconStatus';\nimport styles from './IconLabelStatusError.module.less';\n\ninterface Props extends CcxComponentProps {\n label: string;\n showIcon?: boolean;\n}\n\nfunction IconLabelStatusError({\n label,\n showIcon,\n testId = 'IconLabelStatusError',\n}: Props): ReactElement {\n return (\n : undefined}\n className={styles.IconLabelStatusError}\n testId={testId}\n />\n );\n}\n\nexport default IconLabelStatusError;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CcxIconCheckCircle from '../icons/CcxIconCheckCircle';\nimport AppLabeledIconStatus from './AppLabeledIconStatus';\nimport styles from './IconLabelStatusOk.module.less';\n\ninterface Props extends CcxComponentProps {\n label: string;\n showIcon?: boolean;\n}\n\nfunction IconLabelStatusOk({\n label,\n showIcon,\n testId = 'IconLabelStatusOk',\n}: Props): ReactElement {\n return (\n : undefined}\n className={styles.IconLabelStatusOk}\n testId={testId}\n />\n );\n}\n\nexport default IconLabelStatusOk;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport styles from './PrettyNumber.module.less';\n\ninterface Props extends CcxComponentProps {\n precision?: number;\n prefix?: any;\n sufix?: any;\n value: number;\n}\n\nfunction PrettyNumber({\n className,\n precision,\n prefix,\n sufix,\n value,\n testId = 'PrettyNumber',\n}: Props): ReactElement {\n const formattedValue = value.toFixed(precision);\n return (\n
\n {prefix}\n {formattedValue}\n {sufix}\n
\n );\n}\n\nexport default PrettyNumber;\n","import { useEffect, useState } from 'react';\nimport BillingService from '../../services/BillingService';\nimport Card from '../../types/Card';\nimport SubscriptionBillingUser from '../../types/SubscriptionBillingUser';\n\nexport default function useCards() {\n const [loading, setLoading] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [cards, setCards] = useState(undefined);\n const [billingUser, setBillingUser] = useState<\n SubscriptionBillingUser | undefined\n >(undefined);\n\n const load = async () => {\n try {\n const { cards, billingUser } = await BillingService.getCards();\n setCards(cards);\n setBillingUser(billingUser);\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, []);\n\n return { cards, billingUser, refresh, loading, updating, error };\n}\n","const countries = [\n { code: 'AF', name: 'Afghanistan', isEu: false },\n { code: 'AX', name: '\\u00c5land Islands', isEu: false },\n { code: 'AL', name: 'Albania', isEu: false },\n { code: 'DZ', name: 'Algeria', isEu: false },\n { code: 'AS', name: 'American Samoa', isEu: false },\n { code: 'AD', name: 'Andorra', isEu: false },\n { code: 'AO', name: 'Angola', isEu: false },\n { code: 'AI', name: 'Anguilla', isEu: false },\n { code: 'AQ', name: 'Antarctica', isEu: false },\n { code: 'AG', name: 'Antigua and Barbuda', isEu: false },\n { code: 'AR', name: 'Argentina', isEu: false },\n { code: 'AM', name: 'Armenia', isEu: false },\n { code: 'AW', name: 'Aruba', isEu: false },\n { code: 'AU', name: 'Australia', isEu: false },\n { code: 'AT', name: 'Austria', isEu: true },\n { code: 'AZ', name: 'Azerbaijan', isEu: false },\n { code: 'BS', name: 'Bahamas', isEu: false },\n { code: 'BH', name: 'Bahrain', isEu: false },\n { code: 'BD', name: 'Bangladesh', isEu: false },\n { code: 'BB', name: 'Barbados', isEu: false },\n { code: 'BY', name: 'Belarus', isEu: false },\n { code: 'BE', name: 'Belgium', isEu: true },\n { code: 'BZ', name: 'Belize', isEu: false },\n { code: 'BJ', name: 'Benin', isEu: false },\n { code: 'BM', name: 'Bermuda', isEu: false },\n { code: 'BT', name: 'Bhutan', isEu: false },\n { code: 'BO', name: 'Bolivia, Plurinational State of', isEu: false },\n { code: 'BQ', name: 'Bonaire, Sint Eustatius and Saba', isEu: false },\n { code: 'BA', name: 'Bosnia and Herzegovina', isEu: false },\n { code: 'BW', name: 'Botswana', isEu: false },\n { code: 'BV', name: 'Bouvet Island', isEu: false },\n { code: 'BR', name: 'Brazil', isEu: false },\n { code: 'IO', name: 'British Indian Ocean Territory', isEu: false },\n { code: 'BN', name: 'Brunei Darussalam', isEu: false },\n { code: 'BG', name: 'Bulgaria', isEu: true },\n { code: 'BF', name: 'Burkina Faso', isEu: false },\n { code: 'BI', name: 'Burundi', isEu: false },\n { code: 'KH', name: 'Cambodia', isEu: false },\n { code: 'CM', name: 'Cameroon', isEu: false },\n { code: 'CA', name: 'Canada', isEu: false },\n { code: 'CV', name: 'Cape Verde', isEu: false },\n { code: 'KY', name: 'Cayman Islands', isEu: false },\n { code: 'CF', name: 'Central African Republic', isEu: false },\n { code: 'TD', name: 'Chad', isEu: false },\n { code: 'CL', name: 'Chile', isEu: false },\n { code: 'CN', name: 'China', isEu: false },\n { code: 'CX', name: 'Christmas Island', isEu: false },\n { code: 'CC', name: 'Cocos (Keeling) Islands', isEu: false },\n { code: 'CO', name: 'Colombia', isEu: false },\n { code: 'KM', name: 'Comoros', isEu: false },\n { code: 'CG', name: 'Congo', isEu: false },\n { code: 'CD', name: 'Congo, the Democratic Republic of the', isEu: false },\n { code: 'CK', name: 'Cook Islands', isEu: false },\n { code: 'CR', name: 'Costa Rica', isEu: false },\n { code: 'CI', name: \"C\\u00f4te d'Ivoire\" },\n { code: 'HR', name: 'Croatia', isEu: true },\n { code: 'CU', name: 'Cuba', isEu: false },\n { code: 'CW', name: 'Cura\\u00e7ao', isEu: false },\n { code: 'CY', name: 'Cyprus', isEu: true },\n { code: 'CZ', name: 'Czech Republic', isEu: true },\n { code: 'DK', name: 'Denmark', isEu: true },\n { code: 'DJ', name: 'Djibouti', isEu: false },\n { code: 'DM', name: 'Dominica', isEu: false },\n { code: 'DO', name: 'Dominican Republic', isEu: false },\n { code: 'EC', name: 'Ecuador', isEu: false },\n { code: 'EG', name: 'Egypt', isEu: false },\n { code: 'SV', name: 'El Salvador', isEu: false },\n { code: 'GQ', name: 'Equatorial Guinea', isEu: false },\n { code: 'ER', name: 'Eritrea', isEu: false },\n { code: 'EE', name: 'Estonia', isEu: true },\n { code: 'ET', name: 'Ethiopia', isEu: false },\n { code: 'FK', name: 'Falkland Islands (Malvinas)', isEu: false },\n { code: 'FO', name: 'Faroe Islands', isEu: false },\n { code: 'FJ', name: 'Fiji', isEu: false },\n { code: 'FI', name: 'Finland', isEu: true },\n { code: 'FR', name: 'France', isEu: true },\n { code: 'GF', name: 'French Guiana', isEu: false },\n { code: 'PF', name: 'French Polynesia', isEu: false },\n { code: 'TF', name: 'French Southern Territories', isEu: false },\n { code: 'GA', name: 'Gabon', isEu: false },\n { code: 'GM', name: 'Gambia', isEu: false },\n { code: 'GE', name: 'Georgia', isEu: false },\n { code: 'DE', name: 'Germany', isEu: true },\n { code: 'GH', name: 'Ghana', isEu: false },\n { code: 'GI', name: 'Gibraltar', isEu: false },\n { code: 'GR', name: 'Greece', isEu: true },\n { code: 'GL', name: 'Greenland', isEu: false },\n { code: 'GD', name: 'Grenada', isEu: false },\n { code: 'GP', name: 'Guadeloupe', isEu: false },\n { code: 'GU', name: 'Guam', isEu: false },\n { code: 'GT', name: 'Guatemala', isEu: false },\n { code: 'GG', name: 'Guernsey', isEu: false },\n { code: 'GN', name: 'Guinea', isEu: false },\n { code: 'GW', name: 'Guinea-Bissau', isEu: false },\n { code: 'GY', name: 'Guyana', isEu: false },\n { code: 'HT', name: 'Haiti', isEu: false },\n { code: 'HM', name: 'Heard Island and McDonald Islands', isEu: false },\n { code: 'VA', name: 'Holy See (Vatican City State)', isEu: false },\n { code: 'HN', name: 'Honduras', isEu: false },\n { code: 'HK', name: 'Hong Kong', isEu: false },\n { code: 'HU', name: 'Hungary', isEu: true },\n { code: 'IS', name: 'Iceland', isEu: false },\n { code: 'IN', name: 'India', isEu: false },\n { code: 'ID', name: 'Indonesia', isEu: false },\n { code: 'IR', name: 'Iran, Islamic Republic of', isEu: false },\n { code: 'IQ', name: 'Iraq', isEu: false },\n { code: 'IE', name: 'Ireland', isEu: true },\n { code: 'IM', name: 'Isle of Man', isEu: false },\n { code: 'IL', name: 'Israel', isEu: false },\n { code: 'IT', name: 'Italy', isEu: true },\n { code: 'JM', name: 'Jamaica', isEu: false },\n { code: 'JP', name: 'Japan', isEu: false },\n { code: 'JE', name: 'Jersey', isEu: false },\n { code: 'JO', name: 'Jordan', isEu: false },\n { code: 'KZ', name: 'Kazakhstan', isEu: false },\n { code: 'KE', name: 'Kenya', isEu: false },\n { code: 'KI', name: 'Kiribati', isEu: false },\n { code: 'KP', name: \"Korea, Democratic People's Republic of\" },\n { code: 'KR', name: 'Korea, Republic of', isEu: false },\n { code: 'KW', name: 'Kuwait', isEu: false },\n { code: 'KG', name: 'Kyrgyzstan', isEu: false },\n { code: 'LA', name: \"Lao People's Democratic Republic\" },\n { code: 'LV', name: 'Latvia', isEu: true },\n { code: 'LB', name: 'Lebanon', isEu: false },\n { code: 'LS', name: 'Lesotho', isEu: false },\n { code: 'LR', name: 'Liberia', isEu: false },\n { code: 'LY', name: 'Libya', isEu: false },\n { code: 'LI', name: 'Liechtenstein', isEu: false },\n { code: 'LT', name: 'Lithuania', isEu: true },\n { code: 'LU', name: 'Luxembourg', isEu: true },\n { code: 'MO', name: 'Macao', isEu: false },\n {\n code: 'MK',\n name: 'Macedonia, the Former Yugoslav Republic of',\n isEu: false,\n },\n { code: 'MG', name: 'Madagascar', isEu: false },\n { code: 'MW', name: 'Malawi', isEu: false },\n { code: 'MY', name: 'Malaysia', isEu: false },\n { code: 'MV', name: 'Maldives', isEu: false },\n { code: 'ML', name: 'Mali', isEu: false },\n { code: 'MT', name: 'Malta', isEu: true },\n { code: 'MH', name: 'Marshall Islands', isEu: false },\n { code: 'MQ', name: 'Martinique', isEu: false },\n { code: 'MR', name: 'Mauritania', isEu: false },\n { code: 'MU', name: 'Mauritius', isEu: false },\n { code: 'YT', name: 'Mayotte', isEu: false },\n { code: 'MX', name: 'Mexico', isEu: false },\n { code: 'FM', name: 'Micronesia, Federated States of', isEu: false },\n { code: 'MD', name: 'Moldova, Republic of', isEu: false },\n { code: 'MC', name: 'Monaco', isEu: false },\n { code: 'MN', name: 'Mongolia', isEu: false },\n { code: 'ME', name: 'Montenegro', isEu: false },\n { code: 'MS', name: 'Montserrat', isEu: false },\n { code: 'MA', name: 'Morocco', isEu: false },\n { code: 'MZ', name: 'Mozambique', isEu: false },\n { code: 'MM', name: 'Myanmar', isEu: false },\n { code: 'NA', name: 'Namibia', isEu: false },\n { code: 'NR', name: 'Nauru', isEu: false },\n { code: 'NP', name: 'Nepal', isEu: false },\n { code: 'NL', name: 'Netherlands', isEu: true },\n { code: 'NC', name: 'New Caledonia', isEu: false },\n { code: 'NZ', name: 'New Zealand', isEu: false },\n { code: 'NI', name: 'Nicaragua', isEu: false },\n { code: 'NE', name: 'Niger', isEu: false },\n { code: 'NG', name: 'Nigeria', isEu: false },\n { code: 'NU', name: 'Niue', isEu: false },\n { code: 'NF', name: 'Norfolk Island', isEu: false },\n { code: 'MP', name: 'Northern Mariana Islands', isEu: false },\n { code: 'NO', name: 'Norway', isEu: false },\n { code: 'OM', name: 'Oman', isEu: false },\n { code: 'PK', name: 'Pakistan', isEu: false },\n { code: 'PW', name: 'Palau', isEu: false },\n { code: 'PS', name: 'Palestine, State of', isEu: false },\n { code: 'PA', name: 'Panama', isEu: false },\n { code: 'PG', name: 'Papua New Guinea', isEu: false },\n { code: 'PY', name: 'Paraguay', isEu: false },\n { code: 'PE', name: 'Peru', isEu: false },\n { code: 'PH', name: 'Philippines', isEu: false },\n { code: 'PN', name: 'Pitcairn', isEu: false },\n { code: 'PL', name: 'Poland', isEu: true },\n { code: 'PT', name: 'Portugal', isEu: true },\n { code: 'PR', name: 'Puerto Rico', isEu: false },\n { code: 'QA', name: 'Qatar', isEu: false },\n { code: 'RE', name: 'R\\u00e9union', isEu: false },\n { code: 'RO', name: 'Romania', isEu: true },\n { code: 'RU', name: 'Russian Federation', isEu: false },\n { code: 'RW', name: 'Rwanda', isEu: false },\n { code: 'BL', name: 'Saint Barth\\u00e9lemy', isEu: false },\n {\n code: 'SH',\n name: 'Saint Helena, Ascension and Tristan da Cunha',\n isEu: false,\n },\n { code: 'KN', name: 'Saint Kitts and Nevis', isEu: false },\n { code: 'LC', name: 'Saint Lucia', isEu: false },\n { code: 'MF', name: 'Saint Martin (French part)', isEu: false },\n { code: 'PM', name: 'Saint Pierre and Miquelon', isEu: false },\n { code: 'VC', name: 'Saint Vincent and the Grenadines', isEu: false },\n { code: 'WS', name: 'Samoa', isEu: false },\n { code: 'SM', name: 'San Marino', isEu: false },\n { code: 'ST', name: 'Sao Tome and Principe', isEu: false },\n { code: 'SA', name: 'Saudi Arabia', isEu: false },\n { code: 'SN', name: 'Senegal', isEu: false },\n { code: 'RS', name: 'Serbia', isEu: false },\n { code: 'SC', name: 'Seychelles', isEu: false },\n { code: 'SL', name: 'Sierra Leone', isEu: false },\n { code: 'SG', name: 'Singapore', isEu: false },\n { code: 'SX', name: 'Sint Maarten (Dutch part)', isEu: false },\n { code: 'SK', name: 'Slovakia', isEu: true },\n { code: 'SI', name: 'Slovenia', isEu: true },\n { code: 'SB', name: 'Solomon Islands', isEu: false },\n { code: 'SO', name: 'Somalia', isEu: false },\n { code: 'ZA', name: 'South Africa', isEu: false },\n {\n code: 'GS',\n name: 'South Georgia and the South Sandwich Islands',\n isEu: false,\n },\n { code: 'SS', name: 'South Sudan', isEu: false },\n { code: 'ES', name: 'Spain', isEu: true },\n { code: 'LK', name: 'Sri Lanka', isEu: false },\n { code: 'SD', name: 'Sudan', isEu: false },\n { code: 'SR', name: 'Suriname', isEu: false },\n { code: 'SJ', name: 'Svalbard and Jan Mayen', isEu: false },\n { code: 'SZ', name: 'Swaziland', isEu: false },\n { code: 'SE', name: 'Sweden', isEu: true },\n { code: 'CH', name: 'Switzerland', isEu: false },\n { code: 'SY', name: 'Syrian Arab Republic', isEu: false },\n { code: 'TW', name: 'Taiwan, Province of China', isEu: false },\n { code: 'TJ', name: 'Tajikistan', isEu: false },\n { code: 'TZ', name: 'Tanzania, United Republic of', isEu: false },\n { code: 'TH', name: 'Thailand', isEu: false },\n { code: 'TL', name: 'Timor-Leste', isEu: false },\n { code: 'TG', name: 'Togo', isEu: false },\n { code: 'TK', name: 'Tokelau', isEu: false },\n { code: 'TO', name: 'Tonga', isEu: false },\n { code: 'TT', name: 'Trinidad and Tobago', isEu: false },\n { code: 'TN', name: 'Tunisia', isEu: false },\n { code: 'TR', name: 'Turkey', isEu: false },\n { code: 'TM', name: 'Turkmenistan', isEu: false },\n { code: 'TC', name: 'Turks and Caicos Islands', isEu: false },\n { code: 'TV', name: 'Tuvalu', isEu: false },\n { code: 'UG', name: 'Uganda', isEu: false },\n { code: 'UA', name: 'Ukraine', isEu: false },\n { code: 'AE', name: 'United Arab Emirates', isEu: false },\n { code: 'GB', name: 'United Kingdom', isEu: false },\n { code: 'US', name: 'United States', isEu: false },\n { code: 'UM', name: 'United States Minor Outlying Islands', isEu: false },\n { code: 'UY', name: 'Uruguay', isEu: false },\n { code: 'UZ', name: 'Uzbekistan', isEu: false },\n { code: 'VU', name: 'Vanuatu', isEu: false },\n { code: 'VE', name: 'Venezuela, Bolivarian Republic of', isEu: false },\n { code: 'VN', name: 'Viet Nam', isEu: false },\n { code: 'VG', name: 'Virgin Islands, British', isEu: false },\n { code: 'VI', name: 'Virgin Islands, U.S.', isEu: false },\n { code: 'WF', name: 'Wallis and Futuna', isEu: false },\n { code: 'EH', name: 'Western Sahara', isEu: false },\n { code: 'YE', name: 'Yemen', isEu: false },\n { code: 'ZM', name: 'Zambia', isEu: false },\n { code: 'ZW', name: 'Zimbabwe', isEu: false },\n];\n\nexport default class CountryService {\n public static listCountries() {\n return countries;\n }\n\n public static getCountryName(countrycode: string) {\n if (!countrycode) {\n return;\n }\n\n const country = countries.filter((c) => {\n return c.code.toLowerCase() === countrycode.toLowerCase();\n });\n\n return country && country.length ? country[0].name : undefined;\n }\n\n // country list from https://europa.eu/european-union/about-eu/countries_en\n public static isEu(countrycode: string) {\n if (!countrycode) {\n return false;\n }\n\n const country = countries.filter((c) => {\n return c.code.toLowerCase() === countrycode.toLowerCase();\n });\n\n if (country && country.length) {\n return country[0].isEu;\n }\n\n return false;\n }\n}\n","import { useEffect, useState } from 'react';\nimport Flag from 'react-flagpack';\nimport 'react-flagpack/dist/style.css';\nimport styles from './AppFlagIcon.module.less';\n\ninterface AppFlagIconProps {\n code: string;\n size?: 's' | 'm' | 'l';\n}\n\nconst AppFlagIcon = ({ code, size = 'm' }: AppFlagIconProps) => {\n const [flagCode, setFlagCode] = useState(code?.toUpperCase());\n useEffect(() => {\n if (code === 'gb' || code === 'uk') {\n setFlagCode('GB-UKM');\n } else {\n setFlagCode(code?.toUpperCase());\n }\n }, [code]);\n\n return (\n
\n {flagCode && (\n \n )}\n
\n );\n};\n\nexport default AppFlagIcon;\n","import { Form } from 'antd';\nimport { FormInstance } from 'antd/lib/form';\nimport { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\n\nimport AppForm from '../../ccx/common/AppForm';\nimport styles from './BillingForm.module.less';\n\ninterface Props extends CcxComponentProps {\n fields: any[];\n form: FormInstance;\n values?: any;\n errorFields: any[];\n children?: any;\n}\n\nexport default function BillingForm({\n testId = 'BillingForm',\n fields,\n form,\n values,\n errorFields,\n children,\n}: Props): ReactElement {\n return (\n \n \n
{children}
\n \n );\n}\n","export type AddressClassProps = {\n city?: string;\n country?: string;\n line_1?: string;\n line_2?: string;\n postal_code?: string;\n state?: string;\n};\n\nexport interface AddressInterface {\n city?: string;\n country?: string;\n line1?: string;\n line2?: string;\n postalCode?: string;\n state?: string;\n}\n\nexport default class Address implements AddressInterface {\n readonly city?: string;\n readonly country?: string;\n readonly line1?: string;\n readonly line2?: string;\n readonly postalCode?: string;\n readonly state?: string;\n\n constructor(props: AddressClassProps) {\n this.city = props.city;\n this.country = props.country;\n this.line1 = props.line_1;\n this.line2 = props.line_2;\n this.postalCode = props.postal_code;\n this.state = props.state;\n }\n}\n","import { useDispatch, useSelector } from 'react-redux';\nimport type { TypedUseSelectorHook } from 'react-redux';\nimport type { RootState, AppDispatch } from './store';\n\n// Use throughout your app instead of plain `useDispatch` and `useSelector`\nexport const useAppDispatch: () => AppDispatch = useDispatch;\nexport const useAppSelector: TypedUseSelectorHook = useSelector;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport styles from './AddCard.module.less';\nimport {\n CardCvcElement,\n CardExpiryElement,\n CardNumberElement,\n useElements,\n useStripe,\n} from '@stripe/react-stripe-js';\nimport ButtonModalForm from '../ButtonModalForm';\nimport BillingService from '../../services/BillingService';\nimport { message, notification, Form, Button } from 'antd';\nimport CcxIconCloseCircleTwoTone from '../ccx/icons/CcxIconCloseCircleTwoTone';\nimport CcxIconCheckCircle from '../ccx/icons/CcxIconCheckCircle';\nimport AppForm from '../ccx/common/AppForm';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport CountryService from '../../services/CountryService';\nimport Country from '../../types/Country';\nimport AppFlagIcon from '../ccx/common/AppFlagIcon';\nimport BillingForm from '../deployments/services/BillingForm';\nimport Address from '../../types/Address';\nimport BillingUserData from '../../types/BillingUserData';\nimport { useAppSelector } from '../../redux/hooks';\nimport { getStripeErrorMessage } from '../../core/helpers';\nimport usePiwikPro from '../../core/hooks/usePiwikPro';\nimport {\n ADDING_NEW_CARD_TRIGGERED_SUCCESSFULLY,\n ADDING_NEW_CARD_TRIGGERED_FAILED,\n} from '../../core/PiwikConstants';\n\ninterface Props extends CcxComponentProps {\n onSuccess: Function;\n buttonType?: string;\n drawer?: boolean;\n submitText?: string;\n setCardToken?: Function;\n submitDisabled?: boolean;\n}\n\nfunction AddCard({\n onSuccess,\n buttonType,\n drawer = true,\n submitText = 'Add',\n setCardToken,\n submitDisabled,\n testId = 'AddCard',\n}: Props): ReactElement {\n const { trackPageView } = usePiwikPro();\n const [loading, setLoading] = useState(false);\n const stripe = useStripe();\n const elements = useElements();\n const [errorFields, setErrorFields] = useState([]);\n const [form] = Form.useForm();\n\n const { user, subscription } = useAppSelector((state) => state.user);\n\n const cardElementOptions = {\n style: {\n base: {\n backgroundColor: '#fff',\n padding: '4px 11px',\n fontSize: '14px',\n lineHeight: '1.5715',\n fontSmoothing: 'antialiased',\n color: 'rgba(0, 0, 0, 0.65)',\n '::placeholder': {\n color: 'rgba(0, 0, 0, 0.25)',\n },\n iconColor: 'rgba(0, 0, 0, 0.65)',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji',\n fontVariant: 'tabular-nums',\n },\n invalid: {\n color: '#f5222d',\n iconColor: '#f5222d',\n },\n complete: {},\n },\n hidePostalCode: false,\n };\n\n const fields = [\n {\n name: ['cardNumber'],\n testId: 'AddCardCardNumber',\n required: true,\n label: 'Card number',\n type: 'rawElement',\n rawElement: (\n \n \n \n ),\n },\n {\n name: ['cardExpiry'],\n testId: 'AddCardCardExpiry',\n required: true,\n label: 'Expiration date',\n type: 'rawElement',\n rawElement: (\n \n \n \n ),\n },\n {\n name: ['cardCvc'],\n testId: 'AddCardCardCvc',\n required: true,\n label: 'CVC/CVV',\n type: 'rawElement',\n rawElement: (\n \n \n \n ),\n },\n ];\n\n const vatFieldsSetup = [\n {\n name: ['companyName'],\n required: false,\n label: 'Company name',\n testId: `${testId}CompanyName`,\n placeholder: 'Time travel agency Ltd.',\n type: 'input',\n },\n {\n name: ['vat'],\n required: false,\n label: 'EU VAT number',\n placeholder: 'ROU25775505',\n testId: `${testId}Vat`,\n type: 'input',\n tips: (\n
Only for countries in the EU for reverse charge rule
\n ),\n },\n ];\n\n const fieldsSetup = [\n {\n name: ['firstName'],\n required: true,\n label: 'First name',\n placeholder: 'Enter your first name',\n testId: `${testId}FirstName`,\n type: 'input',\n onChange: async (v: any) => {\n setErrorFields([]);\n },\n },\n {\n name: ['lastName'],\n required: true,\n label: 'Last name',\n placeholder: 'Enter your last name',\n testId: `${testId}LastName`,\n type: 'input',\n onChange: async (v: any) => {\n setErrorFields([]);\n },\n },\n {\n name: ['city'],\n required: false,\n label: 'City',\n testId: `${testId}City`,\n placeholder: 'Enter your city',\n type: 'input',\n },\n {\n name: ['state'],\n required: false,\n label: 'State',\n testId: `${testId}State`,\n placeholder: 'Enter your state',\n type: 'input',\n },\n {\n name: ['email'],\n required: false,\n label: 'Email',\n testId: `${testId}Email`,\n placeholder: 'Enter your email',\n type: 'input',\n disabled: true,\n defaultValue: user?.login,\n },\n {\n name: ['postalCode'],\n required: false,\n label: 'Postal code',\n testId: `${testId}PostalCode`,\n placeholder: 'Enter your postal code',\n type: 'input',\n },\n\n {\n name: ['line1'],\n required: true,\n label: 'Billing address 1',\n testId: `${testId}AddressLine1`,\n placeholder: 'Enter your billing address',\n type: 'input',\n onChange: async (v: any) => {\n setErrorFields([]);\n },\n },\n {\n name: ['country'],\n required: true,\n label: 'Country',\n testId: `${testId}Country`,\n placeholder: 'Select your country',\n type: 'select',\n options: [],\n onChange: async (v: any, o: any) => {\n setErrorFields([]);\n await form.setFieldsValue({ country: v });\n },\n },\n {\n name: ['line2'],\n required: false,\n label: 'Billing address 2',\n testId: `${testId}AddressLine2`,\n placeholder: 'Enter your billing address',\n type: 'input',\n },\n ];\n\n const [billingFieldsSetup, setBillingFieldsSetup] =\n useState(fieldsSetup);\n\n const [countries, setCountries] = useState([]);\n\n const [cardForm, setCardForm] = useState(undefined);\n\n const [billingForm] = Form.useForm();\n\n useEffect(() => {\n const load = async () => {\n const response = await CountryService.listCountries();\n setCountries(response);\n };\n\n load();\n }, []);\n\n useEffect(() => {\n if (fieldsSetup && countries && countries.length > 0) {\n const newStep1 = fieldsSetup.map((f: any) => {\n if (f.name && f.name[0] === 'country') {\n f.options = countries.map((c: Country) => {\n return {\n value: c.code,\n label: c.name,\n content: (\n \n \n {c.name}\n \n ),\n };\n });\n }\n return f;\n });\n const newFields = newStep1;\n setBillingFieldsSetup(newFields);\n }\n }, [countries]);\n\n const validateForm = async () => {\n if (!subscription?.valid) {\n const stepValid = await validateBillingForm();\n\n if (!stepValid) {\n return false;\n }\n }\n\n if (stripe === null) {\n throw new Error(`BUG: stripe is null`);\n }\n\n if (elements === null) {\n throw new Error(`BUG: stripe elements is null`);\n }\n\n const cardNumber = elements.getElement(CardNumberElement);\n const cardExpiry = elements.getElement(CardExpiryElement);\n const cardCvc = elements.getElement(CardCvcElement);\n\n if (cardNumber === null) {\n throw new Error(`BUG: stripe elements cardNumberElement is null`);\n }\n if (cardExpiry === null) {\n throw new Error(`BUG: stripe elements cardExpiryElement is null`);\n }\n if (cardCvc === null) {\n throw new Error(`BUG: stripe elements cardCvcElement is null`);\n }\n\n return true;\n };\n\n let cardToken: any = null;\n\n const onSubmit = async () => {\n if (stripe === null) {\n throw new Error(`BUG: stripe is null`);\n }\n\n if (elements === null) {\n throw new Error(`BUG: stripe elements is null`);\n }\n\n const cardNumber = elements.getElement(CardNumberElement);\n const cardExpiry = elements.getElement(CardExpiryElement);\n const cardCvc = elements.getElement(CardCvcElement);\n\n if (cardNumber === null) {\n throw new Error(`BUG: stripe elements cardNumberElement is null`);\n }\n if (cardExpiry === null) {\n throw new Error(`BUG: stripe elements cardExpiryElement is null`);\n }\n if (cardCvc === null) {\n throw new Error(`BUG: stripe elements cardCvcElement is null`);\n }\n\n setLoading(true);\n setErrorFields([]);\n\n try {\n const { error, token } = await stripe.createToken(cardNumber);\n if (error) {\n throw error; // return error to catch block\n }\n\n cardToken = token;\n trackPageView(ADDING_NEW_CARD_TRIGGERED_SUCCESSFULLY);\n if (setCardToken) {\n setCardToken(token);\n return;\n }\n } catch (e: any) {\n trackPageView(ADDING_NEW_CARD_TRIGGERED_FAILED);\n setErrorFields([\n {\n errors: [e.message],\n name: ['cardInformation'],\n },\n ]);\n\n message.error(e.message);\n setLoading(false);\n\n throw e;\n }\n\n if (setCardToken || subscription?.valid) {\n addCard();\n }\n };\n\n const addCard = async () => {\n try {\n await BillingService.addCard(cardToken?.id);\n notification.open({\n message: 'Add Card',\n description: `New Card successfully added!`,\n icon: ,\n });\n\n onSuccess && onSuccess();\n form.resetFields();\n } catch (e) {\n notification.open({\n message: 'Add Card',\n description: `There was an error adding your Card. ${getStripeErrorMessage(\n e\n )}`,\n icon: ,\n });\n\n console.error(e);\n\n throw e;\n } finally {\n setLoading(false);\n }\n };\n\n const onSubmitButtonClick = async () => {\n const stepValid = await validateForm();\n\n if (stepValid) {\n setLoading(true);\n try {\n await onSubmit();\n onSuccess && onSuccess();\n } catch (e) {\n console.log('error e=', e);\n }\n setLoading(false);\n }\n };\n\n const validateBillingForm = async () => {\n try {\n const a = await billingForm.validateFields();\n return true;\n } catch (e: any) {\n setErrorFields(e.errorFields);\n message.error(\n 'One or more fields have errors. Please double check and try again.'\n );\n return false;\n }\n };\n\n const handleCreateUser = async (billingForm: any) => {\n try {\n const data = {\n address: new Address({\n country: billingForm.getFieldValue('country'),\n state: billingForm.getFieldValue('state'),\n city: billingForm.getFieldValue('city'),\n line_1: billingForm.getFieldValue('line1'),\n line_2: billingForm.getFieldValue('line2'),\n postal_code: billingForm.getFieldValue('postalCode'),\n }),\n coupon: form.getFieldValue('coupon'),\n userData: new BillingUserData({\n company_name: billingForm.getFieldValue('companyName'),\n eu_vat_id: billingForm.getFieldValue('vat'),\n first_name: billingForm.getFieldValue('firstName'),\n last_name: billingForm.getFieldValue('lastName'),\n }),\n };\n\n await BillingService.createBillingUser(data);\n\n notification.open({\n message: 'Add billing user',\n description: 'User added successfully.',\n icon: ,\n });\n return true;\n } catch (e: any) {\n notification.open({\n message: 'Add billing user',\n description: `There was an error adding billing user. ${e}`,\n icon: ,\n });\n return false;\n }\n };\n\n const handleSetupIntent = async (cardToken: any) => {\n try {\n const intent = await BillingService.createBillingIntent(cardToken);\n\n notification.open({\n message: 'Add subscription intent',\n description: 'Intent added successfully.',\n icon: ,\n });\n\n await createUserSubscription(billingForm, intent.paymentMethodID);\n } catch (e: any) {\n notification.open({\n message: 'Add subscription intent',\n description: `There was an error adding subscription intent. ${e}`,\n icon: ,\n });\n }\n };\n\n const createUserSubscription = async (\n billingForm: any,\n paymentMethod: any\n ) => {\n const data = {\n address: new Address({\n country: billingForm.getFieldValue('country'),\n state: billingForm.getFieldValue('state'),\n city: billingForm.getFieldValue('city'),\n line_1: billingForm.getFieldValue('line1'),\n line_2: billingForm.getFieldValue('line2'),\n postal_code: billingForm.getFieldValue('postalCode'),\n }),\n paymentMethod,\n coupon: form.getFieldValue('coupon'),\n userData: new BillingUserData({\n company_name: billingForm.getFieldValue('companyName'),\n eu_vat_id: billingForm.getFieldValue('vat'),\n first_name: billingForm.getFieldValue('firstName'),\n last_name: billingForm.getFieldValue('lastName'),\n }),\n };\n\n await BillingService.createUserSubscription(data);\n };\n\n const onSubmitCreateUser = async () => {\n setLoading(true);\n try {\n const subscriptionUser = await handleCreateUser(billingForm);\n\n if (subscriptionUser) {\n await onSubmit();\n }\n\n if (cardToken) {\n await handleSetupIntent(cardToken.id);\n }\n } catch (e) {\n console.log('error e=', e);\n }\n setLoading(false);\n };\n\n return drawer ? (\n \n \n {!subscription?.valid && (\n <>\n
\n Enter your billing information\n \n
\n
\n Enter your invoice information\n \n
\n \n )}\n Enter your card credentials\n
\n
\n
\n \n ) : (\n \n \n \n {submitText}\n \n \n );\n}\n\nexport default AddCard;\n","import React from 'react';\nimport Icon from '@ant-design/icons';\nimport styles from './AppIcon.module.less';\nimport CcxComponentProps from '../core/CcxComponent';\n\nexport default AppIcon;\n\nexport const ICON_SIZE_XSMALL = 'xsmall';\nexport const ICON_SIZE_SMALL = 'small';\nexport const ICON_SIZE_MEDIUM = 'medium';\nexport const ICON_SIZE_LARGE = 'large';\nexport const ICON_SIZE_XLARGE = 'xlarge';\nexport const ICON_SIZE_2XLARGE = '2xlarge';\n\nexport const CDN_URL = 'https://st.s9s.io/nnj';\n\nexport interface AppIconProps extends CcxComponentProps {\n icon: string;\n size?: string;\n sizePx?: number;\n}\n\nfunction AppIcon({\n icon,\n size = ICON_SIZE_SMALL,\n sizePx,\n testId = 'AppIcon',\n}: AppIconProps) {\n let sizeStr = sizePx ? `${sizePx}px` : '';\n\n if (!sizeStr) {\n switch (size) {\n case ICON_SIZE_XSMALL:\n sizeStr = '16px';\n break;\n case ICON_SIZE_MEDIUM:\n sizeStr = '24px';\n break;\n case ICON_SIZE_LARGE:\n sizeStr = '32px';\n break;\n case ICON_SIZE_XLARGE:\n sizeStr = '64px';\n break;\n case ICON_SIZE_2XLARGE:\n sizeStr = '128px';\n break;\n case ICON_SIZE_SMALL:\n default:\n sizeStr = '18px';\n break;\n }\n }\n\n return (\n \n typeof icon === 'string' ? (\n \n ) : (\n React.cloneElement(icon, {\n width: sizeStr,\n height: sizeStr,\n })\n )\n }\n />\n );\n}\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport AppIcon from '../../AppIcon';\nimport styles from './CcxLogo.module.less';\n\ninterface Props extends CcxComponentProps {\n logo: any;\n size?: string;\n}\n\nfunction CcxLogo({ className, logo, size, testId }: Props): ReactElement {\n const cssSize = size || 'xlarge';\n return (\n \n
\n \n \n );\n}\n\nexport default CcxLogo;\n","import React from 'react';\nimport { EllipsisOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport CcxComponentProps from '../../../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {}\n\nconst CcxContextualMenuIcon = ({ testId = 'CcxContextualMenuIcon' }: Props) => {\n return ;\n};\n\nexport default CcxContextualMenuIcon;\n","import { Col } from 'antd';\nimport { Row } from 'antd';\nimport { Card } from 'antd';\nimport { useEffect, useState } from 'react';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport CcxLogo from '../ccx/common/CcxLogo';\nimport styles from './PaymentCard.module.less';\nimport Cardtype from '../../types/Card';\nimport { notification } from 'antd';\nimport CcxIconInfoCircleTwoTone from '../ccx/icons/CcxIconInfoCircleTwoTone';\nimport { Modal } from 'antd';\nimport BillingService from '../../services/BillingService';\nimport CcxIconCheckCircle from '../ccx/icons/CcxIconCheckCircle';\nimport CcxIconCloseCircleTwoTone from '../ccx/icons/CcxIconCloseCircleTwoTone';\nimport { Menu } from 'antd';\nimport AppConfirmDialog from '../AppConfirmDialog';\nimport { Dropdown } from 'antd';\nimport { Button } from 'antd';\nimport CcxContextualMenuIcon from '../ccx/icons/CcxContextualMenuIcon';\nimport IconLabelStatusOk from '../ccx/common/IconLabelStatusOk';\nimport IconLabelStatusError from '../ccx/common/IconLabelStatusError';\nimport { DeleteOutlined } from '@severalnines/frontend_hub/libs/icons';\n\ninterface Props extends CcxComponentProps {\n card: Cardtype;\n refresh: Function;\n deleteIcon?: boolean;\n}\n\nexport function PaymentCard({\n testId = 'PaymentCard',\n card,\n refresh,\n deleteIcon = false,\n}: Props) {\n const [cardObject, setCardObject] = useState();\n const [showIcon, setShowIcon] = useState(false);\n\n useEffect(() => {\n if (card) {\n const onConfirmDelete = () => {\n return new Promise(async (resolve, reject) => {\n notification.open({\n message: 'Remove Card',\n description: 'Your Card will be removed soon.',\n icon: ,\n });\n\n Modal.destroyAll();\n\n try {\n await BillingService.deleteCard(card.id);\n\n refresh && (await refresh());\n\n notification.open({\n message: 'Remove Card',\n description: 'Your Card was removed.',\n icon: ,\n });\n\n resolve(null);\n } catch (e) {\n notification.open({\n message: 'Remove Card',\n description: `There was an error removing your Card. ${e}`,\n icon: (\n \n ),\n });\n\n console.error(e);\n\n reject();\n }\n }).catch(() => console.log('Oops errors!'));\n };\n\n const makeDefault = () => {\n return new Promise(async (resolve, reject) => {\n Modal.destroyAll();\n\n try {\n await BillingService.setDefaultCard(card.id);\n\n refresh && (await refresh());\n\n notification.open({\n message: 'Set as Default',\n description:\n 'This Card will be used as the default payment method.',\n icon: ,\n });\n\n resolve(null);\n } catch (e) {\n notification.open({\n message: 'Set as Default',\n description: `There was an error setting your default Card. ${e}`,\n icon: (\n \n ),\n });\n\n console.error(e);\n\n reject();\n }\n }).catch(() => console.log('Oops errors!'));\n };\n\n const expired =\n new Date(`${card.expYear}-${card.expMonth}`) < new Date();\n\n const menu = (\n \n {!card.default && (\n \n Make a default card\n \n )}\n \n \n \n \n );\n\n const action = deleteIcon ? (\n }\n content=\"The selected Payment Method will be deleted.\"\n />\n ) : (\n \n \n \n );\n\n const defaultStatus = card.default ? (\n
\n
\n \n \n ) : null;\n\n const expiryStatus = expired ? (\n
\n
\n \n \n ) : null;\n\n const month = `0${card.expMonth}`.slice(-2);\n\n const expiry = `${month}/${card.expYear.toString().substr(-2)}`;\n\n const brandName = card.getElegantBrandName();\n\n let expirySpan = 14;\n\n if (expired && card.default) {\n expirySpan = 8;\n } else if (expired || card.default) {\n expirySpan = 11;\n }\n\n setCardObject({\n ...card,\n action,\n defaultStatus,\n expiryStatus,\n expiry,\n expired,\n brandName,\n expirySpan,\n });\n }\n }, [card]);\n\n return cardObject ? (\n {\n setShowIcon(true);\n }}\n onMouseLeave={() => {\n setShowIcon(false);\n }}\n >\n \n \n \n\n {`${cardObject.brandName} *${cardObject.last4}`}\n \n \n Expires: {cardObject.expiry}\n \n {cardObject.expired && (\n \n {cardObject.expiryStatus}\n \n )}\n {cardObject.default && (\n \n {cardObject.defaultStatus}\n \n )}\n {showIcon && cardObject.action}\n \n \n ) : null;\n}\n","import { Col, Row, Card } from 'antd';\nimport { useEffect, useState } from 'react';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport styles from './PromoCodeCard.module.less';\nimport { notification } from 'antd';\nimport CcxIconInfoCircleTwoTone from '../ccx/icons/CcxIconInfoCircleTwoTone';\nimport { Modal } from 'antd';\nimport BillingService from '../../services/BillingService';\nimport CcxIconCheckCircle from '../ccx/icons/CcxIconCheckCircle';\nimport CcxIconCloseCircleTwoTone from '../ccx/icons/CcxIconCloseCircleTwoTone';\nimport AppConfirmDialog from '../AppConfirmDialog';\nimport {\n DeleteOutlined,\n InfoCircleOutlined,\n} from '@severalnines/frontend_hub/libs/icons';\nimport Coupon from '../../types/Coupon';\nimport { Tooltip } from 'antd';\n\ninterface Props extends CcxComponentProps {\n coupon: Coupon;\n refresh: Function;\n}\n\nexport function PromoCodeCard({\n testId = 'PromoCodeCard',\n coupon,\n refresh,\n}: Props) {\n const [couponObject, setCouponObject] = useState();\n const [showIcon, setShowIcon] = useState(false);\n\n useEffect(() => {\n if (coupon) {\n const onConfirmDelete = () => {\n return new Promise(async (resolve, reject) => {\n notification.open({\n message: 'Remove Promo code',\n description: 'Your Promo code will be removed soon.',\n icon: ,\n });\n\n Modal.destroyAll();\n\n try {\n await BillingService.deleteCoupon();\n\n refresh && (await refresh());\n\n notification.open({\n message: 'Remove Promo code',\n description: 'Your Promo code was removed.',\n icon: ,\n });\n\n resolve(null);\n } catch (e) {\n notification.open({\n message: 'Remove Promo code',\n description: `There was an error removing your Promo code. ${e}`,\n icon: (\n \n ),\n });\n\n console.error(e);\n\n reject();\n }\n }).catch(() => console.log('Oops errors!'));\n };\n\n const action = (\n \n }\n content=\"The Promo code will be deleted.\"\n />\n );\n\n setCouponObject({\n ...coupon,\n action,\n });\n }\n }, [coupon]);\n\n return couponObject ? (\n {\n setShowIcon(true);\n }}\n onMouseLeave={() => {\n setShowIcon(false);\n }}\n >\n \n \n {couponObject.name}\n\n \n \n \n \n\n {showIcon && couponObject.action}\n \n \n ) : null;\n}\n","import { Elements } from '@stripe/react-stripe-js';\nimport { loadStripe } from '@stripe/stripe-js/pure';\nimport { Button } from 'antd';\nimport React, { useState } from 'react';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport { billingDisabled, StripePK } from '../../core/CcxEnv';\nimport useCards from '../../core/hooks/useCards';\nimport Card from '../../types/Card';\nimport AddCard from './AddCard';\nimport styles from './PaymentMethodModal.module.less';\nimport AppLoading from '../AppLoading';\nimport AppEmpty from '../AppEmpty';\nimport { PaymentCard } from './PaymentCard';\nimport { Modal } from 'antd';\nimport { Row } from 'antd';\nimport { Col } from 'antd';\nimport { Form } from 'antd';\nimport AppForm from '../ccx/common/AppForm';\nimport { FormInstance } from 'antd/lib/form';\nimport { message } from 'antd';\nimport { PromoCodeCard } from './PromoCodeCard';\nimport useCoupons from '../../core/hooks/useCoupons';\nimport BillingService from '../../services/BillingService';\nimport { notification } from 'antd';\nimport CcxIconCheckCircle from '../ccx/icons/CcxIconCheckCircle';\nimport CcxIconCloseCircleTwoTone from '../ccx/icons/CcxIconCloseCircleTwoTone';\n\ninterface Props extends CcxComponentProps {\n label: string;\n icon?: any;\n}\n\nfunction PaymentMethodModal({\n label,\n testId = 'PaymentMethodModal',\n icon,\n}: Props) {\n const [promoForm] = Form.useForm();\n\n const [visible, setVisible] = useState(false);\n\n const [promoModal, setPromoModal] = useState(false);\n const [errorFields, setErrorFields] = useState([]);\n\n const { cards, refresh, loading } = useCards();\n const {\n coupon,\n refresh: refreshCoupon,\n loading: loadingCoupon,\n } = useCoupons();\n\n const stripePromise = !billingDisabled ? loadStripe(StripePK) : null;\n\n const fields = {\n step1: [\n {\n name: ['code'],\n testId: 'PaymentMethodModalPromoCode',\n required: true,\n label: 'Code',\n placeholder: 'Enter your promo code',\n type: 'input',\n },\n ],\n };\n\n const showModal = () => {\n setVisible(true);\n };\n\n const handleClose = () => {\n setVisible(false);\n };\n\n const validateForm = async (form: FormInstance) => {\n try {\n const a = await form.validateFields();\n return true;\n } catch (e: any) {\n setErrorFields(e.errorFields);\n message.error(\n 'One or more fields have errors. Please double check and try again.'\n );\n return false;\n }\n };\n\n const handlePromoAdd = async () => {\n if (coupon) {\n notification.open({\n message: 'You cant add more promo codes',\n description: `Currently you have an active promo code. To add different promo code, remove the current one.`,\n icon: ,\n });\n return;\n }\n\n const stepValid = await validateForm(promoForm);\n\n if (stepValid) {\n const formCoupon = promoForm.getFieldValue('code');\n\n try {\n await BillingService.addCoupon(formCoupon);\n\n notification.open({\n message: 'Code added successfully',\n icon: ,\n });\n\n refreshCoupon();\n setPromoModal(false);\n\n promoForm.resetFields();\n } catch (e) {\n notification.open({\n message:\n cards && cards?.length !== 0\n ? 'Invalid promo code'\n : 'Credit card should be previously added before adding a Promo code',\n description: `The code you entered is incorrect or invalid. ${e}`,\n icon: ,\n });\n\n throw e;\n }\n }\n };\n\n const handleCancel = () => {\n setPromoModal(false);\n promoForm.resetFields();\n setErrorFields([]);\n };\n\n return (\n <>\n \n \n \n \n Cancel\n \n \n \n }\n >\n \n

\n Credit/debit card\n

\n\n
\n {\n setPromoModal(true);\n }}\n >\n Add promo code\n \n\n {stripePromise && (\n \n \n \n )}\n
\n \n {loading ? (\n \n ) : cards && cards.length > 0 ? (\n
\n {cards.map((card: Card) => {\n return (\n \n );\n })}\n
\n ) : (\n \n )}\n\n \n

\n Promo codes\n

\n \n {loadingCoupon ? (\n \n ) : coupon ? (\n
\n \n
\n ) : (\n \n )}\n \n \n \n \n Add\n \n \n \n }\n >\n \n \n \n \n \n );\n}\n\nexport default PaymentMethodModal;\n","import { useEffect, useState } from 'react';\nimport BillingService from '../../services/BillingService';\nimport Coupon from '../../types/Coupon';\n\nexport default function useCoupons() {\n const [loading, setLoading] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [coupon, setCoupon] = useState(undefined);\n\n const load = async () => {\n try {\n const details = await BillingService.getCoupons();\n\n setCoupon(details.coupon);\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, []);\n\n return { coupon, refresh, loading, updating, error };\n}\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {\n children: ReactElement;\n}\n\nconst AppSupportLink: React.FC = ({\n children,\n testId = 'AppBorderedPanel',\n}) => {\n return (\n \n {children}\n \n );\n};\n\nexport default AppSupportLink;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport styles from './ChangePaymentMethod.module.less';\nimport { CreditCardOutlined, CustomerServiceOutlined } from '@ant-design/icons';\nimport PaymentMethodModal from '../PaymentMethodModal';\nimport AppSupportLink from '../../ccx/common/AppSupportLink';\n\ninterface Props extends CcxComponentProps {}\n\nfunction ChangePaymentMethod({\n testId = 'ChangePaymentMethod',\n}: Props): ReactElement {\n return (\n
\n
\n }\n label=\"Change payment method\"\n />\n
\n
\n \n <>\n \n {` `}Contact support\n \n \n
\n
\n );\n}\n\nexport default ChangePaymentMethod;\n","import React, { ReactElement } from 'react';\nimport { QuestionOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport styles from './CurrentBalance.module.less';\nimport PrettyNumber from '../../ccx/common/PrettyNumber';\n\ninterface Props extends CcxComponentProps {\n currentBalance: number;\n suffix?: string;\n}\n\nfunction CurrentBalance({\n testId = 'CurrentBalance',\n currentBalance = 0,\n suffix,\n}: Props): ReactElement {\n return (\n
\n
\n Current balance \n \n
\n
\n \n \n \n
\n
\n );\n}\n\nexport default CurrentBalance;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport styles from './CurrentBillingPeriod.module.less';\n\ninterface Props extends CcxComponentProps {\n currentBillingPeriod: any;\n}\n\nfunction CurrentBillingPeriod({\n testId = 'CurrentBillingPeriod',\n currentBillingPeriod,\n}: Props): ReactElement {\n return (\n
\n
Current billing period
\n
\n \n {currentBillingPeriod.from && currentBillingPeriod.to\n ? `${currentBillingPeriod.from} - ${currentBillingPeriod.to}`\n : 'N/A'}\n \n
\n
\n );\n}\n\nexport default CurrentBillingPeriod;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CcxLogo from '../../ccx/common/CcxLogo';\nimport styles from './PaymentMethod.module.less';\n\ninterface Props extends CcxComponentProps {\n paymentMethod: any;\n}\n\nfunction PaymentMethod({\n testId = 'PaymentMethod',\n paymentMethod,\n}: Props): ReactElement {\n return (\n
\n
Payment method
\n {paymentMethod.brand && paymentMethod.last4 ? (\n
\n \n
\n {`${paymentMethod.brand} *${paymentMethod.last4}`}\n
\n
\n ) : (\n 'N/A'\n )}\n
\n );\n}\n\nexport default PaymentMethod;\n","import { FilePdfOutlined, FileTextOutlined } from '@ant-design/icons';\nimport React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport { PricingLink } from '../../../core/CcxEnv';\nimport useInvoices from '../../../core/hooks/useInvoices';\nimport useNextInvoice from '../../../core/hooks/useNextInvoice';\nimport Invoice from '../../../types/Invoice';\nimport AppTable from '../../AppTable';\nimport AppGridTable from '../../ccx/common/AppGridTable';\nimport IconLabelStatusError from '../../ccx/common/IconLabelStatusError';\nimport IconLabelStatusOk from '../../ccx/common/IconLabelStatusOk';\nimport PrettyNumber from '../../ccx/common/PrettyNumber';\nimport LazyLoader from '../../LazyLoader';\nimport ChangePaymentMethod from './ChangePaymentMethod';\nimport CurrentBalance from './CurrentBalance';\nimport CurrentBillingPeriod from './CurrentBillingPeriod';\nimport PaymentMethod from './PaymentMethod';\nimport styles from './PaymentsInvoices.module.less';\n\ninterface Props extends CcxComponentProps {}\n\nfunction PaymentsInvoices({\n testId = 'PaymentsInvoices',\n}: Props): ReactElement {\n const [tableData, setTableData] = useState([]);\n const [currentBalance, setCurrentBalance] = useState(0);\n const [currentBillingPeriod, setCurrentBillingPeriod] = useState({});\n const [paymentMethod, setPaymentMethod] = useState({});\n\n const { invoices, loading } = useInvoices();\n const { nextInvoice, loading: loadingNext } = useNextInvoice();\n\n const formatDate = (date: Date) => {\n const dd = `0${date.getDate()}`.slice(-2);\n const mm = `0${date.getMonth() + 1}`.slice(-2);\n const yy = date.getFullYear().toString().substr(-2);\n\n return `${dd}/${mm}/${yy}`;\n };\n\n useEffect(() => {\n if (invoices && invoices.length > 0) {\n const data = invoices.map((invoice: Invoice) => {\n return {\n ...invoice,\n paymentMethod: invoice.getPaymentMethodString(),\n status: invoice.getStatus(),\n amount: invoice.amount / 100,\n isStatusOk: invoice.isStatusOk,\n };\n });\n setTableData(data);\n\n if (nextInvoice) {\n const lastInvoice: Invoice = invoices[0];\n setCurrentBalance(nextInvoice.amount / 100);\n\n setCurrentBillingPeriod({\n from: formatDate(new Date(lastInvoice.date)),\n to: formatDate(new Date(nextInvoice.date)),\n });\n\n setPaymentMethod({\n brand: lastInvoice?.paymentMethod?.card?.brand,\n last4: lastInvoice?.paymentMethod?.card?.last4,\n });\n }\n }\n }, [invoices, nextInvoice]);\n\n const columns: any[] = [];\n const rows: any[] = [\n {\n borderAlert: false,\n statusOverlayText: '',\n columns: [\n {\n align: 'center',\n content: (\n \n ),\n span: 7,\n },\n {\n align: 'center',\n content: (\n \n ),\n span: 5,\n },\n {\n align: 'center',\n content: ,\n span: 5,\n },\n {\n align: 'center',\n content: ,\n span: 5,\n },\n ],\n disabled: false,\n },\n ];\n\n let StatusComponent = null;\n\n const tableColumns = [\n {\n title: 'Invoice number',\n dataIndex: 'invoiceNumber',\n key: 'invoiceNumber',\n },\n {\n title: 'Payment method',\n key: 'paymentMethod',\n render: (value: string, record: any) => {\n return record.paymentMethod.toUpperCase();\n },\n },\n {\n title: 'Status',\n key: 'status',\n render: (value: string, record: Invoice) => {\n if (record.isStatusOk()) {\n StatusComponent = (\n
\n
\n \n \n );\n } else {\n StatusComponent = (\n
\n
\n \n \n );\n }\n return StatusComponent;\n },\n },\n {\n title: 'Date',\n dataIndex: 'date',\n key: 'date',\n sorter: (a: any, b: any) =>\n new Date(a.date).getTime() - new Date(b.date).getTime(),\n },\n {\n title: 'Amount',\n key: 'amount',\n render: (value: string, record: any) => {\n return (\n \n );\n },\n },\n {\n title: 'Download as PDF',\n key: 'pdf',\n render: (value: string, record: any) => {\n return (\n \n Download{` `} \n \n );\n },\n },\n ];\n\n return (\n
\n {loading || loadingNext ? (\n \n ) : (\n <>\n \n

\n Subscriptions\n

\n\n \n View pricing plans\n \n \n\n \n\n \n Payment history\n \n \n \n )}\n
\n );\n}\n\nexport default PaymentsInvoices;\n","import { useEffect, useState } from 'react';\nimport BillingService from '../../services/BillingService';\nimport Invoice from '../../types/Invoice';\n\nexport default function useInvoices() {\n const [loading, setLoading] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [invoices, setInvoices] = useState(undefined);\n\n const load = async () => {\n try {\n const invoices = await BillingService.getInvoices();\n setInvoices(invoices);\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, []);\n\n return { invoices, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport BillingService from '../../services/BillingService';\nimport Invoice from '../../types/Invoice';\n\nexport default function useNextInvoice() {\n const [loading, setLoading] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [nextInvoice, setNextInvoice] = useState(\n undefined\n );\n\n const load = async () => {\n try {\n const nextInvoice = await BillingService.getNextInvoice();\n setNextInvoice(nextInvoice);\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, []);\n\n return { nextInvoice, refresh, loading, updating, error };\n}\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport styles from './AppBorderedPanel.module.less';\n\ninterface Props extends CcxComponentProps {\n children: ReactElement;\n}\n\nconst AppBorderedPanel: React.FC = ({\n children,\n testId = 'AppBorderedPanel',\n}) => {\n return (\n
\n {children}\n
\n );\n};\n\nexport default AppBorderedPanel;\n","import { Alert, Button, Col, Form, Input, Modal, Row, Spin } from 'antd';\nimport AppBorderedPanel from '../../ccx/common/AppBorderedPanel';\nimport { CheckCircleOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport { useState } from 'react';\nimport styles from './ChangePasswordModal.module.less';\nimport { PasswordError } from './AccountInfo';\n\ninterface ChangePasswordModalProps {\n readonly error: PasswordError;\n readonly testId?: string;\n readonly isLoading: boolean;\n readonly isVisible: boolean;\n readonly onCancel: Function;\n readonly onUpdatePassword: Function;\n readonly onChangeOldPassword: Function;\n}\n\ntype PasswordValidation = {\n validate: boolean;\n label: string;\n};\n\nfunction ChangePasswordModal({\n error,\n onCancel,\n isLoading,\n isVisible,\n onUpdatePassword,\n onChangeOldPassword,\n testId = 'ChangePasswordModal',\n}: ChangePasswordModalProps) {\n const [form] = Form.useForm();\n const [passwordValidations, setPasswordValidations] = useState<\n PasswordValidation[]\n >([]);\n const [showPasswordRules, setShowPasswordRules] = useState(false);\n const [changeButton, setChangeButton] = useState(true);\n\n const validatePasswordStrength = (password: string) => {\n const validationRules: PasswordValidation[] = [\n {\n validate: password.length >= 8,\n label: '8 Letters',\n },\n {\n validate: /[!@#$%^&*()\\-_=+{};:,<.>]/.test(password),\n label: '1 special character',\n },\n {\n validate: /[A-Z]/.test(password),\n label: '1 uppercase letter',\n },\n {\n validate: /\\d/.test(password),\n label: '1 number',\n },\n { validate: /[a-z]/.test(password), label: '1 lowercase letter' },\n ];\n\n disableChangeButton(validationRules);\n setPasswordValidations(validationRules);\n };\n\n const disableChangeButton = async (\n validationRules: PasswordValidation[] = passwordValidations\n ) => {\n if (validationRules?.length === 0 || !validationRules) {\n return true;\n }\n const isFailed = validationRules?.find(\n (rule: PasswordValidation) => !rule.validate\n );\n\n const { oldPassword, newPassword, confirmPassword } =\n await form.getFieldsValue();\n\n if (!isFailed && oldPassword && newPassword && confirmPassword) {\n setChangeButton(false);\n return;\n }\n\n setChangeButton(true);\n };\n\n const onSubmit = async () => {\n try {\n if (showPasswordRules) return;\n\n const formValid = await form.validateFields();\n\n onUpdatePassword(formValid);\n } catch (error) {}\n };\n\n return (\n {`Change password`}}\n open={isVisible}\n width={450}\n data-testid={testId}\n footer={[\n ,\n ]}\n cancelText\n onCancel={() => onCancel()}\n >\n \n \n \n \n \n \n \n {\n form.setFieldValue(\n 'oldPassword',\n e.target.value\n );\n disableChangeButton();\n onChangeOldPassword();\n }}\n />\n {error.visible && (\n \n {error.message}\n \n )}\n \n \n
\n \n \n \n ({\n validator(_: any, value: string) {\n if (\n !value ||\n getFieldValue(\n 'oldPassword'\n ) !== value\n ) {\n return Promise.resolve();\n }\n return Promise.reject(\n new Error(\n '“New password” have to be different than Old password”'\n )\n );\n },\n }),\n ]}\n >\n \n setShowPasswordRules(true)\n }\n onChange={(e) =>\n validatePasswordStrength(\n e.target.value\n )\n }\n onBlur={() => {\n const isFalse =\n passwordValidations?.find(\n (\n rule: PasswordValidation\n ) => !rule.validate\n );\n if (!isFalse) {\n setShowPasswordRules(false);\n }\n }}\n />\n \n \n {showPasswordRules &&\n !!passwordValidations.length && (\n \n \n A valid password must contain at\n least\n {passwordValidations?.map(\n (\n rule: PasswordValidation,\n index: number\n ) => (\n \n {' '}\n {rule.label}\n \n )\n )}{' '}\n \n \n )}\n \n \n \n ({\n validator(_: any, value: string) {\n if (\n !value ||\n getFieldValue(\n 'newPassword'\n ) === value\n ) {\n return Promise.resolve();\n } else {\n return Promise.reject(\n new Error(\n '“New password” and “Repeat password” don’t match'\n )\n );\n }\n },\n }),\n ]}\n >\n disableChangeButton()}\n />\n \n \n \n \n \n \n \n );\n}\n\nexport default ChangePasswordModal;\n","export type JsonErrorProps = {\n error: string;\n code: number;\n};\n\nexport default class JsonError extends Error {\n public readonly code: number;\n\n constructor({ error, code }: JsonErrorProps) {\n super(error || 'Unknown json error');\n this.code = code || 0;\n }\n}\n","import JsonError from './JsonError';\n\nexport default class UnauthorizedApiError extends JsonError {}\n","import UnauthorizedApiError from '../errors/UnauthorizedApiError';\nimport JsonError from '../errors/JsonError';\nimport {\n API_AUTH,\n AUTH_APP_URL,\n AUTH_REDIRECT_URL,\n AUTH_UI_APP_DISABLED,\n CHANGE_PASSWORD,\n} from '../core/CcxEnv';\nimport { ChangePassword } from '../components/account/accountInfo/AccountInfo';\nimport { getLocalStorage } from '../core/helpers';\n\nexport type RequestProps = {\n data?: object;\n redirect?: boolean;\n};\n\nexport default class AuthService {\n protected static addr(): string {\n throw new Error(`addr() is not implemented`);\n }\n\n protected static async request(\n method: string,\n props?: RequestProps\n ): Promise {\n props = Object.assign({ redirect: true }, props || {});\n const { id, type } = getLocalStorage('org');\n const headers: HeadersInit = {};\n\n if (id && type) {\n headers['CCX-Owner'] = `${type}:${id}`;\n }\n let body: string | undefined;\n if (props.data) {\n body = JSON.stringify(props.data);\n }\n const res = await fetch(`${this.addr()}/${method}`, {\n method: 'POST',\n credentials: 'include',\n body,\n });\n let resData;\n if (![201, 204].includes(res.status)) {\n resData = await res.json();\n }\n if (res.status === 401) {\n if (AUTH_REDIRECT_URL) {\n window.location.href = AUTH_REDIRECT_URL;\n } else {\n if (props.redirect === true) {\n if (AUTH_UI_APP_DISABLED) {\n window.location.href = AUTH_APP_URL;\n } else {\n window.location.href = `${AUTH_APP_URL}/?redirectTo=${encodeURIComponent(\n window.location.href\n )}`;\n }\n }\n }\n throw new UnauthorizedApiError(resData);\n }\n if (res.status > 300) {\n throw new JsonError(resData);\n }\n return resData;\n }\n\n static async updatePassword(data: ChangePassword): Promise {\n try {\n await fetch(`${API_AUTH}/${CHANGE_PASSWORD}`, {\n method: 'POST',\n body: JSON.stringify(data),\n });\n return true;\n } catch (e) {\n return false;\n }\n }\n}\n","import { Button, Row, Col, Alert, Space } from 'antd';\nimport { ReactElement, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport { AUTH_APP_URL, AUTH_UI_APP_DISABLED } from '../../../core/CcxEnv';\nimport AppBorderedPanel from '../../ccx/common/AppBorderedPanel';\nimport AppSupportLink from '../../ccx/common/AppSupportLink';\nimport styles from './AccountInfo.module.less';\nimport { useAppSelector } from '../../../redux/hooks';\nimport LazyLoader from '../../LazyLoader';\nimport ChangePasswordModal from './ChangePasswordModal';\nimport AuthService from '../../../services/AuthService';\n\ninterface Props extends CcxComponentProps {}\n\nexport type ChangePassword = {\n oldPassword: string;\n newPassword: string;\n};\n\nexport type PasswordError = {\n visible: boolean;\n message: string;\n};\n\nexport interface ChangePasswordFormInterface extends ChangePassword {\n confirmPassword: string;\n}\n\nfunction AccountInfo({ testId = 'AccountInfo' }: Props): ReactElement {\n const { user, subscription, billingUserData, billingAddress, isLoading } =\n useAppSelector((state) => state.user);\n const [isVisible, setIsVisible] = useState(false);\n const [error, setError] = useState({\n visible: false,\n message: 'Your password is incorrect. Please, try again',\n });\n const [showPasswordLoader, setShowPasswordLoader] =\n useState(false);\n\n const closeModal = () => {\n setIsVisible(false);\n };\n\n const onChangeOldPassword = () => {\n setError({ ...error, visible: false });\n };\n\n const onUpdatePassword = async ({\n oldPassword,\n newPassword,\n }: ChangePasswordFormInterface) => {\n setShowPasswordLoader(true);\n const data: ChangePassword = {\n oldPassword,\n newPassword,\n };\n const isPasswordUpdated = await AuthService.updatePassword(data);\n setShowPasswordLoader(false);\n if (!isPasswordUpdated) {\n setError({ ...error, visible: true });\n return;\n }\n setError({ ...error, visible: false });\n setIsVisible(false);\n };\n\n return isLoading ? (\n \n ) : (\n
\n {user && subscription && (\n \n {!AUTH_UI_APP_DISABLED && !user?.emailConfirmed && (\n Verify your email address}\n description={\n <>\n We need you to verify your email. We’ve sent\n a verification email to\n {` `}\n {user?.login}. Please,\n click on the link in the email so you can\n verify your email. If you don’t see an email\n from us, check your Junk folder or try to{' '}\n \n resend the verification email\n {' '}\n again.\n \n }\n type=\"warning\"\n showIcon\n />\n )}\n\n \n To change your personal information, please\n contact our{' '}\n \n <>support team\n \n \n }\n type=\"info\"\n showIcon\n />\n\n
\n

\n Personal information\n

\n\n \n \n \n \n
\n First Name:{' '}\n {billingUserData?.firstName}\n
\n
\n Last Name:{' '}\n {billingUserData?.lastName}\n
\n
\n Email:{' '}\n {user?.login}\n
\n
\n Billing address 1:{' '}\n {billingAddress?.line1}\n
\n
\n Billing address 2:{' '}\n {billingAddress?.line2}\n
\n
\n \n\n \n \n
\n City:{' '}\n {billingAddress?.city}\n
\n
\n State:{' '}\n {billingAddress?.state}\n
\n
\n Postal code:{' '}\n {billingAddress?.postalCode}\n
\n
\n Country:{' '}\n {billingAddress?.country}\n
\n
\n \n
\n
\n
\n\n
\n

\n Company information\n

\n\n \n \n \n \n
\n Company name:{' '}\n {billingUserData?.companyName}\n
\n
\n \n\n \n \n
\n EU VAT number:{' '}\n {billingUserData?.euVatId}\n
\n
\n \n
\n
\n
\n\n
\n

\n Account management\n

\n\n \n \n \n \n
\n Change password\n
\n Make your account more secure by\n changing your password at least once\n every three months.{' '}\n
\n
\n \n\n \n \n setIsVisible(true)}\n >\n Change Password\n \n \n \n
\n
\n
\n \n )}\n \n
\n );\n}\n\nexport default AccountInfo;\n","export type CredentialsClassProps = {\n user_id: string;\n client_id: string;\n description: string;\n roles: string;\n created_at: string;\n revoked_at: string;\n last_used_at: string;\n expires_at: string;\n secret: string;\n last_used_from: string;\n status: string;\n};\n\nexport interface CredentialsInterface {\n userId: string;\n clientId: string;\n description: string;\n roles: string;\n createdAt: string;\n revokedAt: string;\n lastUsedAt: string;\n expiresAt: string;\n secret: string;\n isActive: Function;\n isExpired: Function;\n isDisabled: Function;\n lastUsedFrom: string;\n status: string;\n}\n\nexport default class Credentials implements CredentialsInterface {\n readonly userId: string;\n readonly clientId: string;\n readonly description: string;\n readonly roles: string;\n readonly createdAt: string;\n readonly revokedAt: string;\n readonly lastUsedAt: string;\n readonly expiresAt: string;\n readonly secret: string;\n readonly lastUsedFrom: string;\n readonly status: string;\n\n constructor(props: CredentialsClassProps) {\n this.userId = props.user_id;\n this.clientId = props.client_id;\n this.description = props.description || '-';\n this.roles = props.roles;\n this.createdAt = props.created_at;\n this.revokedAt = props.revoked_at;\n this.lastUsedAt = props.last_used_at;\n this.expiresAt = props.expires_at;\n this.secret = props.secret;\n this.lastUsedFrom = props.last_used_from;\n this.status = props.status;\n }\n\n isActive(): boolean {\n return this.status === 'active' && !this.isExpired();\n }\n\n isExpired(): boolean {\n if (this.expiresAt) {\n const now = new Date();\n const expiry = new Date(this.expiresAt);\n\n return !(expiry > now);\n }\n return false;\n }\n\n isDisabled(): boolean {\n return this.status === 'disabled';\n }\n\n isRevoked(): boolean {\n return !!this.revokedAt;\n }\n\n canBeDisabled(): boolean {\n return this.isActive() && !this.isRevoked();\n }\n\n canBeEnabled(): boolean {\n return this.isDisabled() && !this.isExpired();\n }\n\n canBeRevoked(): boolean {\n return (this.isActive() || this.canBeEnabled()) && !this.isRevoked();\n }\n\n canBeRemoved(): boolean {\n return this.isRevoked() || this.isExpired();\n }\n\n getStatusText(): string {\n if (this.isRevoked()) return 'Revoked';\n if (this.isDisabled()) return 'Disabled';\n if (this.isExpired()) return 'Inactive';\n if (this.isActive()) return 'Active';\n return '';\n }\n}\n","import ApiService from './ApiService';\nimport { API_AUTH } from '../core/CcxEnv';\nimport Credentials from '../types/Credentials';\n\n// constants\nconst API_URL = API_AUTH;\n\nexport default class AuthorizationService extends ApiService {\n /**\n * Get credentials\n * @param {string} dataStoreUuid\n */\n static async getAllCredentials(): Promise {\n const response = await this.request('GET', `cred/clients`);\n return response.clients.map((r: any) => new Credentials(r));\n }\n\n /**\n * Add a new Credentials to the current user in session.\n * @param {any} credentialsSettings\n */\n static async addCredentials({\n description,\n expirationHours,\n }: any): Promise {\n const requestData = {\n data: {\n description,\n expires_in_hours: expirationHours,\n },\n };\n const res = await this.request('POST', `cred/clients`, requestData);\n return res;\n }\n\n /**\n * revoke a Credentials .\n * @param {string} client_id\n */\n static async revokeCredentials(clientId: string): Promise {\n const requestData = {\n data: {\n client_id: clientId,\n },\n };\n return await this.request('PATCH', `cred/revoke`, requestData);\n }\n\n /**\n * disable a Credentials .\n * @param {string} client_id\n */\n static async disableCredentials(clientId: string): Promise {\n const requestData = {\n data: {\n client_id: clientId,\n },\n };\n return await this.request('PATCH', `cred/disable`, requestData);\n }\n\n /**\n * enable a Credentials .\n * @param {string} client_id\n */\n static async enableCredentials(clientId: string): Promise {\n const requestData = {\n data: {\n client_id: clientId,\n },\n };\n return await this.request('PATCH', `cred/enable`, requestData);\n }\n\n /**\n * remove a Credentials .\n * @param {string} client_id\n */\n static async removeCredentials(clientId: string): Promise {\n return await this.request('DELETE', `cred/clients/${clientId}`);\n }\n\n protected static getApiUrl() {\n return API_URL;\n }\n}\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport AppLabeledIconStatus from './AppLabeledIconStatus';\nimport styles from './DotLabelStatus.module.less';\n\nexport interface DotLabelStatusProps extends CcxComponentProps {\n glow?: boolean;\n label?: string;\n type?: string;\n}\n\nfunction DotLabelStatus({\n glow,\n testId = 'DotLabelStatus',\n label = '',\n type,\n}: DotLabelStatusProps): ReactElement {\n let dotCss: string = '';\n let labelCss: string = '';\n switch (type) {\n case 'ok':\n dotCss = glow\n ? styles.DotLabelStatusDotGreenGlow\n : styles.DotLabelStatusDotGreen;\n labelCss = styles.DotLabelStatusLabelGreen;\n break;\n case 'error':\n dotCss = glow\n ? styles.DotLabelStatusDotRedGlow\n : styles.DotLabelStatusDotRed;\n labelCss = styles.DotLabelStatusLabelRed;\n break;\n case 'warning':\n dotCss = glow\n ? styles.DotLabelStatusDotOrangeGlow\n : styles.DotLabelStatusDotOrange;\n labelCss = styles.DotLabelStatusLabelOrange;\n break;\n case 'info':\n dotCss = glow\n ? styles.DotLabelStatusDotBlueGlow\n : styles.DotLabelStatusDotBlue;\n labelCss = styles.DotLabelStatusLabelBlue;\n break;\n case 'disabled':\n dotCss = glow\n ? styles.DotLabelStatusDotGrayGlow\n : styles.DotLabelStatusDotGray;\n labelCss = styles.DotLabelStatusLabelGray;\n break;\n case 'normal':\n default:\n dotCss = glow\n ? styles.DotLabelStatusDotGrayGlow\n : styles.DotLabelStatusDotGray;\n labelCss = styles.DotLabelStatusLabelGray;\n }\n\n return (\n
\n
\n
\n {label}\n
\n
\n );\n}\n\nexport default DotLabelStatus;\n","import React, { ReactElement } from 'react';\nimport { Col, Row, Card, Tooltip, Button, notification } from 'antd';\nimport styles from './AppCodeCard.module.less';\nimport { useHover } from '../core/hooks/useHover';\nimport { CopyOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport CcxComponentProps from '../core/CcxComponent';\nimport CcxIconCheckCircle from './ccx/icons/CcxIconCheckCircle';\n\ninterface AppCodeCardProps extends CcxComponentProps {\n children?: any;\n className?: string;\n usageExample?: string[];\n}\n\nfunction AppCodeCard({\n children,\n className,\n usageExample,\n testId = 'AppCodeCard',\n}: AppCodeCardProps): ReactElement {\n const [hoverRef, isHovered] = useHover();\n\n const handleClick = () => {\n copyMessage(usageExample ? usageExample.join('\\r\\n') : children);\n notification.open({\n message: 'Clipboard Updated',\n description: 'Copied to clipboard.',\n icon: ,\n });\n };\n\n const copyMessage = (val: string | undefined) => {\n if (!val) {\n return;\n }\n\n const selBox = document.createElement('textarea');\n selBox.style.position = 'fixed';\n selBox.style.left = '0';\n selBox.style.top = '0';\n selBox.style.opacity = '0';\n selBox.value = val;\n document.body.appendChild(selBox);\n selBox.focus();\n selBox.select();\n document.execCommand('copy');\n document.body.removeChild(selBox);\n };\n\n return (\n \n \n \n {children}\n \n \n
\n \n \n {isHovered ? (\n \n ) : (\n \n )}\n \n \n
\n \n
\n \n );\n}\n\nexport default AppCodeCard;\n","import { Modal, Row } from 'antd';\nimport { Button } from 'antd';\nimport { Alert } from 'antd';\nimport { Col } from 'antd';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport Credentials from '../../types/Credentials';\nimport AppCodeCard from '../AppCodeCard';\nimport styles from './AuthorizationModal.module.less';\n\ninterface Props extends CcxComponentProps {\n credentials?: Credentials;\n show: boolean;\n setShow: Function;\n}\n\nfunction AuthorizationModal({\n credentials,\n testId = 'AuthorizationModal',\n show = false,\n setShow,\n}: Props) {\n const onClose = () => {\n setShow(false);\n };\n\n return (\n \n \n \n {' '}\n Copy and save the client secret before\n closing\n \n }\n description={\n \n Make sure you've copied and saved the client\n secret before you close this dialog. The\n client secret value can not be obtained\n later.\n \n }\n style={{ textAlign: 'start' }}\n type=\"warning\"\n showIcon\n />\n \n \n \n Close\n \n \n \n }\n >\n {credentials && (\n <>\n
\n \n Client ID\n \n \n
\n \n \n Client secret\n \n \n
\n \n )}\n \n );\n}\n\nexport default AuthorizationModal;\n","import { Modal, Menu, Button, Dropdown, notification } from 'antd';\nimport { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport AuthorizationService from '../../../services/AuthorizationService';\nimport Credentials from '../../../types/Credentials';\nimport AppConfirmDialog from '../../AppConfirmDialog';\nimport CcxContextualMenuIcon from '../../ccx/icons/CcxContextualMenuIcon';\nimport CcxIconCheckCircle from '../../ccx/icons/CcxIconCheckCircle';\nimport CcxIconCloseCircleTwoTone from '../../ccx/icons/CcxIconCloseCircleTwoTone';\nimport CcxIconInfoCircleTwoTone from '../../ccx/icons/CcxIconInfoCircleTwoTone';\n\ninterface Props extends CcxComponentProps {\n credentials: Credentials;\n refresh: Function;\n}\n\nexport function CredentialsActions({\n testId = 'CredentialsActions',\n credentials,\n refresh,\n}: Props): ReactElement {\n const enableCrendentials = () => {\n return new Promise(async (resolve, reject) => {\n notification.open({\n message: 'Enable Credentials',\n description: 'Credentials will be enabled',\n icon: ,\n });\n\n Modal.destroyAll();\n\n try {\n await AuthorizationService.enableCredentials(\n credentials.clientId\n );\n\n refresh && (await refresh());\n\n notification.open({\n message: 'Enable Credentials',\n description: 'Credentials successfully enabled',\n icon: ,\n });\n\n resolve(null);\n } catch (e) {\n notification.open({\n message: 'Enable Credentials',\n description: `There was an error enabling the Credentials. ${e}`,\n icon: ,\n });\n\n reject();\n }\n });\n };\n\n const disableCrendentials = () => {\n return new Promise(async (resolve, reject) => {\n notification.open({\n message: 'Disable Credentials',\n description: 'Credentials will be disabled',\n icon: ,\n });\n\n Modal.destroyAll();\n\n try {\n await AuthorizationService.disableCredentials(\n credentials.clientId\n );\n\n refresh && (await refresh());\n\n notification.open({\n message: 'Disable Credentials',\n description: 'Credentials successfully disabled',\n icon: ,\n });\n\n resolve(null);\n } catch (e) {\n notification.open({\n message: 'Disable Credentials',\n description: `There was an error disabling the Credentials. ${e}`,\n icon: ,\n });\n\n reject();\n }\n });\n };\n\n const removeCrendentials = () => {\n return new Promise(async (resolve, reject) => {\n notification.open({\n message: 'Remove Credentials',\n description: 'Credentials will be removed',\n icon: ,\n });\n\n Modal.destroyAll();\n\n try {\n await AuthorizationService.removeCredentials(\n credentials.clientId\n );\n\n refresh && (await refresh());\n\n notification.open({\n message: 'Remove Credentials',\n description: 'Credentials successfully removed',\n icon: ,\n });\n\n resolve(null);\n } catch (e) {\n notification.open({\n message: 'Remove Credentials',\n description: `There was an error removing the Credentials. ${e}`,\n icon: ,\n });\n\n reject();\n }\n });\n };\n\n const revokeCredentials = () => {\n return new Promise(async (resolve, reject) => {\n notification.open({\n message: 'Revoke Credentials',\n description: 'Credentials will be revoked',\n icon: ,\n });\n\n Modal.destroyAll();\n\n try {\n await AuthorizationService.revokeCredentials(\n credentials.clientId\n );\n\n refresh && (await refresh());\n\n notification.open({\n message: 'Revoke Credentials',\n description: 'Credentials successfully revoked',\n icon: ,\n });\n\n resolve(null);\n } catch (e) {\n notification.open({\n message: 'Revoke Credentials',\n description: `There was an error revoking the Credentials. ${e}`,\n icon: ,\n });\n\n reject();\n }\n });\n };\n\n const menu = (\n \n {credentials.canBeDisabled() && (\n \n Disable\n \n )}\n\n {credentials.canBeEnabled() && (\n \n Enable\n \n )}\n\n {credentials.canBeRevoked() && (\n \n \n \n )}\n\n {credentials.canBeRemoved() && (\n \n \n \n )}\n \n );\n\n return (\n \n \n }\n >\n \n );\n}\n","import { Row, Col, notification, Select, message, Tooltip } from 'antd';\nimport moment from 'moment';\nimport { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport useCredentials from '../../../core/hooks/useCredentials';\nimport AuthorizationService from '../../../services/AuthorizationService';\nimport Credentials from '../../../types/Credentials';\nimport AppEmpty from '../../AppEmpty';\nimport AppTable from '../../AppTable';\nimport ButtonModalForm from '../../ButtonModalForm';\nimport DotLabelStatus from '../../ccx/common/DotLabelStatus';\nimport CcxIconCheckCircle from '../../ccx/icons/CcxIconCheckCircle';\nimport CcxIconCloseCircleTwoTone from '../../ccx/icons/CcxIconCloseCircleTwoTone';\nimport LazyLoader from '../../LazyLoader';\nimport AuthorizationModal from '../AuthorizationModal';\nimport styles from './Authorization.module.less';\nimport { CredentialsActions } from './CredentialsActions';\nimport usePiwikPro from '../../../core/hooks/usePiwikPro';\nimport {\n CLICK_EVENT,\n DATASTORE_EXTEND_STORAGE_TRIGGERED_FAILED,\n DATASTORE_EXTEND_STORAGE_TRIGGERED_SUCCESSFULLY,\n} from '../../../core/PiwikConstants';\n\nconst HOUR = 1;\n\ntype TimeValidation = {\n status: boolean;\n message: string;\n};\n\ntype IsValidDuration = {\n duration: number;\n unit: string;\n};\n\nexport function Authorization({\n testId = 'Authorization',\n}: CcxComponentProps): ReactElement {\n const { trackEvent } = usePiwikPro();\n const [showResult, setShowResult] = useState(false);\n const [extra, setExtra] = useState(\n 'Leave empty for never expiring tokens'\n );\n const [newCredentials, setNewCredentials] = useState();\n const { Option } = Select;\n const { credentials, refresh, loading } = useCredentials();\n const [tableData, setTableData] = useState([]);\n const [selectedTimeUnit, setSelectedTimeUnit] = useState('Hours');\n const [timeDuration, setTimeDuration] = useState(1);\n\n const onChangeTimeUnit = (unit: string) => {\n setSelectedTimeUnit(unit);\n isValidDuration({\n duration: timeDuration,\n unit: unit,\n });\n };\n\n const SelectAfter = () => (\n {\n onChangeTimeUnit(value);\n }}\n >\n \n \n \n \n \n );\n\n useEffect(() => {\n if (credentials) {\n setTableData(credentials);\n }\n }, [credentials]);\n\n const onChange = (e: any) => {\n setExtra(\n e\n ? 'Time will be converted in hours. Leave empty for never expiring tokens'\n : 'Leave empty for never expiring tokens'\n );\n setTimeDuration(e);\n isValidDuration({\n unit: selectedTimeUnit,\n duration: e,\n });\n };\n\n const convertTimeToHours = (expirationTime: number) => {\n let duration;\n switch (selectedTimeUnit) {\n case 'Hours':\n duration = moment.duration(expirationTime, 'hours');\n break;\n case 'Week':\n duration = moment.duration(expirationTime, 'weeks');\n break;\n case 'Month':\n duration = moment.duration(expirationTime, 'months');\n break;\n case 'Year':\n duration = moment.duration(expirationTime, 'years');\n break;\n default:\n throw new Error('Unknown time unit');\n }\n return Number(duration.asHours().toFixed(2));\n };\n\n const isValidDuration = (values: IsValidDuration) => {\n if (!values) {\n values = {\n duration: timeDuration,\n unit: selectedTimeUnit,\n };\n }\n let { duration } = values;\n const expirationHours = convertTimeToHours(duration);\n return expirationHours % HOUR === 0;\n };\n\n const doApiRequest = async ({ description, expirationTime }: any) => {\n const expirationHours: number = convertTimeToHours(expirationTime);\n try {\n const response = await AuthorizationService.addCredentials({\n description,\n expirationHours,\n });\n\n setNewCredentials(new Credentials(response));\n setShowResult(true);\n trackEvent(\n CLICK_EVENT,\n DATASTORE_EXTEND_STORAGE_TRIGGERED_SUCCESSFULLY\n );\n notification.open({\n message: 'Create credentials',\n description: `New credentials successfully created!`,\n icon: ,\n });\n\n return true;\n } catch (e) {\n trackEvent(CLICK_EVENT, DATASTORE_EXTEND_STORAGE_TRIGGERED_FAILED);\n notification.open({\n message: 'Create credentials',\n description: `There was an error creating your credentials. ${e}`,\n icon: ,\n });\n\n throw e;\n }\n };\n\n const fieldsSetup = [\n {\n name: ['description'],\n testId: 'AuthorizationDescription',\n label: 'Description',\n placeholder: 'What the token will be used for',\n },\n {\n name: ['expirationTime'],\n testId: 'AuthorizationExpirationTime',\n type: 'number',\n minValue: HOUR,\n step: HOUR,\n options: ,\n defaultValue: timeDuration,\n label: 'Expiration time',\n placeholder: 'After what time the token will expire',\n align: 'left',\n extra,\n onChange,\n },\n ];\n\n let StatusComponent = null;\n\n const tableColumns = [\n {\n title: 'Client ID',\n dataIndex: 'clientId',\n key: 'clientId',\n },\n {\n title: 'Status',\n key: 'status',\n dataIndex: 'status',\n render: (value: string, record: any) => {\n if (record?.isRevoked()) {\n StatusComponent = (\n \n );\n } else if (record?.isDisabled()) {\n StatusComponent = (\n \n );\n } else if (record?.isExpired()) {\n StatusComponent = (\n \n );\n } else if (record?.isActive()) {\n StatusComponent = (\n \n );\n } else {\n StatusComponent = (\n \n );\n }\n return StatusComponent;\n },\n },\n {\n title: 'Expires in',\n key: 'expiresAt',\n render: (value: string, record: any) => {\n if (record.expiresAt) {\n const now = new Date();\n const expiry = new Date(record.expiresAt);\n\n return expiry > now\n ? moment.utc(record?.expiresAt).fromNow()\n : 'Expired';\n }\n return 'Never';\n },\n },\n {\n title: 'Created',\n key: 'createdAt',\n render: (value: string, record: any) => {\n return moment.utc(record?.createdAt).fromNow();\n },\n },\n {\n title: 'Last Used',\n key: 'lastUsedAt',\n dataIndex: 'lastUsedAt',\n render: (value: string, record: any) => {\n return record.lastUsedAt\n ? `${moment(record?.lastUsedAt).format(\n 'YYYY-MM-DD HH:mm:ss'\n )} from ${record.lastUsedFrom}`\n : 'Never';\n },\n },\n {\n title: 'Description',\n dataIndex: 'description',\n key: 'description',\n },\n {\n title: 'Actions',\n key: 'pdf',\n render: (text: string, record: any) => (\n \n ),\n },\n ];\n\n if (loading) {\n return ;\n }\n\n return (\n
\n \n \n OAuth2 credentials\n \n \n \n\n \n \n \n\n {tableData ? (\n \n ) : (\n \n )}\n
\n );\n}\n","import { useEffect, useState } from 'react';\nimport Credentials from '../../types/Credentials';\nimport AuthorizationService from '../../services/AuthorizationService';\n\nexport default function useCredentials(uuid?: string) {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n const [updating, setUpdating] = useState(false);\n const [credentials, setCredentials] = useState<\n Credentials[] | undefined | any\n >(undefined);\n\n const load = async () => {\n try {\n const credentials = await AuthorizationService.getAllCredentials();\n setCredentials(credentials);\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n // get credentials for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, [uuid]);\n\n return { credentials, refresh, loading, error, updating };\n}\n","import { Tabs } from 'antd';\nimport React, { ReactElement, Suspense, useEffect } from 'react';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport LazyLoader from '../LazyLoader';\nimport styles from './Account.module.less';\nimport PaymentsInvoices from './paymentsInvoices/PaymentsInvoices';\nimport AccountInfo from './accountInfo/AccountInfo';\nimport { billingDisabled } from '../../core/CcxEnv';\nimport { Authorization } from './authorization/Authorization';\nimport usePiwikPro from '../../core/hooks/usePiwikPro';\nimport { ACCOUNT_PAGE } from '../../core/PiwikConstants';\n\ninterface Props extends CcxComponentProps {}\n\nfunction Account({ testId = 'Account' }: Props): ReactElement {\n const { trackPageView } = usePiwikPro();\n\n useEffect(() => {\n trackPageView(ACCOUNT_PAGE);\n }, []);\n\n return (\n
\n

\n Account\n

\n\n \n \n }>\n \n \n \n {!billingDisabled && (\n \n }>\n \n \n \n )}\n \n }>\n \n \n \n \n
\n );\n}\n\nexport default Account;\n","import ApiService from './ApiService';\nimport { API_PROV, API_PROV_V2 } from '../core/CcxEnv';\nimport { CloudRegion } from '../types/DeploymentsItem';\nimport DataStoreEmailNotificationsSettings from '../types/DataStoreEmailNotifications';\n\ntype AddDeploymentProps = {\n clusterName: string;\n clusterType: string;\n cloudProvider: string;\n region: string;\n dbVendor: string;\n instanceSize: string;\n deploymentSize: number;\n vpcUuid: string;\n diskSize: number;\n iops: number;\n};\n\nexport type AddDeploymentV2Props = {\n clusterName: string;\n numberOfNodes: number;\n databaseVendor: string;\n databaseVendorType: string;\n tags: string[];\n cloudProvider: string;\n cloudRegion: string;\n instanceSize: string;\n volumeType: string;\n volumeSize: number;\n volumeIops?: number;\n networkType: string;\n haEnabled: boolean;\n vpcUuid?: string;\n availabilityZones?: string[];\n version?: string;\n backupId?: string;\n dataStoreUuid?: string;\n notifications: DataStoreEmailNotificationsSettings;\n parameterGroupId?: string;\n};\n\ntype AddNodeProps = {\n imageId: string;\n availabilityZone: string;\n instanceSize: string;\n volumeType: string;\n volumeSize: number;\n volumeIops: number;\n};\n\ninterface UpdateDeploymentProps {\n dataStoreUuid: string;\n dataStoreName?: string;\n dayOfWeek?: number;\n startHour?: number;\n endHour?: number;\n proxySqlAdminPassword?: string;\n autoscaleStorage?: boolean;\n notifications?: NotificationEmails;\n}\n\ninterface NotificationEmails {\n enabled: boolean;\n emails: string[];\n}\n\ninterface UpdateDatastoreStorageProps {\n dataStoreUuid: string;\n data: any;\n}\n\ninterface ScaleUpdatastoreNodeProps {\n dataStoreUuid: string;\n nodeData: any[];\n}\n\ninterface ScalDowndatastoreNodeProps {\n dataStoreUuid: string;\n nodeUuids: any[];\n}\n\ninterface UpgradeDatastoreProps {\n dataStoreUuid: string;\n canUpgradeTo: string;\n}\n\ninterface RepairNodeProps {\n dataStoreUuid: string;\n hostUuid: string;\n}\n\nexport default class ProvisionService extends ApiService {\n /**\n * Updates data store settings\n * @param {...} UpdateDeploymentProps\n * @returns Promise\n */\n static async updateDeployment({\n dataStoreUuid,\n dataStoreName,\n dayOfWeek,\n startHour,\n endHour,\n proxySqlAdminPassword,\n autoscaleStorage,\n notifications,\n }: UpdateDeploymentProps): Promise {\n const requestData = {\n version: 2,\n data: {\n cluster_name: dataStoreName,\n maintenance_settings:\n dayOfWeek || startHour || endHour\n ? {\n day_of_week: dayOfWeek,\n start_hour: startHour,\n end_hour: endHour,\n }\n : undefined,\n new_proxy_sql_password: proxySqlAdminPassword,\n spec: {\n autoscale_storage: {\n enabled: autoscaleStorage,\n },\n },\n notifications,\n },\n };\n return await this.updateDeploymentSettings(dataStoreUuid, requestData);\n }\n\n static async updateDeploymentSettings(\n datastoreUuid: string,\n settings: any\n ) {\n return await this.request(\n 'PATCH',\n `cluster/${datastoreUuid}`,\n settings\n );\n }\n\n /**\n * Updates datastore storage\n * @param {...} UpdateDatastoreStorageProps\n * @returns Promise\n */\n static async updateDatastoreStorage({\n dataStoreUuid,\n data,\n }: UpdateDatastoreStorageProps): Promise {\n const requestData = {\n version: 2,\n data,\n };\n return await this.updateStorage(dataStoreUuid, requestData);\n }\n\n static async updateStorage(datastoreUuid: string, storage: any) {\n return await this.request('PATCH', `cluster/${datastoreUuid}`, storage);\n }\n\n /**\n * ScaleUp datastore Nodes\n * @param {...} ScaleUpDatastoreNodeProps\n * @returns Promise\n */\n static async scaleUpDatastoreNodes({\n dataStoreUuid,\n nodeData,\n }: ScaleUpdatastoreNodeProps): Promise {\n const requestData = {\n version: 2,\n data: {\n add_nodes: {\n specs: nodeData,\n },\n },\n };\n return await this.scaleUpNodes(dataStoreUuid, requestData);\n }\n\n static async scaleUpNodes(datastoreUuid: string, nodesData: any) {\n return await this.request(\n 'PATCH',\n `cluster/${datastoreUuid}`,\n nodesData\n );\n }\n /**\n * Scale down Datastore nodes\n * @param {...} ScaleDownDatastoreNodeProps\n * @returns Promise\n */\n static async scaleDownDatastoreNodes({\n dataStoreUuid,\n nodeUuids,\n }: ScalDowndatastoreNodeProps): Promise {\n const requestData = {\n version: 2,\n data: {\n remove_nodes: {\n node_uuids: nodeUuids,\n },\n },\n };\n return await this.scaleDownNodes(dataStoreUuid, requestData);\n }\n\n static async scaleDownNodes(datastoreUuid: string, nodesData: any) {\n return await this.request(\n 'PATCH',\n `cluster/${datastoreUuid}`,\n nodesData\n );\n }\n\n /**\n * Remove a Deployment\n * @param {string} uuid\n */\n static async removeDeployment(uuid: string): Promise {\n const requestData = {\n version: 2,\n };\n const response = await this.request(\n 'DELETE',\n `cluster/${uuid}`,\n requestData\n );\n return response;\n }\n\n /**\n * Add a Deployment\n * @param {string} uuid\n */\n static async addDeployment({\n clusterName,\n clusterType,\n cloudProvider,\n region,\n dbVendor,\n instanceSize,\n deploymentSize,\n vpcUuid,\n diskSize,\n iops,\n }: AddDeploymentProps): Promise {\n const requestData = {\n data: {\n cluster_name: clusterName,\n cluster_type: clusterType,\n cloud_provider: cloudProvider,\n region,\n database_vendor: dbVendor,\n instance_size: instanceSize,\n cluster_size: deploymentSize,\n vpc_uuid: vpcUuid,\n disk_size: diskSize,\n iops,\n },\n };\n return await this.request('POST', `cluster`, requestData);\n }\n\n /**\n * Add a Deployment\n *\n */\n static async addDeploymentV2({\n clusterName,\n numberOfNodes,\n databaseVendor,\n databaseVendorType,\n tags,\n cloudProvider,\n cloudRegion,\n instanceSize,\n volumeType,\n volumeSize,\n volumeIops,\n networkType,\n haEnabled,\n vpcUuid,\n availabilityZones,\n version,\n backupId,\n dataStoreUuid,\n notifications,\n parameterGroupId,\n }: AddDeploymentV2Props): Promise {\n let requestData: any = {\n data: {\n general: {\n cluster_name: clusterName,\n cluster_size: numberOfNodes,\n cluster_type: databaseVendorType,\n db_vendor: databaseVendor,\n db_version: version,\n tags,\n parameter_group_id: parameterGroupId,\n },\n cloud: {\n cloud_provider: cloudProvider,\n cloud_region: cloudRegion,\n },\n instance: {\n instance_size: instanceSize,\n volume_type: volumeType,\n volume_size: volumeSize,\n volume_iops: volumeIops,\n },\n network: {\n network_type: networkType,\n ha_enabled: haEnabled,\n vpc_uuid: vpcUuid,\n availability_zones: availabilityZones,\n },\n notifications,\n },\n version: 2,\n };\n if (backupId) {\n requestData = {\n ...requestData,\n data: {\n ...requestData.data,\n from_backup: {\n backup_id: Number(backupId),\n datastore_uuid: dataStoreUuid,\n },\n },\n };\n }\n return await this.request('POST', `cluster`, requestData);\n }\n\n /**\n * Add a Deployment node\n *\n */\n static async addNode(\n uuid: string,\n {\n imageId,\n availabilityZone,\n instanceSize,\n volumeType,\n volumeSize,\n volumeIops,\n }: AddNodeProps\n ): Promise {\n const requestData = {\n data: {\n image_id: imageId,\n availability_zone: availabilityZone,\n instance_size: instanceSize,\n volume_type: volumeType,\n volume_size: volumeSize,\n volume_iops: volumeIops ? volumeIops : 0,\n },\n version: 2,\n };\n\n return await this.request('POST', `cluster/${uuid}/node`, requestData);\n }\n\n /**\n * Promote a Replica node\n *\n */\n static async promoteReplica(uuid: string, hostUuid: string): Promise {\n const requestData = {\n version: 2,\n data: {\n new_master_node_id: hostUuid,\n },\n };\n return await this.request('PATCH', `cluster/${uuid}`, requestData);\n }\n\n /**\n * Remove a Deployment node\n *\n */\n static async removeNode(uuid: string, hostUuid: string): Promise {\n const requestData = {\n version: 2,\n };\n return await this.request(\n 'DELETE',\n `cluster/${uuid}/node/${hostUuid}`,\n requestData\n );\n }\n\n /**\n * Upgrade datastore\n * @param {...} UpgradeDatastoreProps\n * @returns Promise\n */\n static async upgradeDatastore({\n dataStoreUuid,\n canUpgradeTo,\n }: UpgradeDatastoreProps): Promise {\n const requestData = {\n version: 2,\n data: {\n new_server_version: canUpgradeTo,\n },\n };\n\n return await this.request(\n 'PATCH',\n `cluster/${dataStoreUuid}`,\n requestData\n );\n }\n\n /**\n * Repair node\n * @param {...} RepairNodeProps\n * @returns Promise\n */\n static async repairNode({\n dataStoreUuid,\n hostUuid,\n }: RepairNodeProps): Promise {\n const requestData = {\n version: 2,\n };\n\n return await this.request(\n 'POST',\n `cluster/${dataStoreUuid}/node/${hostUuid}/repair`,\n requestData\n );\n }\n\n protected static getApiUrl(version = 1) {\n if (version === 2) return API_PROV_V2;\n return API_PROV; // v1\n }\n\n static async rebootNode(dataStoreUuid: string, hostUuid: string) {\n const requestData = {\n version: 2,\n };\n\n const requested = await this.request(\n 'POST',\n `cluster/${dataStoreUuid}/node/${hostUuid}/reboot`,\n requestData\n );\n }\n}\n","import React, { ReactElement, useState } from 'react';\nimport styles from './ExpandableText.module.less';\nimport { Tooltip } from 'antd';\nimport Hoverable from './Hoverable';\n\nexport type ExpandableTextProps = {\n collapsedText?: string;\n expandedText?: string;\n showDateOnHover?: boolean;\n};\n\nfunction ExpandableText({\n collapsedText,\n expandedText,\n showDateOnHover = false,\n}: ExpandableTextProps): ReactElement {\n const [expanded, setExpanded] = useState(false);\n\n const handleClick = () => {\n setExpanded(!expanded);\n };\n\n return (\n \n \n {!showDateOnHover && expanded ? (\n {expandedText}\n ) : (\n {collapsedText}\n )}\n \n \n );\n}\n\nexport default ExpandableText;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport styles from './SmallContainer.module.less';\n\ninterface Props extends CcxComponentProps {\n bottomChildren?: ReactElement;\n middleChildren?: ReactElement;\n topChildren?: ReactElement;\n}\n\nfunction SmallContainer({\n bottomChildren,\n middleChildren,\n topChildren,\n testId = 'SmallContainer',\n}: Props): ReactElement {\n return (\n
\n \n {topChildren}\n
\n \n {middleChildren}\n \n \n {bottomChildren}\n \n \n );\n}\n\nexport default SmallContainer;\n","import { ReactElement } from 'react';\nimport { Tooltip } from 'antd';\nimport styles from './DataStoreInformation.module.less';\nimport { Link, useParams } from 'react-router-dom';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport DeploymentsItem from '../../../types/DeploymentsItem';\nimport ExpandableText from '../../ExpandableText';\nimport SmallContainer from '../../ccx/common/SmallContainer';\nimport CopyToClipboardText from '../../CopyToClipboardText';\nimport { useOnlineStatus } from '../../../core/hooks/useOnlineStatus';\n\ninterface UrlProps {\n projectUuid: string;\n}\ninterface Props extends CcxComponentProps {\n dataStore: DeploymentsItem;\n}\n\nfunction DataStoreInformation({\n dataStore,\n testId = 'DataStoreInformation',\n}: Props): ReactElement {\n const { projectUuid } = useParams();\n const isOnline = useOnlineStatus();\n\n const tooltipContent = (\n
\n
{dataStore?.getName()}
\n
\n );\n\n const isAccessible =\n dataStore?.isOperable() ||\n dataStore.isAccessible() ||\n dataStore.isUnreachable() ||\n dataStore.isUnderMaintenance();\n\n const top = (\n
\n {isAccessible && isOnline ? (\n \n \n 23\n ? styles.DataStoreInformationTopLongName\n : ''\n } ${styles.DataStoreInformationTopName}`}\n >\n {dataStore?.getName()}\n
\n \n \n ) : (\n \n 23\n ? styles.DataStoreInformationTopLongName\n : ''\n } ${styles.DataStoreInformationTopName}`}\n >\n {dataStore?.getName()}\n \n \n )}{' '}\n \n );\n\n const middle = (\n
\n 15\n ? `${dataStore.getUUID().substring(0, 15)}...`\n : dataStore.getUUID()\n }\n tooltip={dataStore.getUUID()}\n hoverable={false}\n />\n
\n );\n\n const bottom = (\n <>\n Created: \n \n \n );\n\n return (\n \n );\n}\n\nexport default DataStoreInformation;\n","import { useState, useEffect } from 'react';\n\nexport const useOnlineStatus = () => {\n const [isOnline, setIsOnline] = useState(navigator.onLine);\n\n useEffect(() => {\n const handleOnline = () => setIsOnline(true);\n const handleOffline = () => setIsOnline(false);\n\n window.addEventListener('online', handleOnline);\n window.addEventListener('offline', handleOffline);\n\n return () => {\n window.removeEventListener('online', handleOnline);\n window.removeEventListener('offline', handleOffline);\n };\n }, []);\n\n return isOnline;\n};\n","import { Spin, Tooltip } from 'antd';\nimport { ReactElement, useEffect } from 'react';\nimport styles from './DataStoreStatus.module.less';\nimport DeploymentsItem from '../../../types/DeploymentsItem';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport DotLabelStatus from '../../ccx/common/DotLabelStatus';\nimport SmallContainer from '../../ccx/common/SmallContainer';\nimport useDataStoreJobs from '../../../core/hooks/useDataStoreJobs';\nimport Job from '../../../types/Job';\n\ninterface Props extends CcxComponentProps {\n dataStore: DeploymentsItem;\n updating?: boolean;\n}\n\nfunction DataStoreStatus({\n dataStore,\n testId = 'DataStoreStatus',\n updating = false,\n}: Props): ReactElement {\n const currentJob = dataStore?.getCurrentJobs();\n let StatusComponent = null;\n\n if (dataStore?.isStatusOk()) {\n StatusComponent = (\n \n );\n } else if (dataStore?.isStatusError()) {\n StatusComponent = (\n \n );\n } else if (dataStore?.isStatusWarning()) {\n StatusComponent = (\n \n );\n } else if (dataStore?.isDeleting()) {\n StatusComponent = (\n \n );\n } else if (dataStore?.isDeploying()) {\n StatusComponent = (\n \n );\n } else {\n StatusComponent = (\n \n );\n }\n\n const tooltipTitle = dataStore?.isStatusError()\n ? `${dataStore?.getNotes()}`\n : dataStore?.isStatusWarning()\n ? null\n : `${dataStore?.getDataStoreStatusText()}`;\n\n const top = (\n \n {StatusComponent}{' '}\n \n );\n\n const getLatestRunningJob = () => {\n if (currentJob) {\n const runningJob = currentJob.find((job: Job) =>\n job.isStatusRunning()\n );\n\n return runningJob?.getRunningStatusTextByType();\n }\n };\n\n const middle: any = getLatestRunningJob() && (\n
\n \n {getLatestRunningJob()}\n
\n );\n\n return (\n \n );\n}\n\nexport default DataStoreStatus;\n","import React from 'react';\nimport styles from './CloudProviderLogo.module.less';\n\nconst CloudProviderLogo: React.FC<{ url: string }> = ({ url }) => (\n {url}\n);\nexport default CloudProviderLogo;\n","import Icon from '@ant-design/icons/lib/components/Icon';\nimport CloudProvider from '../../../types/CloudProvider';\nimport CloudProviderLogo from './CloudProviderLogo';\n\nexport const getCloudProviderLogo = (p: CloudProvider, extended?: boolean) => {\n if (p) {\n const url = p?.getCloudProviderLogo();\n\n return } />;\n }\n return null;\n};\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport DeploymentsItem from '../../../types/DeploymentsItem';\nimport AppFlagIcon from '../../ccx/common/AppFlagIcon';\nimport SmallContainer from '../../ccx/common/SmallContainer';\nimport { getCloudProviderLogo } from './DataStoreCloudProviderLogo';\n\ninterface Props extends CcxComponentProps {\n countryCode: string;\n dataStore: DeploymentsItem;\n}\n\nfunction CloudInformation({\n countryCode,\n dataStore,\n testId = 'CloudInformation',\n}: Props): ReactElement {\n const extended = true;\n const top = (\n <>\n {getCloudProviderLogo(dataStore.getCloudProvider(), extended)}\n
{dataStore.getFullCloudProviderName()}
\n \n );\n const middle = (\n <>\n \n
\n {dataStore?.isLintasarta()\n ? dataStore?.preferredRegion\n : dataStore?.cloudRegion.display_code}\n
\n \n );\n\n return (\n \n );\n}\n\nexport default CloudInformation;\n","import React, { ReactElement } from 'react';\nimport Icon from '@ant-design/icons';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport styles from './AppCdnSvg.module.less';\n\ninterface Props extends CcxComponentProps {\n filename: string;\n height?: number;\n size: string | number;\n width?: number;\n}\n\nfunction AppCdnSvg({\n className,\n filename,\n height,\n size,\n testId,\n width,\n}: Props): ReactElement {\n const ICON_SIZE_XSMALL = 'xsmall';\n const ICON_SIZE_SMALL = 'small';\n const ICON_SIZE_MEDIUM = 'medium';\n const ICON_SIZE_LARGE = 'large';\n const ICON_SIZE_XLARGE = 'xlarge';\n const ICON_SIZE_2XLARGE = '2xlarge';\n\n const CDN_URL = 'https://st.s9s.io/ccx';\n\n let widthPx: string;\n let heightPx: string;\n\n if (typeof size === 'string') {\n switch (size) {\n case ICON_SIZE_XSMALL:\n heightPx = '16px';\n widthPx = '16px';\n break;\n case ICON_SIZE_MEDIUM:\n heightPx = '24px';\n widthPx = '24px';\n break;\n case ICON_SIZE_LARGE:\n heightPx = '32px';\n widthPx = '32px';\n break;\n case ICON_SIZE_XLARGE:\n heightPx = '64px';\n widthPx = '64px';\n break;\n case ICON_SIZE_2XLARGE:\n heightPx = '128px';\n widthPx = '128px';\n break;\n case ICON_SIZE_SMALL:\n default:\n heightPx = '18px';\n widthPx = '18px';\n break;\n }\n } else {\n heightPx = `${size}px`;\n widthPx = `${size}px`;\n }\n\n // width and height will overide size\n if (width && height) {\n heightPx = `${height}px`;\n widthPx = `${width}px`;\n }\n\n return (\n \n typeof filename === 'string' ? (\n \n ) : (\n React.cloneElement(filename, {\n width: widthPx,\n height: heightPx,\n })\n )\n }\n />\n );\n}\n\nexport default AppCdnSvg;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport AppCdnSvg from './AppCdnSvg';\nimport styles from './AppCdnIcon.module.less';\n\ninterface Props extends CcxComponentProps {\n height?: number;\n icon: string;\n size: string | number;\n width?: number;\n}\n\nfunction AppCdnIcon({\n className,\n height,\n icon,\n size,\n testId,\n width,\n}: Props): ReactElement {\n return (\n \n );\n}\n\nexport default AppCdnIcon;\n","import React, { ReactElement } from 'react';\nimport AppCdnIcon from '../common/AppCdnIcon';\n\ninterface Props {\n height: number;\n width: number;\n}\n\nfunction CcxIcon1NodeDeployment({ height, width }: Props): ReactElement {\n return (\n \n );\n}\n\nexport default CcxIcon1NodeDeployment;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport AppCdnSvg from './AppCdnSvg';\nimport styles from './AppLogoBrand.module.less';\n\ninterface Props extends CcxComponentProps {\n height?: number;\n logo: string;\n size: string | number;\n width?: number;\n}\n\nfunction AppCdnLogo({\n className,\n height,\n logo,\n size,\n testId,\n width,\n}: Props): ReactElement {\n return (\n \n );\n}\n\nexport default AppCdnLogo;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport AppCdnLogo from './AppCdnLogo';\nimport styles from './AppLogoBrand.module.less';\n\ninterface Props extends CcxComponentProps {\n height?: number;\n logo: string;\n size: string | number;\n width?: number;\n}\n\nfunction AppLogoBrand({\n height,\n logo,\n size,\n testId,\n width,\n}: Props): ReactElement {\n return (\n \n );\n}\n\nexport default AppLogoBrand;\n","import React, { ReactElement } from 'react';\nimport AppLogoBrand from './AppLogoBrand';\n\ninterface Props {\n height?: number;\n width?: number;\n useExtended?: boolean;\n}\n\nfunction AppLogoBrandMardiaDb({\n height = 28,\n width = 89,\n useExtended = true,\n}: Props): ReactElement {\n return (\n \n );\n}\n\nexport default AppLogoBrandMardiaDb;\n","import React, { ReactElement } from 'react';\nimport AppLogoBrand from './AppLogoBrand';\n\ninterface Props {\n height?: number;\n width?: number;\n useExtended?: boolean;\n}\n\nfunction AppLogoBrandPostgreSql({\n height = 28,\n width = 89,\n useExtended = true,\n}: Props): ReactElement {\n return (\n \n );\n}\n\nexport default AppLogoBrandPostgreSql;\n","import React, { ReactElement } from 'react';\nimport AppLogoBrand from './AppLogoBrand';\n\ninterface Props {\n height?: number;\n width?: number;\n useExtended?: boolean;\n}\n\nfunction AppLogoBrandPercona({\n height = 28,\n width = 89,\n useExtended = true,\n}: Props): ReactElement {\n return (\n \n );\n}\n\nexport default AppLogoBrandPercona;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport AppLogoBrand from './AppLogoBrand';\n\ninterface Props extends CcxComponentProps {\n height?: number;\n width?: number;\n useExtended?: boolean;\n}\n\nfunction AppLogoBrandRedis({\n height = 28,\n width = 90,\n testId = 'AppLogoBrandRedis',\n useExtended = true,\n}: Props): ReactElement {\n return (\n \n );\n}\n\nexport default AppLogoBrandRedis;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport AppLogoBrand from './AppLogoBrand';\n\ninterface Props extends CcxComponentProps {\n height?: number;\n width?: number;\n useExtended?: boolean;\n}\n\nfunction AppLogoBrandMssql({\n height = 28,\n width = 90,\n testId = 'AppLogoBrandMssql',\n useExtended = true,\n}: Props): ReactElement {\n return (\n \n );\n}\n\nexport default AppLogoBrandMssql;\n","import React, { ReactElement } from 'react';\nimport styles from './DatabaseInformation.module.less';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport DeploymentsItem from '../../../types/DeploymentsItem';\nimport CcxIcon1NodeDeployment from '../../ccx/icons/CcxIcon1NodeDeployment';\nimport AppLogoBrandMardiaDb from '../../ccx/common/AppLogoBrandMardiaDb';\nimport AppLogoBrandPostgreSql from '../../ccx/common/AppLogoBrandPostgreSql';\nimport AppLogoBrandPercona from '../../ccx/common/AppLogoBrandPercona';\nimport AppLogoBrandRedis from '../../ccx/common/AppLogoBrandRedis';\nimport SmallContainer from '../../ccx/common/SmallContainer';\nimport AppLogoBrandMssql from '../../ccx/common/AppLogoBrandMssql';\n\ninterface Props extends CcxComponentProps {\n dataStore: DeploymentsItem;\n}\n\nfunction DatabaseInformation({\n dataStore,\n testId = 'DatabaseInformation',\n}: Props): ReactElement {\n const getLogo = (ds: DeploymentsItem) => {\n if (ds.isMariaDb()) {\n return (\n \n );\n }\n if (ds.isPostgreSql()) {\n return (\n \n );\n }\n if (ds.isPercona()) {\n return (\n \n );\n }\n if (ds.isRedis()) {\n return (\n \n );\n }\n if (ds.isMSSQL()) {\n return (\n \n );\n }\n return null;\n };\n\n const top = (\n <>\n {getLogo(dataStore)}\n
\n {dataStore?.getDbVendorName()}\n {` `}\n {dataStore?.db.dbVersion}\n
\n \n );\n const bottom = (\n <>\n {dataStore.getNumberOfNodes() && (\n \n )}\n
\n {dataStore.getNumberOfNodes()}{' '}\n {dataStore.getNumberOfNodes() === 1 ? 'node' : 'nodes'}\n
\n \n );\n\n return (\n \n );\n}\n\nexport default DatabaseInformation;\n","import { ReactElement, ReactNode } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport styles from './ChartCustomTooltip.module.less';\n\nexport interface ChartCustomTooltipRowType {\n color?: string;\n label: string;\n value: string | number;\n}\n\ninterface Props extends CcxComponentProps {\n content: ReactNode;\n}\n\nfunction TinyChartCustomTooltip({\n testId = 'ChartCustomTooltip',\n content,\n}: Props): ReactElement {\n return (\n
\n \n {content}\n
\n \n );\n}\n\nexport default TinyChartCustomTooltip;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CmonSqlStat from '../../../types/CmonSqlStat';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport AppChartTinyArea from '../../AppChartTinyArea';\nimport LazyLoader from '../../LazyLoader';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\nimport styles from './QueriesPerSecondChart.module.less';\nimport TinyChartCustomTooltip from './TinyChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: CmonSqlStat[];\n loading: boolean;\n isPostgreSql?: boolean;\n tiny?: boolean;\n}\n\nfunction QueriesPerSecondChart({\n data,\n isPostgreSql,\n loading,\n tiny = true,\n testId = 'QueriesPerSecondChart',\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: CmonSqlStat) => {\n const yValue = Math.round(\n isPostgreSql ? stat.commits : stat.queries\n );\n\n return {\n yValue,\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n };\n });\n\n setChartData(formattedData.flat());\n }\n }, [data]);\n\n const chartConfig = {\n description: {\n visible: true,\n text: '',\n },\n areaStyle: {\n fill: tiny ? '#a8c3fa' : '#530099',\n },\n height: tiny ? 75 : 100,\n width: tiny ? 200 : 500,\n autoFit: true,\n xField: 'xValue',\n yField: 'yValue',\n annotations: tiny\n ? []\n : [\n {\n type: 'line',\n start: ['min', 'median'],\n end: ['max', 'median'],\n style: {\n stroke: 'grey',\n lineDash: [2, 2],\n },\n },\n ],\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n tickCount: 5,\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return text;\n },\n },\n tickCount: 3,\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n if (tiny) return data[0]?.data?.yValue;\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return tiny ? (\n \n ) : (\n \n );\n },\n },\n };\n\n return loading ? (\n \n ) : chartData.length > 0 ? (\n
\n \n
\n ) : (\n
\n
\n \n
\n

\n Monitoring is being set up ...\n

\n
\n );\n}\n\nexport default QueriesPerSecondChart;\n","import { ReactElement, useEffect } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport useQueriesPerSecondStats from '../../../core/hooks/useQueriesPerSecondStats';\nimport DeploymentsItem from '../../../types/DeploymentsItem';\nimport QueriesPerSecondChart from '../../ccx/charts/QueriesPerSecondChart';\n\ninterface Props extends CcxComponentProps {\n dataStore?: DeploymentsItem;\n tiny?: boolean;\n}\n\nfunction DataStoreChart({\n dataStore,\n testId = 'DataStoreChart',\n tiny,\n}: Props): ReactElement {\n const { stats, refresh, loading } = useQueriesPerSecondStats({\n dataStoreUuid: dataStore?.dataStoreUuid,\n isPostgreSql: dataStore?.isPostgreSql(),\n });\n\n useEffect(() => {\n const AUTO_REFRESH_INTERVAL = 60000;\n\n const interval = setInterval(() => {\n refresh();\n }, AUTO_REFRESH_INTERVAL);\n\n return () => clearInterval(interval);\n }, []);\n\n return (\n \n );\n}\n\nexport default DataStoreChart;\n","import { useEffect, useState } from 'react';\nimport StatService from '../../services/StatService';\nimport CmonSqlStat from '../../types/CmonSqlStat';\nimport moment from 'moment';\n\ninterface Props {\n dataStoreUuid?: string;\n isPostgreSql?: boolean;\n}\n\nexport default function useQueriesPerSecondStats({\n dataStoreUuid,\n isPostgreSql,\n}: Props) {\n const [loading, setLoading] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState(undefined);\n\n const load = async () => {\n const from = moment().subtract(15, 'minutes').toISOString();\n const to = moment().toISOString();\n\n if (dataStoreUuid) {\n try {\n const details = isPostgreSql\n ? await StatService.getAggregatedPostgreSqlStats(\n dataStoreUuid,\n from,\n to\n )\n : await StatService.getAggregatedMySqlStats(\n dataStoreUuid,\n from,\n to\n );\n const data = details[Object.keys(details)[0]];\n setStats(data.map((s: any) => new CmonSqlStat(s)));\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, [dataStoreUuid]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { StopOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport React from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {}\n\nconst CcxIconStopOutlined = ({ testId = 'CcxIconStopOutlined' }: Props) => {\n return ;\n};\n\nexport default CcxIconStopOutlined;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CcxIconStopOutlined from '../icons/CcxIconStopOutlined';\nimport styles from './NoChartAvailable.module.less';\n\ninterface Props extends CcxComponentProps {}\n\nfunction NoChartAvailable({\n testId = 'NoChartAvailable',\n}: Props): ReactElement {\n return (\n
\n \n
Data is not available
\n
\n );\n}\n\nexport default NoChartAvailable;\n","var _circle, _circle2, _circle3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgCircle(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 292,\n height: 292,\n viewBox: \"0 0 292 292\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 146,\n cy: 146,\n r: 145.5,\n stroke: \"#FFF7E6\"\n })), _circle2 || (_circle2 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 146,\n cy: 146,\n r: 105.502,\n stroke: \"#FFE7BA\",\n strokeWidth: 2\n })), _circle3 || (_circle3 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 146,\n cy: 146,\n r: 67.6208,\n stroke: \"#FFD591\",\n strokeWidth: 3\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgCircle);\nexport default __webpack_public_path__ + \"static/media/circle.fb90843d.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgExclamationCircle(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 81,\n height: 80,\n viewBox: \"0 0 81 80\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M40.5 5C21.1719 5 5.5 20.6719 5.5 40C5.5 59.3281 21.1719 75 40.5 75C59.8281 75 75.5 59.3281 75.5 40C75.5 20.6719 59.8281 5 40.5 5ZM38 23.125C38 22.7812 38.2812 22.5 38.625 22.5H42.375C42.7188 22.5 43 22.7812 43 23.125V44.375C43 44.7188 42.7188 45 42.375 45H38.625C38.2812 45 38 44.7188 38 44.375V23.125ZM40.5 57.5C39.5187 57.48 38.5843 57.0761 37.8974 56.375C37.2105 55.6739 36.8258 54.7315 36.8258 53.75C36.8258 52.7685 37.2105 51.8261 37.8974 51.125C38.5843 50.4239 39.5187 50.02 40.5 50C41.4813 50.02 42.4157 50.4239 43.1026 51.125C43.7895 51.8261 44.1742 52.7685 44.1742 53.75C44.1742 54.7315 43.7895 55.6739 43.1026 56.375C42.4157 57.0761 41.4813 57.48 40.5 57.5Z\",\n fill: \"#FAAD14\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgExclamationCircle);\nexport default __webpack_public_path__ + \"static/media/exclamationCircle.f97ad702.svg\";\nexport { ForwardRef as ReactComponent };","import { useState } from 'react';\nimport { Col, Form, Input, Modal, Row, Typography, message } from 'antd';\nimport styles from './AppDeleteModal.module.less';\nimport { ReactComponent as Circle } from './../assets/icons/circle.svg';\nimport { ReactComponent as CircleIcon } from './../assets/icons/exclamationCircle.svg';\nimport DeploymentsItem from '../types/DeploymentsItem';\nimport CcxLogo from './ccx/common/CcxLogo';\nimport Service from '../types/Service';\nimport StretchedClick from './common/StretchedClick';\n\nexport type AppDeleteModalProps = {\n confirmPhrase?: string;\n stretchedClick?: boolean;\n onConfirmDelete?: () => void;\n datastore?: DeploymentsItem;\n service?: Service;\n toDelete: string;\n testId?: string;\n};\nexport default function AppDeleteModal({\n confirmPhrase = 'delete',\n stretchedClick = false,\n onConfirmDelete,\n datastore,\n service,\n toDelete,\n testId = 'AppDeleteModal',\n}: AppDeleteModalProps) {\n const { Text } = Typography;\n const [showModal, setShowModal] = useState(false);\n const onClose = () => {\n setShowModal(false);\n };\n const [form] = Form.useForm();\n const verifyMatch = (value: string) => {\n return value === confirmPhrase;\n };\n\n const handleOk = () => {\n const phrase = form.getFieldValue('confirmation');\n if (verifyMatch(phrase)) {\n onClose();\n form.setFieldsValue({ confirmation: '' });\n onConfirmDelete && onConfirmDelete();\n } else {\n message.error(\n 'Incorrect confirmation. Did you enter the correct value?'\n );\n }\n };\n const handleKeyUpEvent = (event: any) => {\n if (event.key === 'Enter') {\n handleOk();\n }\n };\n\n return (\n <>\n {stretchedClick && (\n setShowModal(true)} />\n )}\n\n {\n if (stretchedClick) return;\n setShowModal(true);\n }}\n >\n Delete\n \n\n {`Are you sure you want to delete a ${toDelete} ?`}\n }\n open={showModal}\n width={600}\n data-testid={testId}\n onOk={handleOk}\n onCancel={onClose}\n >\n \n \n
\n
\n \n \n
\n
\n
\n
\n {`You’re going to delete a ${toDelete}`}\n
\n
\n
\n {`Deleting the ${toDelete} will remove all data\n stored there.`}\n
\n
\n Caution! This action is irreversible and all\n data will be lost.\n
\n
\n
\n \n \n \n You will delete:\n \n
\n \n \n \n \n \n \n {service\n ? service.getFQDN()\n : datastore?.getName()}\n \n
\n {!service && (\n <>\n \n \n {datastore?.getUUID()}\n \n \n
\n \n )}\n \n {service ? (\n \n {`${datastore?.getDbVendorName()} ${datastore?.getDbVendorVersion()}`}\n {` `}| {service?.getRoleName()}{' '}\n ({service?.getPermission()})\n \n ) : (\n \n {`${datastore?.getDbVendorName()} ${datastore?.getDbVendorVersion()}`}\n {` `}|{' '}\n {datastore?.getClusterTypeName()}{' '}\n ({datastore?.clusterType})\n \n )}\n \n \n
\n
\n \n \n

{`Type \"${confirmPhrase}\" into the field to confirm`}

\n \n \n \n \n \n \n
\n \n \n );\n}\n","export type AdditionalFieldsClassProps = {\n new_user: string;\n};\n\nexport default class AdditionalFields {\n public readonly newUser: boolean;\n\n constructor(props: AdditionalFieldsClassProps) {\n if (props) {\n this.newUser = props.new_user ? JSON.parse(props.new_user) : false;\n } else {\n this.newUser = false;\n }\n }\n}\n","export type TermsAcceptedClassProps = {\n TermsAndConditionsV1: boolean;\n PrivacyPolicyV1: boolean;\n};\n\nexport default class TermsAccepted {\n public readonly TermsAndConditionsV1: boolean;\n public readonly PrivacyPolicyV1: boolean;\n\n constructor(props: TermsAcceptedClassProps) {\n this.TermsAndConditionsV1 = props.TermsAndConditionsV1;\n this.PrivacyPolicyV1 = props.PrivacyPolicyV1;\n }\n}\n","const ADMIN = 'admin';\nconst ORGANIZATION = 'org';\nexport type UserScopeProps = {\n id: string;\n type: string;\n role: string;\n name: string;\n};\n\nexport type UserScopeInterface = {\n id: string;\n type: string;\n role: string;\n name: string;\n};\n\nexport default class UserScope {\n readonly id: string;\n readonly type: string;\n readonly role: string;\n readonly name: string;\n\n constructor(props: UserScopeProps) {\n this.id = props.id;\n this.type = props.type;\n this.role = props.role;\n this.name = props.name;\n }\n\n isOrganization(): boolean {\n return this.role === ORGANIZATION;\n }\n}\n","import { get } from 'http';\nimport AdditionalFields, {\n AdditionalFieldsClassProps,\n} from './AdditionalFields';\nimport FriendlyDateTime from './FriendlyDateTime';\nimport TermsAccepted, { TermsAcceptedClassProps } from './TermsAccepted';\nimport UserScope from './UesrScope';\nimport { getLocalStorage } from '../core/helpers';\n\nexport type UserClassProps = {\n accountId: string;\n id: string;\n login: string;\n isAdmin?: boolean;\n firstName: string;\n first_name: string;\n lastName: string;\n last_name: string;\n status: number;\n verifiedLevel: number;\n maxDataStores: number;\n emailConfirmed: boolean;\n pendingRemoval: boolean;\n allowNewsletters: boolean;\n termsAccepted: TermsAccepted;\n disabledText: string;\n additionalFields: AdditionalFieldsClassProps;\n created_at: string;\n scopes: UserScope[];\n};\n\nexport default class User {\n public readonly accountId: string;\n public readonly id: string;\n public readonly login: string;\n public readonly isAdmin?: boolean;\n public readonly firstName: string;\n public readonly lastName: string;\n public readonly status: number;\n public readonly verifiedLevel: number;\n public readonly maxDataStores: number;\n public readonly emailConfirmed: boolean;\n public readonly pendingRemoval: boolean;\n public readonly allowNewsletters: boolean;\n public readonly termsAccepted?: TermsAcceptedClassProps;\n public readonly disabledText: string;\n public readonly additionalFields: AdditionalFields;\n public readonly createdAt: string;\n public readonly createdAtFull: string;\n public readonly scopes: UserScope[];\n\n constructor(props: UserClassProps) {\n // @Todo: user the real account id (this is not currently available in auth service\n this.accountId = '1';\n this.id = props.id;\n this.login = props.login;\n this.isAdmin = props.isAdmin;\n this.firstName = props.firstName || props.first_name;\n this.lastName = props.lastName || props.last_name;\n this.status = props.status;\n this.verifiedLevel = props.verifiedLevel ? 1 : 0;\n this.maxDataStores = props.maxDataStores || 0;\n this.emailConfirmed = props.emailConfirmed;\n this.pendingRemoval = props.pendingRemoval;\n this.allowNewsletters = props.allowNewsletters;\n this.termsAccepted = props.termsAccepted\n ? new TermsAccepted(props.termsAccepted)\n : undefined;\n this.disabledText =\n props.disabledText ||\n 'Please contact sales to increase your account limits.';\n this.additionalFields = new AdditionalFields(props.additionalFields);\n this.createdAt = new FriendlyDateTime({\n date: props.created_at,\n }).getFriendlyDate();\n this.createdAtFull = new FriendlyDateTime({\n date: props.created_at,\n }).getFullDate();\n this.scopes = props.scopes.map((scope: UserScope) => {\n return new UserScope(scope);\n });\n }\n\n isNewUser(): boolean {\n return this.additionalFields.newUser;\n }\n\n getOrganizationId(): string {\n return (\n this.scopes.find((scope: UserScope) => {\n scope.id === this.getUserId() && scope.isOrganization();\n })?.role || this.getUserId()\n );\n }\n\n getUserId(): string {\n return this.id;\n }\n\n getDefaultScope(): any {\n const defaultScope = {\n id: this.scopes[0].id,\n type: this.scopes[0].type,\n role: this.scopes[0].role,\n };\n const localStorageOrg = getLocalStorage('org');\n if (localStorageOrg) {\n const isScopeExist = this.scopes.find(\n (scope: UserScope) => scope.id === localStorageOrg.id\n );\n if (isScopeExist) {\n return localStorageOrg;\n } else {\n return defaultScope;\n }\n } else {\n return defaultScope;\n }\n }\n\n getUserScope(): any {\n const currentScope = this.scopes.find(\n (scope: UserScope) => this.getUserId() === scope.id\n );\n return currentScope\n ? { id: currentScope.id, type: currentScope.type }\n : undefined;\n }\n\n organizationsOptions() {\n return this.scopes.map((scope: UserScope) => {\n return {\n label: scope.id === this.getUserId() ? 'default' : scope.name,\n value: scope.id,\n type: scope.type,\n role: scope.role,\n };\n });\n }\n}\n","import { API_AUTH } from '../core/CcxEnv';\nimport User from '../types/User';\nimport AuthService from './AuthService';\n\nconst AUTH_SERVICE_URL = API_AUTH;\n\nexport default class UsersService extends AuthService {\n protected static addr(): string {\n return AUTH_SERVICE_URL || '';\n }\n\n public static async check(): Promise {\n return new User(await this.request('check'));\n }\n\n public static async logout() {\n await this.request('logout');\n }\n}\n","import ApiService from './ApiService';\nimport { API_PROFILES } from '../core/CcxEnv';\nimport User from '../types/User';\n\n// constants\nconst API_URL = API_PROFILES;\n\nexport default class ProfileService extends ApiService {\n /**\n * update profile\n * @param {string} new_user\n */\n\n static async updateProfile(new_user: string): Promise {\n const requestData = {\n data: {\n additional_fields: {\n new_user,\n },\n },\n };\n const res = await this.request('PUT', `user-data`, requestData);\n return new User(res.user);\n }\n\n protected static getApiUrl() {\n return API_URL;\n }\n}\n","import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';\nimport UsersService from '../services/UsersService';\nimport User from '../types/User';\nimport ProfileService from '../services/ProfileService';\nimport Subscription from '../types/Subscription';\nimport BillingService from '../services/BillingService';\nimport BillingUserData from '../types/BillingUserData';\nimport BillingAddress from '../types/BillingAddress';\nimport { getLocalStorage, setLocalStorage } from '../core/helpers';\n\ninterface UserType {\n user: User | undefined;\n billingUserData: BillingUserData | undefined;\n billingAddress: BillingAddress | undefined;\n subscription: Subscription | undefined;\n isLoading: boolean;\n isSuccess: boolean;\n isError: boolean;\n}\nconst initialState = {\n user: undefined,\n billingUserData: undefined,\n billingAddress: undefined,\n subscription: undefined,\n isError: false,\n isSuccess: false,\n isLoading: false,\n} as UserType;\n\nexport const userCheck = createAsyncThunk('user/check', async () => {\n const userScope = await UsersService.check();\n setLocalStorage('org', userScope.getDefaultScope());\n return userScope;\n});\n\nexport const updateProfile = createAsyncThunk('profile/update', async () => {\n const response = await ProfileService.updateProfile('false');\n return response;\n});\n\nexport const checkUserSubscription = createAsyncThunk(\n 'user/checkSubscription',\n async () => {\n const response = await BillingService.checkUserSubscription();\n return response;\n },\n {\n condition: (_, { getState }: any) => {\n const { user } = getState();\n if (user.subscription) {\n return false;\n }\n return true;\n },\n }\n);\n\nexport const userSlice = createSlice({\n name: 'user',\n initialState,\n reducers: {},\n extraReducers: (builder) => {\n builder\n .addCase(userCheck.pending, (state) => {\n state.isLoading = true;\n })\n .addCase(userCheck.fulfilled, (state, action) => {\n state.isLoading = false;\n state.isSuccess = true;\n state.user = action.payload;\n })\n .addCase(userCheck.rejected, (state, _action) => {\n state.isLoading = false;\n state.isError = true;\n })\n .addCase(updateProfile.pending, (state) => {\n state.isLoading = true;\n })\n .addCase(updateProfile.fulfilled, (state, action) => {\n state.isLoading = false;\n state.isSuccess = true;\n state.user = action.payload;\n })\n .addCase(updateProfile.rejected, (state, _action) => {\n state.isLoading = false;\n state.isError = true;\n })\n .addCase(checkUserSubscription.pending, (state) => {\n state.isLoading = true;\n })\n .addCase(checkUserSubscription.fulfilled, (state, action) => {\n state.isLoading = false;\n state.subscription = action.payload;\n state.billingAddress =\n action?.payload?.billingUser?.addressData;\n state.billingUserData = action?.payload?.billingUser?.userData;\n });\n },\n});\n\nexport default userSlice.reducer;\n","export type CmonDataStoreStatus = {\n cluster_status: string;\n cluster_status_text: string;\n};\n\nexport interface DataStoreStatusInterface {\n cmonStatus: string;\n status: string;\n statusText: string;\n}\n\nexport const DATA_STORE_STATUS_DEGRADED = 'DEGRADED';\nexport const DATA_STORE_STATUS_UNREACHABLE = 'UNREACHABLE';\nexport const DATA_STORE_STATUS_MGMD_NO_CONTACT = 'MGMD_NO_CONTACT';\nexport const DATA_STORE_STATUS_UNKNOWN = 'UNKNOWN';\nexport const DATA_STORE_STATUS_NOT_STARTED = 'NOT_STARTED';\nexport const DATA_STORE_STATUS_MAINTENANCE = 'MAINTENANCE';\nexport const DATA_STORE_STATUS_STARTED = 'STARTED';\nexport const DATA_STORE_STATUS_CREATED = 'CREATED';\nexport const DATA_STORE_STATUS_DEPLOY_FAILED = 'DEPLOY_FAILED';\nexport const DATA_STORE_STATUS_FAILURE = 'FAILURE';\nexport const DATA_STORE_STATUS_SETUP_FAILED = 'SETUP_FAILED';\nexport const DATA_STORE_STATUS_PENDING = 'PENDING';\nexport const DATA_STORE_STATUS_DELETING = 'DELETING';\nexport const DATA_STORE_STATUS_DELETED = 'DELETED';\nexport const DATA_STORE_STATUS_SHUTTING_DOWN = 'SHUTTING_DOWN';\nexport const DATA_STORE_STATUS_RECOVERING = 'RECOVERING';\nexport const DATA_STORE_STATUS_STOPPED = 'STOPPED';\nexport const DATA_STORE_STATUS_STARTING = 'STARTING';\nexport const DATA_STORE_STATUS_CREATING_CLUSTER_INFRA =\n 'CREATING_CLUSTER_INFRA';\nexport const DATA_STORE_STATUS_CREATING_CLUSTER = 'CREATING_CLUSTER';\nexport const DATA_STORE_STATUS_CREATING_CLUSTER_LB = 'CREATING_CLUSTER_LB';\nexport const DATA_STORE_STATUS_CREATING_CLUSTER_FINAL =\n 'CREATING_CLUSTER_FINAL';\nexport const DATA_STORE_STATUS_RESTORING_BACKUP = 'RESTORING_BACKUP';\n\nexport default class DataStoreStatus implements DataStoreStatusInterface {\n readonly cmonStatus: string;\n readonly status: string;\n readonly statusText: string;\n\n constructor(props: CmonDataStoreStatus) {\n this.cmonStatus = props.cluster_status;\n this.status = this.getStatus(props.cluster_status);\n this.statusText = props.cluster_status_text;\n }\n\n isStatusOk(): boolean {\n return (\n this.cmonStatus === DATA_STORE_STATUS_STARTED ||\n this.cmonStatus === DATA_STORE_STATUS_CREATED\n );\n }\n\n isStatusWarning(): boolean {\n return (\n this.cmonStatus === DATA_STORE_STATUS_DEGRADED ||\n this.cmonStatus === DATA_STORE_STATUS_UNREACHABLE ||\n this.cmonStatus === DATA_STORE_STATUS_MGMD_NO_CONTACT ||\n this.cmonStatus === DATA_STORE_STATUS_UNKNOWN ||\n this.cmonStatus === DATA_STORE_STATUS_NOT_STARTED ||\n this.cmonStatus === DATA_STORE_STATUS_MAINTENANCE\n );\n }\n\n isStatusError(): boolean {\n return (\n this.cmonStatus === DATA_STORE_STATUS_DEPLOY_FAILED ||\n this.cmonStatus === DATA_STORE_STATUS_FAILURE ||\n this.cmonStatus === DATA_STORE_STATUS_SETUP_FAILED\n );\n }\n\n isDeploying(): boolean {\n return (\n this.cmonStatus === DATA_STORE_STATUS_CREATING_CLUSTER ||\n this.cmonStatus === DATA_STORE_STATUS_PENDING ||\n this.cmonStatus === DATA_STORE_STATUS_CREATING_CLUSTER_INFRA ||\n this.cmonStatus === DATA_STORE_STATUS_CREATING_CLUSTER_LB ||\n this.cmonStatus === DATA_STORE_STATUS_CREATING_CLUSTER_FINAL ||\n this.cmonStatus === DATA_STORE_STATUS_RESTORING_BACKUP\n );\n }\n\n isDeploymentFailed(): boolean {\n return this.cmonStatus === DATA_STORE_STATUS_DEPLOY_FAILED;\n }\n\n isDeleting(): boolean {\n return this.cmonStatus === DATA_STORE_STATUS_DELETING;\n }\n\n isUnreachable(): boolean {\n return this.cmonStatus === DATA_STORE_STATUS_UNREACHABLE;\n }\n\n isUnderMaintenance(): boolean {\n return this.cmonStatus === DATA_STORE_STATUS_MAINTENANCE;\n }\n\n isStatusStartedOrDegraded(): boolean {\n return (\n this.cmonStatus === DATA_STORE_STATUS_STARTED ||\n this.cmonStatus === DATA_STORE_STATUS_DEGRADED\n );\n }\n\n private getStatus(status: string) {\n switch (status) {\n // CCX Statuses:\n case DATA_STORE_STATUS_CREATED:\n return 'Created';\n case DATA_STORE_STATUS_CREATING_CLUSTER:\n return 'Creating';\n case DATA_STORE_STATUS_DELETED:\n return 'Deleted';\n case DATA_STORE_STATUS_DELETING:\n return 'Deleting';\n case DATA_STORE_STATUS_DEPLOY_FAILED:\n return 'Failed';\n case DATA_STORE_STATUS_SETUP_FAILED:\n return 'Failed';\n case DATA_STORE_STATUS_MAINTENANCE:\n return 'Maintenance';\n case DATA_STORE_STATUS_UNREACHABLE:\n return 'Unreachable';\n case DATA_STORE_STATUS_PENDING:\n return 'Pending';\n case DATA_STORE_STATUS_CREATING_CLUSTER_INFRA:\n return 'Creating cluster infrastructure';\n case DATA_STORE_STATUS_CREATING_CLUSTER_LB:\n return 'Deploying load balancers';\n case DATA_STORE_STATUS_CREATING_CLUSTER_FINAL:\n return 'Finalizing deployment';\n case DATA_STORE_STATUS_RESTORING_BACKUP:\n return 'Restoring backup';\n\n // CMON Statuses:\n case DATA_STORE_STATUS_MGMD_NO_CONTACT:\n return 'Warning';\n case DATA_STORE_STATUS_STARTED:\n return 'Started';\n case DATA_STORE_STATUS_NOT_STARTED:\n return 'Not running';\n case DATA_STORE_STATUS_DEGRADED:\n return 'Warning';\n case DATA_STORE_STATUS_FAILURE:\n return 'Failure';\n case DATA_STORE_STATUS_SHUTTING_DOWN:\n return 'Shutting down';\n case DATA_STORE_STATUS_RECOVERING:\n return 'Recovering';\n case DATA_STORE_STATUS_STOPPED:\n return 'Stopped';\n case DATA_STORE_STATUS_STARTING:\n return 'Starting';\n case DATA_STORE_STATUS_UNKNOWN:\n default:\n return 'Unknown';\n }\n }\n}\n","export const DB_VENDOR_MARIADB = 'mariadb';\nexport const DB_VENDOR_POSTGRESQL = 'pgsql';\nexport const DB_VENDOR_POSTGRESQL_V2 = 'postgres'; // introduced in provisioning v2\nexport const DB_VENDOR_PERCONA = 'percona';\nexport const DB_VENDOR_REDIS = 'redis';\nexport const DB_VENDOR_MSSQL = 'microsoft';\nexport const DB_VENDOR_UNKNOWN = '';\n\nexport const DB_VENDOR_MARIADB_PRETTY = 'MariaDB';\nexport const DB_VENDOR_POSTGRESQL_PRETTY = 'PostgreSQL';\nexport const DB_VENDOR_PERCONA_PRETTY = 'MySQL';\nexport const DB_VENDOR_REDIS_PRETTY = 'Cache22';\nexport const DB_VENDOR_MSSQL_PRETTY = 'SQL Server';\n\nconst MARIADB_ICON = 'vendor/mariadb';\nconst PERCONA_ICON = 'vendor/mysql';\nconst POSTGRESQL_ICON = 'vendor/postgresql';\nconst REDIS_ICON = 'vendor/cache22';\nconst MSSQL_ICON = 'vendor/mssql';\nconst UNKNOWN_ICON = '';\n\nexport const CLUSTER_TYPE_EPHEMERAL = 'Ephemeral';\n\nexport enum DatabaseType {\n MYSQL = 'mysql',\n POSTGRES = 'postgres',\n MSSQL = 'mssql',\n REDIS = 'redis',\n UNKNOWN = '',\n}\n\nexport type DbVendorClassProps = {\n database_vendor: string;\n database_version: string;\n database_endpoint: string;\n};\n\nexport interface DbVendorInterface {\n dbVendor: string;\n dbVersion: string;\n dbEndpoint: string;\n dbVendorLogo: string;\n}\n\nexport default class DbVendor implements DbVendorInterface {\n readonly dbVendor: string;\n readonly dbVersion: string;\n readonly dbEndpoint: string;\n readonly dbVendorLogo: string;\n\n constructor(props: DbVendorClassProps) {\n switch (props.database_vendor) {\n case DB_VENDOR_MARIADB:\n this.dbVendor = DB_VENDOR_MARIADB;\n this.dbVendorLogo = MARIADB_ICON;\n break;\n case DB_VENDOR_POSTGRESQL:\n case DB_VENDOR_POSTGRESQL_V2:\n this.dbVendor = DB_VENDOR_POSTGRESQL;\n this.dbVendorLogo = POSTGRESQL_ICON;\n break;\n case DB_VENDOR_PERCONA:\n this.dbVendor = DB_VENDOR_PERCONA;\n this.dbVendorLogo = PERCONA_ICON;\n break;\n case DB_VENDOR_REDIS:\n this.dbVendor = DB_VENDOR_REDIS;\n this.dbVendorLogo = REDIS_ICON;\n break;\n case DB_VENDOR_MSSQL:\n this.dbVendor = DB_VENDOR_MSSQL;\n this.dbVendorLogo = MSSQL_ICON;\n break;\n default:\n this.dbVendor = DB_VENDOR_UNKNOWN;\n this.dbVendorLogo = UNKNOWN_ICON;\n }\n\n this.dbVersion = props.database_version;\n this.dbEndpoint = props.database_endpoint;\n }\n\n getIconName(): string {\n if (this.isMariadb()) {\n return MARIADB_ICON;\n } else if (this.isPostgresql()) {\n return POSTGRESQL_ICON;\n } else if (this.isPercona()) {\n return PERCONA_ICON;\n } else if (this.isRedis()) {\n return REDIS_ICON;\n } else if (this.isMSSQL()) {\n return MSSQL_ICON;\n } else {\n return UNKNOWN_ICON;\n }\n }\n\n getDatabaseType(): DatabaseType {\n if (this.isMariadb()) {\n return DatabaseType.MYSQL;\n } else if (this.isPostgresql()) {\n return DatabaseType.POSTGRES;\n } else if (this.isPercona()) {\n return DatabaseType.MYSQL;\n } else if (this.isRedis()) {\n return DatabaseType.REDIS;\n } else if (this.isMSSQL()) {\n return DatabaseType.MSSQL;\n } else {\n return DatabaseType.UNKNOWN;\n }\n }\n\n getVendorName(): string {\n if (this.isMariadb()) {\n return DB_VENDOR_MARIADB_PRETTY;\n } else if (this.isPostgresql()) {\n return DB_VENDOR_POSTGRESQL_PRETTY;\n } else if (this.isPercona()) {\n return DB_VENDOR_PERCONA_PRETTY;\n } else if (this.isRedis()) {\n return DB_VENDOR_REDIS_PRETTY;\n } else if (this.isMSSQL()) {\n return DB_VENDOR_MSSQL_PRETTY;\n } else {\n return '';\n }\n }\n\n getDbEndpoint(): string {\n return this.dbEndpoint;\n }\n\n isPostgresql(): boolean {\n return (\n this.dbVendor === DB_VENDOR_POSTGRESQL ||\n this.dbVendor === DB_VENDOR_POSTGRESQL_V2\n );\n }\n\n isMariadb(): boolean {\n return this.dbVendor === DB_VENDOR_MARIADB;\n }\n\n isPercona(): boolean {\n return this.dbVendor === DB_VENDOR_PERCONA;\n }\n\n isRedis(): boolean {\n return this.dbVendor === DB_VENDOR_REDIS;\n }\n\n isMSSQL(): boolean {\n return this.dbVendor === DB_VENDOR_MSSQL;\n }\n}\n","export type DataStoreMaintenanceSettingsClassProps = {\n day_of_week: number;\n end_hour: number;\n start_hour: number;\n};\n\nexport interface DataStoreMaintenanceSettingsInterface {\n getDayOfWeek: Function;\n getEndHour: Function;\n getStartHour: Function;\n}\n\nexport default class DataStoreMaintenanceSettings\n implements DataStoreMaintenanceSettingsInterface\n{\n readonly dayOfWeek: number;\n readonly endHour: number;\n readonly startHour: number;\n\n constructor(props: DataStoreMaintenanceSettingsClassProps) {\n this.dayOfWeek = props.day_of_week;\n this.endHour = props.end_hour;\n this.startHour = props.start_hour;\n }\n\n getDayOfWeek(): number {\n return this.dayOfWeek;\n }\n\n getEndHour(): number {\n return this.endHour;\n }\n\n getStartHour(): number {\n return this.startHour;\n }\n}\n","export type DbAccountClassProps = {\n username: string;\n password: string;\n host: string;\n database: string;\n privileges: string;\n};\n\nexport interface DbAccountInterface {\n getUsername(): string;\n getPassword(): string;\n getHost(): string;\n getDatabase(): string;\n}\n\nexport default class DbAccount implements DbAccountInterface {\n readonly username: string;\n readonly password: string;\n readonly host: string;\n readonly database: string;\n readonly privileges: string;\n\n constructor(props: DbAccountClassProps) {\n this.username = props.username;\n this.password = props.password;\n this.host = props.host;\n this.database = props.database;\n this.privileges = props.privileges;\n }\n\n getUsername(): string {\n return this.username;\n }\n\n getPassword(): string {\n return this.password;\n }\n\n getHost(): string {\n return this.host;\n }\n\n getDatabase(): string {\n return this.database;\n }\n}\n","export type DataStoreEmailNotificationsSettingsClassProps = {\n enabled: boolean;\n emails: string[] | null;\n};\n\nexport interface DataStoreEmailNotificationsSettingsInterface {\n getEmailsList: Function;\n isEmailNotificationEnabled: Function;\n}\n\nexport default class DataStoreEmailNotificationsSettings\n implements DataStoreEmailNotificationsSettingsInterface\n{\n readonly enabled: boolean;\n readonly emails: string[] | null;\n\n constructor(props: DataStoreEmailNotificationsSettingsClassProps) {\n this.enabled = props.enabled;\n this.emails = props.emails;\n }\n\n getEmailsList(): string[] {\n return this.emails || [];\n }\n\n isEmailNotificationEnabled(): boolean {\n return this.enabled;\n }\n}\n","export type AutoScale = {\n enabled: boolean;\n};\n\nexport type DataStoreSpecClassProps = {\n autoscale_storage: AutoScale;\n};\n\nexport default class DataStoreSpec {\n readonly autoscale_storage: AutoScale;\n\n constructor(props: DataStoreSpecClassProps) {\n this.autoscale_storage = props.autoscale_storage;\n }\n}\n","export interface DbParametersProps {\n error: string;\n parameters?: {\n [key: string]: string;\n };\n sync: boolean;\n}\n\ninterface DbParameterSyncInterface {\n status: string;\n parameters: {\n [key: string]: string;\n };\n sync: boolean;\n}\n\nexport class DbParameterSync implements DbParameterSyncInterface {\n readonly status: string;\n readonly parameters: {\n [key: string]: string;\n };\n readonly sync: boolean;\n\n constructor(props: DbParametersProps) {\n this.status = props.error;\n this.parameters = props.parameters || {};\n this.sync = props.sync;\n }\n}\n","import DataStoreStatus, {\n DATA_STORE_STATUS_DEPLOY_FAILED,\n} from './DataStoreStatus';\nimport Db, {\n CLUSTER_TYPE_EPHEMERAL,\n DB_VENDOR_MARIADB,\n DB_VENDOR_MSSQL,\n DB_VENDOR_PERCONA,\n DB_VENDOR_POSTGRESQL_V2,\n DB_VENDOR_REDIS,\n DB_VENDOR_UNKNOWN,\n DatabaseType,\n} from './Db';\nimport FriendlyDateTime from './FriendlyDateTime';\nimport Vpc, { VpcClassProps } from './Vpc';\nimport CloudProvider from './CloudProvider';\nimport DataStoreMaintenanceSettings, {\n DataStoreMaintenanceSettingsClassProps,\n} from './DataStoreMaintenanceSettings';\nimport DbAccount from './DbAccount';\nimport Helpers from '../services/Helpers';\nimport DeploymentOptions from './DeploymentOptions';\nimport DbNode from './DbNode';\nimport Service from './Service';\nimport DataStoreEmailNotificationsSettings from './DataStoreEmailNotifications';\nimport Job, { JobClassProps } from './Job';\nimport DataStoreSpec, { DataStoreSpecClassProps } from './DataStoreSpec';\nimport { DbParametersProps, DbParameterSync } from './DbParameterSync';\n\nexport type DeploymentsItemClassProps = {\n account_id: string;\n azs: string[] | null;\n cloud_provider: string;\n cluster_id: number;\n cluster_name: string;\n cluster_size: number;\n cluster_status: string;\n cluster_status_text: string;\n cluster_type: string;\n cluster_type_name: string;\n created_at: string;\n current_job: JobClassProps;\n database_endpoint: string;\n database_vendor: string;\n database_version: string;\n db_account: any;\n deploy_progress: number;\n disk_size: number;\n effective_disk_size: number;\n disk_type: string;\n high_availability: boolean;\n instance_size: string;\n iops: number | null;\n is_deploying: boolean;\n maintenance_settings: DataStoreMaintenanceSettingsClassProps;\n not_operable_reason: string;\n operable: boolean;\n preferred_region?: string;\n region: CloudRegion;\n seen_at: string | null;\n ssl_enabled: boolean;\n tags: string[];\n updated_at: string;\n uuid: string;\n vpc: VpcClassProps | null;\n notes?: string;\n cloudProviderFullName: string;\n replica_url?: string;\n primary_url?: string;\n can_upgrade_to?: string;\n license?: string;\n notifications: DataStoreEmailNotificationsSettings;\n spec: DataStoreSpecClassProps;\n is_ca_available: boolean;\n parameter_group_id: string;\n parameter_group_sync: DbParametersProps;\n};\n\nexport type CloudRegion = {\n code: string;\n display_code: string;\n name: string;\n country_code: string;\n continent_code: string;\n city: string;\n};\n\nexport interface DeploymentsItemInterface {\n accountId: string;\n availabilityZones?: string[];\n cloudProvider: CloudProvider;\n clusterId: number;\n dataStoreName: string;\n numberOfNodes: number;\n clusterStatus: DataStoreStatus;\n clusterType: string;\n clusterTypeName: string;\n createdAt: string;\n deployProgress: number;\n volumeSize: number;\n volumeType: string;\n highAvailability: boolean;\n volumeIops: number;\n instanceSize: string;\n maintenanceSettings: DataStoreMaintenanceSettings;\n spec: DataStoreSpec;\n notOperableReason: string;\n currentJob: Job;\n operable: boolean;\n cloudRegion: CloudRegion;\n preferredRegion?: string;\n seenAt: string;\n sslEnabled: boolean;\n tags: string[];\n updatedAt: string;\n dataStoreUuid: string;\n db: Db;\n lastSeen: string;\n lastSeenFull: string;\n createdAtFull: string;\n getVpcName: Function;\n getVpcCidr: Function;\n vpc?: Vpc;\n\n isAws: Function;\n isSafespring: Function;\n isCityCloud: Function;\n isGoogle: Function;\n getName: Function;\n getTruncatedName: Function;\n getNumberOfNodes: Function;\n getDataStoreStatus: Function;\n getDataStoreStatusText: Function;\n getVolumeIops: Function;\n getDeploymentProgressText: Function;\n getMaintenanceDayOfWeek: Function;\n getMaintenanceEndHour: Function;\n getMaintenanceStartHour: Function;\n isProxySql: Function;\n isRedis(): boolean;\n getCloudProvider(): CloudProvider;\n getDbAccount(): DbAccount;\n notes?: string;\n cloudProviderFullName: string;\n replica_url?: string;\n primary_url?: string;\n can_upgrade_to?: string;\n license?: string;\n notifications: DataStoreEmailNotificationsSettings;\n getAutoscaleStorage: Function;\n parameterGroupId: string;\n parameterGroupSync: DbParameterSync;\n}\n\nexport default class DeploymentsItem implements DeploymentsItemInterface {\n readonly accountId: string;\n readonly availabilityZones?: string[];\n readonly cloudProvider: CloudProvider;\n readonly clusterId: number;\n readonly dataStoreName: string;\n readonly numberOfNodes: number;\n readonly clusterStatus: DataStoreStatus;\n readonly clusterType: string;\n readonly clusterTypeName: string;\n readonly createdAt: string;\n readonly deployProgress: number;\n readonly volumeSize: number;\n readonly volumeType: string;\n readonly highAvailability: boolean;\n readonly volumeIops: number;\n readonly instanceSize: string;\n readonly maintenanceSettings: DataStoreMaintenanceSettings;\n readonly notOperableReason: string;\n readonly operable: boolean;\n readonly cloudRegion: CloudRegion;\n readonly seenAt: string;\n readonly sslEnabled: boolean;\n readonly currentJob: Job;\n readonly tags: string[];\n readonly updatedAt: string;\n readonly dataStoreUuid: string;\n readonly db: Db;\n readonly dbAccount: DbAccount;\n readonly lastSeen: string;\n readonly lastSeenFull: string;\n readonly createdAtFull: string;\n readonly vpc?: Vpc;\n readonly notes?: string;\n readonly cloudProviderFullName: string;\n readonly preferredRegion?: string;\n readonly replica_url?: string;\n readonly primary_url?: string;\n readonly can_upgrade_to?: string;\n readonly license?: string;\n readonly notifications: DataStoreEmailNotificationsSettings;\n readonly spec: DataStoreSpec;\n readonly isCAAvailable: boolean;\n readonly parameterGroupId: string;\n readonly parameterGroupSync: DbParameterSync;\n\n constructor(\n props: DeploymentsItemClassProps,\n deploymentOptions: DeploymentOptions | undefined\n ) {\n this.accountId = props.account_id;\n this.availabilityZones = props.azs ? props.azs : undefined;\n this.cloudProvider = new CloudProvider({\n code: props.cloud_provider,\n name: deploymentOptions?.getFullName(props.cloud_provider),\n full_name: deploymentOptions?.getFullName(props.cloud_provider),\n regions: [],\n logo: deploymentOptions?.getCloudProviderLogo(props.cloud_provider),\n group: deploymentOptions?.getCloudProviderGroup(\n props.cloud_provider\n ),\n });\n this.dataStoreName = props.cluster_name;\n this.numberOfNodes = props.cluster_size;\n this.clusterStatus = new DataStoreStatus({\n cluster_status: props.cluster_status,\n cluster_status_text: props.cluster_status_text,\n });\n this.clusterType = props.cluster_type;\n this.notes = props.notes ? props.notes : '';\n this.clusterTypeName = props.cluster_type_name;\n this.clusterId = props.cluster_id;\n this.deployProgress = props.deploy_progress;\n this.volumeSize = props.effective_disk_size\n ? props.effective_disk_size\n : props.disk_size;\n this.volumeType = props.disk_type;\n this.highAvailability = props.high_availability;\n this.instanceSize = props.instance_size;\n this.maintenanceSettings = new DataStoreMaintenanceSettings(\n props.maintenance_settings\n );\n this.spec = new DataStoreSpec(props.spec);\n this.notifications = new DataStoreEmailNotificationsSettings(\n props.notifications\n );\n this.currentJob = new Job(props.current_job);\n this.volumeIops = props.iops ? props.iops : 0;\n this.notOperableReason = props.not_operable_reason;\n this.operable = props.operable;\n this.cloudRegion = props.region;\n this.seenAt = props.seen_at || '--';\n this.sslEnabled = props.ssl_enabled;\n this.tags = props.tags;\n this.updatedAt = props.updated_at;\n this.dataStoreUuid = props.uuid;\n this.db = new Db({\n database_vendor: props.database_vendor,\n database_version: props.database_version,\n database_endpoint: props.database_endpoint,\n });\n this.dbAccount = new DbAccount({\n username: props.db_account?.database_username,\n password: props.db_account?.database_password,\n host: props.db_account?.database_host,\n database: props.db_account?.database_database,\n privileges: props.db_account?.database_privileges,\n });\n this.lastSeen = props.seen_at\n ? new FriendlyDateTime({\n date: props.seen_at,\n }).getFriendlyDate()\n : '--';\n this.lastSeenFull = props.seen_at\n ? new FriendlyDateTime({\n date: props.seen_at,\n }).getFullDate()\n : '--';\n this.createdAt = new FriendlyDateTime({\n date: props.created_at,\n }).getFriendlyDate();\n this.createdAtFull = new FriendlyDateTime({\n date: props.created_at,\n }).getFullDate();\n this.vpc = props.vpc ? new Vpc(props.vpc) : undefined;\n this.cloudProviderFullName = deploymentOptions?.getFullName(\n props.cloud_provider\n );\n this.preferredRegion = props.preferred_region;\n this.primary_url = props.primary_url;\n this.replica_url = props.replica_url;\n this.can_upgrade_to = props.can_upgrade_to;\n this.license = props.license;\n this.isCAAvailable = props.is_ca_available;\n this.parameterGroupId = props.parameter_group_id;\n this.parameterGroupSync = new DbParameterSync(\n props.parameter_group_sync\n );\n }\n\n getAutoscaleStorage(): boolean {\n return this.spec.autoscale_storage.enabled;\n }\n\n getDbIconName(): string {\n return this.db.getIconName();\n }\n\n getDbVendorName(): string {\n return this.db.getVendorName();\n }\n\n getDbVendorType(): DatabaseType {\n return this.db.getDatabaseType();\n }\n\n getDbVendorVersion(): string {\n return this.db.dbVersion;\n }\n\n getProviderName(): string {\n return this.cloudProvider.code.toUpperCase();\n }\n\n getCloudProvider(): CloudProvider {\n return this.cloudProvider;\n }\n\n getCloudProviderCode(): string {\n return this.getCloudProvider().code;\n }\n\n getFullCloudProviderName(): string {\n if (this.cloudProvider.getFullName())\n return this.cloudProvider.getFullName();\n return 'Unknown';\n }\n\n getVolumeIops(): number {\n return this.volumeIops;\n }\n\n getInstanceSize(): string {\n return this.instanceSize;\n }\n\n getDbEndpoint(): string {\n return this.db.getDbEndpoint();\n }\n\n isStatusOk(): boolean {\n return this.clusterStatus.isStatusOk();\n }\n\n isStatusWarning(): boolean {\n return this.clusterStatus.isStatusWarning();\n }\n\n isStatusError(): boolean {\n return this.clusterStatus.isStatusError();\n }\n\n isDeploying(): boolean {\n return this.clusterStatus.isDeploying();\n }\n\n isDeleting(): boolean {\n return this.clusterStatus.isDeleting();\n }\n\n isUnreachable(): boolean {\n return this.clusterStatus.isUnreachable();\n }\n\n isUnderMaintenance(): boolean {\n return this.clusterStatus.isUnderMaintenance();\n }\n\n isAccessible(): boolean {\n return !this.isDeploying() && this.clusterStatus.isDeploymentFailed();\n }\n\n isOperable(): boolean {\n if (this.clusterStatus.isDeploymentFailed()) return false;\n if (this.isDeploying()) return false;\n\n return this.operable;\n }\n\n isMariaDb(): boolean {\n return this.db.isMariadb();\n }\n\n isPostgreSql(): boolean {\n return this.db.isPostgresql();\n }\n\n isPercona(): boolean {\n return this.db.isPercona();\n }\n\n isRedis(): boolean {\n return this.db.isRedis();\n }\n\n isMSSQL(): boolean {\n return this.db.isMSSQL();\n }\n\n canScaleNodes(): boolean {\n return this.getClusterType().toLowerCase() !== 'mssql_single';\n }\n\n canChangeVolumeType(): boolean {\n return (\n !this.db.isRedis() &&\n !this.isEphemeral() &&\n this.getClusterType().toLowerCase() !== 'mssql_single'\n );\n }\n\n getServiceName(): string {\n if (this.isMariaDb()) return DatabaseType.MYSQL;\n if (this.isPercona()) return DatabaseType.MYSQL;\n if (this.isPostgreSql()) return DatabaseType.POSTGRES;\n if (this.isRedis()) return DatabaseType.REDIS;\n if (this.isMSSQL()) return DatabaseType.MSSQL;\n return DatabaseType.UNKNOWN;\n }\n\n getDeploymentSizeDescription(): string {\n return this.numberOfNodes === 1 ? 'Development' : 'Production';\n }\n\n getVpcName(): string {\n return this.vpc?.getName() || '---';\n }\n\n getVpcCidr(): string {\n return this.vpc?.getCidrIpv4Block() || '---';\n }\n\n isAws(): boolean {\n return this.cloudProvider.isAws();\n }\n\n isVMWare(): boolean {\n return this.cloudProvider.isVMWare();\n }\n\n isKubevirt(): boolean {\n return this.cloudProvider.isKubevirt();\n }\n\n isVultr(): boolean {\n return this.cloudProvider.isVultr();\n }\n\n isLintasarta(): boolean {\n return this.cloudProvider.isLintasarta();\n }\n\n isElastx(): boolean {\n return this.cloudProvider.isElastx();\n }\n\n isSyseleven(): boolean {\n return this.cloudProvider.isSyseleven();\n }\n\n isOpenStack(): boolean {\n return (\n this.isLintasarta() ||\n this.isSafespring() ||\n this.isElastx() ||\n this.isSyseleven()\n );\n }\n\n isSafespring(): boolean {\n return this.cloudProvider.isSafespring();\n }\n\n isCityCloud(): boolean {\n return this.cloudProvider.isCityCloud();\n }\n\n isGoogle(): boolean {\n return this.cloudProvider.isGoogle();\n }\n\n getName(): string {\n return this.dataStoreName;\n }\n\n getTruncatedName(): string {\n return this.getName().length > 20\n ? `${this.getName().substring(0, 20)}...`\n : this.getName();\n }\n\n getUUID(): string {\n return this.dataStoreUuid;\n }\n\n getNumberOfNodes(): number {\n return this.numberOfNodes;\n }\n\n getDataStoreStatus(): string {\n if (this.isStatusOk()) return 'Available';\n if (this.isDeleting()) return 'Deleting';\n if (this.isDeploying()) return 'Deploying';\n if (this.isStatusError()) return 'Failed';\n return Helpers.capitalizeFirstLetter(this.clusterStatus.status);\n }\n\n getDataStoreStatusText(): string {\n return this.isDeploying()\n ? `${this.clusterStatus.statusText} (${this.deployProgress}% completed)`\n : this.clusterStatus.statusText;\n }\n\n getDeploymentProgressText(): string {\n return `${this.deployProgress}%`;\n }\n\n getMaintenanceDayOfWeek(): number {\n return this.maintenanceSettings.getDayOfWeek();\n }\n\n getMaintenanceEndHour(): number {\n return this.maintenanceSettings.getEndHour();\n }\n\n getNotificationsEmailList(): string[] {\n return this.notifications.getEmailsList();\n }\n\n getMaintenanceStartHour(): number {\n return this.maintenanceSettings.getStartHour();\n }\n\n isProxySql(): boolean {\n return this.isMariaDb() || this.isPercona();\n }\n\n getDbAccount(): DbAccount {\n return this.dbAccount;\n }\n\n isSingleAZ(): boolean {\n return new Set(this.availabilityZones).size <= 1;\n }\n\n getClusterTypeName(): string {\n if (this.clusterTypeName.includes('Master')) {\n return this.clusterTypeName.replace('Master', 'Primary');\n } else {\n return this.clusterTypeName;\n }\n }\n\n getNotes(): string | undefined {\n return this.notes;\n }\n\n getClusterType(): string {\n return this.clusterType;\n }\n\n getPrimaryUrl(): string | undefined {\n return this.primary_url;\n }\n\n getReplicaUrl(): string | undefined {\n return this.replica_url;\n }\n\n getVolumeType(): string {\n if (this.volumeType === '') {\n return CLUSTER_TYPE_EPHEMERAL;\n }\n return this.volumeType;\n }\n\n isEphemeral(): boolean {\n return this.volumeType === '';\n }\n\n getVolumeSize(deployOptions: DeploymentOptions | undefined): number {\n const cloudProvider = this.getCloudProviderCode();\n const instanceSizes =\n deployOptions?.instance.instanceSizes[cloudProvider];\n\n if (this.volumeType === '' && this.volumeSize === 0) {\n const matchOption = instanceSizes.find(\n (option: any) => option.type === this.instanceSize\n );\n if (matchOption) return matchOption.diskSize;\n }\n return this.volumeSize;\n }\n\n getPrimaryReplicaUrl(node: DbNode | Service): any[] {\n const urlArr = [];\n\n if (\n node?.role === 'slave' ||\n node?.role === 'SECONDARY' ||\n node?.role === 'replica'\n ) {\n urlArr.push(this.replica_url);\n } else {\n urlArr.push(this.primary_url);\n }\n\n return urlArr;\n }\n\n getScalingSizes(): number[] {\n switch (this.clusterType.toLowerCase()) {\n case 'galera':\n case 'redis':\n return [1, 3, 5];\n case 'mssql_single':\n return [];\n case 'mssql_ao_async':\n switch (this.license) {\n case 'standard':\n return [1, 2];\n case 'enterprise':\n return [1, 2, 3, 4, 5];\n default:\n return [];\n }\n }\n\n return [1, 2, 3, 4, 5];\n }\n\n getNewNodesKind(): string {\n switch (this.clusterType.toLowerCase()) {\n case 'galera':\n case 'redis':\n return 'primary';\n case 'mssql_single':\n case 'mssql_ao_async':\n return '';\n }\n\n return 'replica';\n }\n\n hasStorage(): boolean {\n if (this.clusterType.toLowerCase() === 'redis') return false;\n\n return !!this.getVolumeType();\n }\n getDatastoreCreationData(backupId: string, azs: string[]) {\n return {\n clusterName: `${this.dataStoreName}_Copy`,\n numberOfNodes: this.numberOfNodes,\n databaseVendor: this.getDatabaseVendor().toLowerCase(),\n databaseVendorType: this.clusterType.toLowerCase(),\n version: this.db.dbVersion,\n tags: this.tags,\n cloudProvider: this.cloudProvider.code,\n cloudRegion: this.cloudRegion.code,\n instanceSize: this.instanceSize,\n volumeType: this.volumeType,\n volumeSize: this.volumeSize,\n volumeIops: this.volumeType === 'io1' ? this.volumeIops : undefined,\n networkType: this.vpc ? 'private' : 'public',\n haEnabled: this.highAvailability,\n vpcUuid: this.vpc ? this.vpc.id : undefined,\n availabilityZones: azs,\n dataStoreUuid: this.dataStoreUuid,\n notifications: this.notifications,\n backupId,\n };\n }\n getDatabaseVendor(): string {\n if (this.isMariaDb()) return DB_VENDOR_MARIADB;\n if (this.isPercona()) return DB_VENDOR_PERCONA;\n if (this.isPostgreSql()) return DB_VENDOR_POSTGRESQL_V2;\n if (this.isRedis()) return DB_VENDOR_REDIS;\n if (this.isMSSQL()) return DB_VENDOR_MSSQL;\n return DB_VENDOR_UNKNOWN;\n }\n\n getDatabaseVersion(): string {\n return this.db.dbVersion;\n }\n\n getCurrentJobs(): Job[] {\n return [this.currentJob];\n }\n\n getParameterGroupId(): string {\n return this.parameterGroupId;\n }\n\n isDbParameterGroupSyncd(): boolean {\n return this.parameterGroupSync.sync;\n }\n\n dbParameterGroupStatus(): string {\n return !this.parameterGroupSync.status\n ? 'Synced'\n : this.parameterGroupSync.status.includes('job failed')\n ? 'Sync Failed'\n : 'Not Synced';\n }\n}\n","import { OptionsInterface } from '../components/projects/DatastoreFilterPopover';\nimport DeploymentOptions from './DeploymentOptions';\nimport DeploymentsItem, { DeploymentsItemClassProps } from './DeploymentsItem';\nimport Job from './Job';\n\nexport interface DeploymentsInterface {\n deployments: DeploymentsItem[];\n}\n\nexport default class Deployments implements DeploymentsInterface {\n readonly deployments: DeploymentsItem[];\n\n constructor(\n clusters: DeploymentsItemClassProps[],\n deploymentOptions: DeploymentOptions | undefined\n ) {\n this.deployments = clusters.map(\n (r: any) => new DeploymentsItem(r, deploymentOptions)\n );\n }\n\n isAnyCritical() {\n return this.getAllCritical().length > 0;\n }\n\n isAnyWarning() {\n return this.getAllWarning().length > 0;\n }\n\n areAllGood() {\n return this.getAllGood().length === this.deployments.length;\n }\n\n map(f: any) {\n return this.deployments.map(f);\n }\n\n filter(f: any) {\n return this.deployments.filter(f);\n }\n\n length() {\n return this.deployments.length;\n }\n\n notDeletingLength() {\n return this.getNotDeleting().length;\n }\n\n getByUuid(dataStoreUuid: string) {\n const filtered = this.deployments.filter((d: any) => {\n return d.dataStoreUuid === dataStoreUuid;\n });\n if (filtered && filtered.length > 0) {\n return filtered[0];\n }\n return null;\n }\n\n protected getAllCritical() {\n return this.deployments.filter((d: DeploymentsItem) => {\n return d.isStatusError();\n });\n }\n\n protected getAllWarning() {\n return this.deployments.filter((d: DeploymentsItem) => {\n return d.isStatusWarning();\n });\n }\n\n protected getAllGood() {\n return this.deployments.filter((d: DeploymentsItem) => {\n return d.isStatusOk() || d.isDeleting();\n });\n }\n\n protected getNotDeleting() {\n return this.deployments.filter((d: DeploymentsItem) => {\n return (\n d.isStatusOk() ||\n d.isStatusError() ||\n d.isStatusWarning() ||\n d.isDeploying()\n );\n });\n }\n\n public getVendorsForFiltering() {\n return [\n {\n label: 'SQL Server',\n value: 'microsoft',\n },\n {\n label: 'MySQL',\n value: 'percona',\n },\n {\n label: 'PostgreSQL',\n value: 'postgres',\n },\n {\n label: 'Redis',\n value: 'redis',\n },\n {\n label: 'MariaDB',\n value: 'mariadb',\n },\n ] as OptionsInterface[];\n }\n\n public getTagsForFiltering() {\n return Array.from(\n new Set(\n this.deployments.map((deployment) => deployment.tags).flat()\n )\n ).map((tag) => ({ label: tag, value: tag }));\n }\n\n public getActiveJobs(): any[] {\n const activeJobs: Job[] = [];\n this.deployments.filter((deployment) => {\n if (deployment.currentJob.isStatusRunning()) {\n activeJobs.push(deployment.currentJob);\n }\n });\n return activeJobs;\n }\n}\n","import ApiService from './ApiService';\nimport Deployments from '../types/Deployments';\nimport { API_DEPLOYMENT_V3 } from '../core/CcxEnv';\nimport DeploymentOptions from '../types/DeploymentOptions';\n\n// constants\nconst API_URL = API_DEPLOYMENT_V3;\n\nexport default class DataStoresService extends ApiService {\n /**\n * Get list of Data Stores.\n */\n static async getDataStores(\n projectUuid?: string,\n deploymentOptions?: DeploymentOptions,\n paramString?: string\n ): Promise {\n // @TODO: Use the projectUuid when the backend is ready\n // const response = await this.request('GET', `deployments/${projectUuid}`);\n const response = await this.request(\n 'GET',\n `data-stores?${paramString}`\n );\n\n return {\n datastores: new Deployments(response.datastores, deploymentOptions),\n totalItems: response.total,\n };\n }\n\n protected static getApiUrl() {\n return API_URL;\n }\n}\n","import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';\nimport Deployments from '../types/Deployments';\nimport DataStoreService from '../services/DataStoresService';\nimport { isUserDisconnected, objectToQueryParams } from '../core/helpers';\n\ninterface DatastoreType {\n datastores: Deployments | undefined;\n page: number;\n per_page: number;\n tags: string[];\n db_vendors: string[];\n totalItems: number;\n isLoading: boolean;\n isSuccess: boolean;\n isError: boolean;\n}\nconst initialState = {\n datastores: undefined,\n page: 1,\n per_page: 10,\n tags: [],\n db_vendors: [],\n totalItems: 1,\n isError: false,\n isSuccess: false,\n isLoading: false,\n} as DatastoreType;\n\nexport type GetAllDataStoresParams =\n | undefined\n | {\n page: number;\n per_page: number;\n tags: string[];\n db_vendors: string[];\n };\n\nexport const getAllDataStores = createAsyncThunk(\n 'datastores/getDatastores',\n async (params: GetAllDataStoresParams, { getState }: any) => {\n if (isUserDisconnected()) {\n const { datastores } = getState();\n if (datastores) return datastores;\n }\n try {\n const { datastores } = getState();\n if (!params) {\n params = {\n page: datastores.page,\n per_page: datastores.per_page,\n tags: datastores.tags,\n db_vendors: datastores.db_vendors,\n };\n }\n const paramString: string = params\n ? objectToQueryParams(params)\n : '';\n const { deploymentOptions } = getState()?.deploymentOptions;\n const response = await DataStoreService.getDataStores(\n 'default',\n deploymentOptions,\n paramString\n );\n return { ...response, ...params };\n } catch (e) {\n console.error(e);\n }\n }\n);\n\nexport const datastoresSlice = createSlice({\n name: 'datastores',\n initialState,\n reducers: {\n getAllDataStores: (state, action) => {\n state.isLoading = false;\n state.datastores = action.payload?.datastores;\n state.totalItems = action.payload?.totalItems;\n state.isSuccess = true;\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getAllDataStores.pending, (state) => {\n state.isLoading = true;\n })\n .addCase(getAllDataStores.fulfilled, (state, action) => {\n state.isLoading = false;\n state.isSuccess = true;\n state.datastores = action.payload?.datastores;\n state.totalItems = action.payload?.totalItems;\n state.page = action.payload?.page;\n state.per_page = action.payload?.per_page;\n state.tags = action.payload?.tags;\n state.db_vendors = action.payload?.db_vendors;\n })\n .addCase(getAllDataStores.rejected, (state, action) => {\n state.isLoading = false;\n state.isError = true;\n });\n },\n});\n\nexport default datastoresSlice.reducer;\n","export const CAN_ADD_VPC = 'canAddVpc';\nexport const CAN_INVITES = 'canInvites';\nexport const CAN_SEE_INVITES = 'canSeeInvites';\nexport const CAN_ADD_MEMBERS = 'canAddMembers';\nexport const CAN_ADD_FIREWALL = 'canAddFirewall';\nexport const CAN_ADD_DATABASE = 'canAddDatabase';\nexport const CAN_ADD_DATASTORE = 'canAddDatastore';\nexport const CAN_ADD_DB_PARAMS = 'canCreateDbParams';\nexport const CAN_ADD_DATABASE_USER = 'canAddDatabaseUser';\nexport const CAN_RESTORE_DATASTORE = 'canRestoreDatastore';\n\nexport const CAN_MODIFY_VPC = 'canModifyVpc';\nexport const CAN_MODIFY_DB_PARAMS = 'canModifyDbParams';\nexport const CAN_MODIFY_DATASTORE = 'canModifyDatastore';\nexport const CAN_MODIFY_ORG_MEMBERS = 'canModifyOrgMembers';\nexport const CAN_MODIFY_ORGANIZATION = 'canModifyOrganization';\nexport const CAN_MODIFY_DATABASE_USERS = 'canModifyDatabaseUsers';\nexport const CAN_MODIFY_BACKUP_SETTINGS = 'canModifyBackupSettings';\nexport const CAN_MODIFY_BACKUP_SCHEDULE = 'canModifyBackupSchedule';\nexport const CAN_MODIFY_DATASTORE_SETTINGS = 'canModifyDatastoreSettings';\n\nexport const CAN_DELETE_VPC = 'canDeleteVPC';\nexport const CAN_DELETE_MEMBER = 'canDeleteMember';\nexport const CAN_DELETE_INVITES = 'canDeleteInvites';\nexport const CAN_DELETE_DATABASE = 'canDeleteDatabase';\nexport const CAN_DELETE_DB_PARAMS = 'canDeleteDbParams';\nexport const CAN_DELETE_DATASTORE = 'canDeleteDatastore';\nexport const CAN_DELETE_ORGANIZATION = 'canDeleteOrganization';\nexport const CAN_DELETE_DATABASE_USER = 'canDeleteDatabaseUser';\nexport const CAN_DELETE_FIREWALL = 'canDeleteFirewall';\n\nexport type Permission =\n | typeof CAN_ADD_DATASTORE\n | typeof CAN_ADD_VPC\n | typeof CAN_ADD_MEMBERS\n | typeof CAN_ADD_DATABASE\n | typeof CAN_ADD_DATABASE_USER\n | typeof CAN_MODIFY_DATASTORE\n | typeof CAN_MODIFY_DB_PARAMS\n | typeof CAN_MODIFY_VPC\n | typeof CAN_MODIFY_DATASTORE\n | typeof CAN_INVITES\n | typeof CAN_SEE_INVITES\n | typeof CAN_RESTORE_DATASTORE\n | typeof CAN_DELETE_VPC\n | typeof CAN_ADD_DB_PARAMS\n | typeof CAN_MODIFY_ORGANIZATION\n | typeof CAN_MODIFY_ORG_MEMBERS\n | typeof CAN_MODIFY_DATABASE_USERS\n | typeof CAN_DELETE_DB_PARAMS\n | typeof CAN_DELETE_ORGANIZATION\n | typeof CAN_DELETE_DATASTORE\n | typeof CAN_DELETE_MEMBER\n | typeof CAN_DELETE_DATABASE_USER\n | typeof CAN_DELETE_DATABASE\n | typeof CAN_DELETE_INVITES\n | typeof CAN_MODIFY_BACKUP_SETTINGS\n | typeof CAN_MODIFY_DATASTORE_SETTINGS\n | typeof CAN_MODIFY_BACKUP_SCHEDULE\n | typeof CAN_ADD_FIREWALL\n | typeof CAN_DELETE_FIREWALL;\n\nexport type Roles = {\n [K in Permission]?: boolean;\n};\n\nexport interface PermissionRolesInterface {\n read: Roles;\n write: Roles;\n admin: Roles;\n}\n\nexport const PermissionRoles: PermissionRolesInterface = {\n read: {},\n write: {\n [CAN_ADD_DATABASE]: true,\n [CAN_ADD_DATABASE_USER]: true,\n [CAN_ADD_MEMBERS]: true,\n [CAN_DELETE_DATABASE]: true,\n [CAN_DELETE_DATABASE_USER]: true,\n [CAN_MODIFY_VPC]: true,\n [CAN_MODIFY_DATASTORE]: true,\n [CAN_MODIFY_DB_PARAMS]: true,\n [CAN_MODIFY_ORGANIZATION]: true,\n [CAN_MODIFY_DATABASE_USERS]: true,\n [CAN_MODIFY_DATASTORE_SETTINGS]: true,\n },\n admin: {\n [CAN_ADD_VPC]: true,\n [CAN_ADD_MEMBERS]: true,\n [CAN_ADD_DATABASE]: true,\n [CAN_ADD_DATASTORE]: true,\n [CAN_ADD_DATABASE_USER]: true,\n [CAN_DELETE_MEMBER]: true,\n [CAN_DELETE_DATASTORE]: true,\n [CAN_MODIFY_DATASTORE]: true,\n [CAN_MODIFY_DB_PARAMS]: true,\n [CAN_MODIFY_VPC]: true,\n [CAN_DELETE_DATABASE_USER]: true,\n [CAN_DELETE_DATABASE]: true,\n [CAN_DELETE_DB_PARAMS]: true,\n [CAN_DELETE_VPC]: true,\n [CAN_DELETE_ORGANIZATION]: true,\n [CAN_RESTORE_DATASTORE]: true,\n [CAN_INVITES]: true,\n [CAN_SEE_INVITES]: true,\n [CAN_MODIFY_ORGANIZATION]: true,\n [CAN_MODIFY_DATABASE_USERS]: true,\n [CAN_MODIFY_ORG_MEMBERS]: true,\n [CAN_ADD_DB_PARAMS]: true,\n [CAN_DELETE_INVITES]: true,\n [CAN_MODIFY_BACKUP_SETTINGS]: true,\n [CAN_MODIFY_DATASTORE_SETTINGS]: true,\n [CAN_MODIFY_BACKUP_SCHEDULE]: true,\n [CAN_ADD_FIREWALL]: true,\n [CAN_DELETE_FIREWALL]: true,\n },\n};\n","import { getLocalStorage } from '../helpers';\nimport { PermissionRoles, Permission } from '../PermissionRoles';\n\nexport const useRBAC = () => {\n const activeOrg = getLocalStorage('org');\n\n const hasPermission = (permission: Permission): boolean => {\n const rolePermissions =\n PermissionRoles[\n activeOrg?.role?.toLowerCase() as keyof typeof PermissionRoles\n ] || {};\n return !!rolePermissions[permission];\n };\n\n return { hasPermission };\n};\n","import { useRBAC } from '../hooks/useRBAC';\nimport { Permission } from '../PermissionRoles';\nimport { Tooltip } from 'antd';\nimport { DeniedOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport { RBAC_DEBUG_MODE, RBAC_ENABLED } from '../CcxEnv';\n\ninterface CanProps {\n permission: Permission;\n children: React.ReactNode;\n showTooltip: boolean;\n}\n\nconst Can = ({ permission, children, showTooltip }: CanProps) => {\n const { hasPermission } = useRBAC();\n\n if (RBAC_DEBUG_MODE) {\n return <>{children};\n }\n\n if (!RBAC_ENABLED) {\n return <>{children};\n }\n\n return hasPermission(permission) ? (\n <>{children}\n ) : showTooltip ? (\n \n \n \n ) : (\n <>\n );\n};\n\nexport default Can;\n","import { ReactElement, useEffect, useState } from 'react';\nimport {\n Button,\n Col,\n Dropdown,\n Menu,\n Modal,\n notification,\n Pagination,\n Row,\n Spin,\n Tooltip,\n} from 'antd';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport AppEmpty from '../../AppEmpty';\nimport AppGridTable from '../../ccx/common/AppGridTable';\nimport styles from './DataStores.module.less';\nimport { Link, useHistory, useParams } from 'react-router-dom';\nimport DeploymentsItem from '../../../types/DeploymentsItem';\nimport ProvisionService from '../../../services/ProvisionService';\nimport CcxIconInfoCircleTwoTone from '../../ccx/icons/CcxIconInfoCircleTwoTone';\nimport CcxIconCloseCircleTwoTone from '../../ccx/icons/CcxIconCloseCircleTwoTone';\nimport CcxContextualMenuIcon from '../../ccx/icons/CcxContextualMenuIcon';\nimport DataStoreInformation from './DataStoreInformation';\nimport DataStoreStatus from './DataStoreStatus';\nimport CloudInformation from './CloudInformation';\nimport DatabaseInformation from './DatabaseInformation';\nimport DataStoreChart from './DataStoreChart';\nimport NoChartAvailable from '../../ccx/common/NoChartAvailable';\nimport CcxIconInfoCircleOutlined from '../../ccx/icons/CcxIconInfoCircleOutlined';\nimport AppDeleteModal from '../../AppDeleteModal';\nimport { useAppDispatch, useAppSelector } from '../../../redux/hooks';\nimport { updateProfile } from '../../../slices/user.slice';\nimport {\n getAllDataStores,\n GetAllDataStoresParams,\n} from '../../../slices/datastores.slice';\nimport {\n DeleteOutlined,\n FileOutlined,\n} from '@severalnines/frontend_hub/libs/icons';\nimport { SelectedFilterOptionsInterface } from '../Projects';\nimport LazyLoader from '../../LazyLoader';\nimport { useOnlineStatus } from '../../../core/hooks/useOnlineStatus';\nimport {\n CAN_ADD_DATASTORE,\n CAN_DELETE_DATASTORE,\n} from '../../../core/PermissionRoles';\nimport { useRBAC } from '../../../core/hooks/useRBAC';\nimport Can from '../../../core/providers/Can';\n\ninterface UrlProps {\n projectUuid: string;\n}\n\nexport type PaginationProps = {\n perPage: number;\n page: number;\n};\n\ninterface Props extends CcxComponentProps {\n selectedFilters: SelectedFilterOptionsInterface;\n filterCount: number;\n}\n\nfunction DataStores({\n testId = 'DataStores',\n selectedFilters,\n filterCount,\n}: Readonly): ReactElement {\n const history = useHistory();\n const { projectUuid } = useParams();\n const { hasPermission } = useRBAC();\n\n const { datastores, totalItems } = useAppSelector(\n (state) => state.datastores\n );\n const [isLoading, setIsLoading] = useState(false);\n const [pagination, setPagination] = useState({\n perPage: 10,\n page: 1,\n });\n const [rows, setRows] = useState([]);\n const [updating, setUpdating] = useState(false);\n const { deploymentOptions } = useAppSelector(\n (state) => state.deploymentOptions\n );\n const confirmPhrase = 'delete';\n\n const { user } = useAppSelector((state) => state.user);\n const dispatch = useAppDispatch();\n\n const onAlertClose = async () => {\n try {\n dispatch(updateProfile());\n } catch (e) {\n notification.open({\n message: 'New User',\n description: `There was an error . ${e}`,\n icon: ,\n });\n }\n };\n\n const QPSTitle = (\n \n Queries per second \n \n );\n\n const columns = [\n { title: 'Datastore', span: 5 },\n { title: 'Status', span: 4 },\n { title: 'Database', span: 4 },\n { title: 'Cloud provider', span: 4 },\n { title: QPSTitle, span: 5 },\n ];\n\n useEffect(() => {\n const AUTO_REFRESH_INTERVAL = 20000;\n const interval = setInterval(async () => {\n setUpdating(true);\n dispatch(getAllDataStores(processDataToDispatch()));\n setUpdating(false);\n }, AUTO_REFRESH_INTERVAL);\n\n return () => clearInterval(interval);\n }, [selectedFilters, pagination]);\n\n const processDataToDispatch = (\n paginationData?: PaginationProps\n ): GetAllDataStoresParams => {\n if (!paginationData) {\n paginationData = { ...pagination };\n }\n return {\n page: paginationData.page,\n per_page: paginationData.perPage,\n tags: selectedFilters.tags,\n db_vendors: selectedFilters.dbVendors,\n };\n };\n\n useEffect(() => {\n if (datastores) {\n if (user?.isNewUser() && datastores.deployments.length > 0) {\n onAlertClose();\n }\n\n setRows(\n datastores?.map((d: DeploymentsItem) => {\n function handleMenuOptionClick(e: any) {\n if (e.key === 'details') {\n history.push(\n `/projects/${projectUuid}/data-stores/${d.dataStoreUuid}/overview`\n );\n }\n }\n\n const onConfirmDelete = () => {\n return new Promise(async (resolve, reject) => {\n if (d) {\n Modal.destroyAll();\n\n try {\n await ProvisionService.removeDeployment(\n d.dataStoreUuid\n );\n\n dispatch(\n getAllDataStores(\n processDataToDispatch()\n )\n );\n\n notification.open({\n message: 'Delete datastore',\n description:\n 'The datastore will be removed soon.',\n icon: ,\n });\n\n resolve(null);\n } catch (e) {\n notification.open({\n message: 'Delete datastore',\n description: `There was an error trying to delete the datastore. ${e}`,\n icon: (\n \n ),\n });\n\n console.error(e);\n reject();\n }\n }\n }).catch(() => console.log('Oops errors!'));\n };\n\n const menu = (\n \n {!d.isUnreachable() && (\n }\n >\n Details\n \n )}\n\n \n\n }\n >\n \n \n \n );\n\n const countryCode = deploymentOptions?.getCloudRegion(\n d?.getCloudProvider().code,\n d.cloudRegion.code\n );\n\n return {\n borderAlert: d.isStatusError(),\n statusOverlayText: d.getDataStoreStatus(),\n columns: [\n {\n content: (\n \n ),\n span: 5,\n },\n {\n content: (\n \n ),\n span: 4,\n },\n {\n content: (\n \n ),\n span: 4,\n },\n {\n content: (\n \n ),\n span: 4,\n },\n {\n align: 'center',\n content:\n d.isDeploying() ||\n d.isDeleting() ||\n d.isStatusError() ||\n d.isStatusWarning() ? (\n \n ) : (\n \n ),\n span: 5,\n },\n {\n align: 'center',\n content:\n ((d.isOperable() ||\n d.clusterStatus.isDeploymentFailed()) &&\n !d.isDeleting() &&\n !d.isDeploying()) ||\n d.isUnreachable() ? (\n \n \n \n }\n >\n \n \n ) : (\n // temporary\n \n \n }\n >\n \n ),\n span: 2,\n },\n ],\n disabled: d.isDeleting(),\n };\n })\n );\n }\n }, [datastores, selectedFilters]);\n\n useEffect(() => {\n if (deploymentOptions) {\n onChangePage();\n }\n }, [deploymentOptions, selectedFilters]);\n\n const onChangePage = async (nextPage: number = pagination.page) => {\n setIsLoading(true);\n\n const paginationData: PaginationProps = {\n perPage: pagination.perPage,\n page: nextPage,\n };\n\n setPagination(paginationData);\n\n await dispatch(getAllDataStores(processDataToDispatch(paginationData)));\n\n // scroll to top of the page upon page change\n window.scrollTo(0, 0);\n setIsLoading(false);\n };\n\n if (!isLoading && totalItems === 0) {\n return (\n
\n 0\n ? 'No datastores are matching the filter.'\n : 'There are no datastores created yet.'\n }\n >\n {filterCount === 0 && (\n \n \n \n Add your first datastore\n \n {' '}\n \n )}\n \n
\n );\n }\n\n return (\n <>\n {isLoading && }\n {!isLoading && totalItems > 0 && (\n \n )}\n {!isLoading && totalItems > 10 && (\n \n \n \n onChangePage(nextPage)\n }\n defaultCurrent={pagination.page}\n total={totalItems}\n />\n \n \n )}\n \n );\n}\n\nexport default DataStores;\n","import React, { ReactElement } from 'react';\nimport { Select, Space } from 'antd';\nimport AppLabeledComponent from '../ccx/common/AppLabeledComponent';\nimport styles from './VpcListOptions.module.less';\nimport CcxComponentProps from '../../core/CcxComponent';\n\ninterface VpcListOptionsProps extends CcxComponentProps {\n cloud?: string;\n clouds?: any[];\n region?: string;\n regions?: any[];\n onCloudChange?: Function;\n onRegionChange?: Function;\n disabled?: boolean;\n}\n\nfunction VpcListOptions({\n cloud,\n clouds,\n region,\n regions,\n onCloudChange,\n onRegionChange,\n disabled,\n testId = 'VpcListOptions',\n}: VpcListOptionsProps): ReactElement {\n const { Option } = Select;\n\n const handleCloudChange = (value: any) => {\n onCloudChange && onCloudChange(value);\n };\n\n const handleRegionChange = (value: string) => {\n onRegionChange && onRegionChange(value);\n };\n\n return (\n \n \n \n {clouds?.map((item: any, index: number) => {\n return (\n \n {item.label}\n \n );\n })}\n \n \n \n \n onChange={handleRegionChange}\n disabled={disabled}\n value={region}\n placeholder=\"Select region\"\n data-testid={`${testId}RegionSelect`}\n >\n {regions?.map((item: any, index: number) => {\n return (\n \n {item.label}\n \n );\n })}\n \n \n \n );\n}\n\nexport default VpcListOptions;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport Vpc from '../../../types/Vpc';\nimport AppFlagIcon from '../../ccx/common/AppFlagIcon';\nimport styles from './InstanceInformation.module.less';\nimport DeploymentOptions from '../../../types/DeploymentOptions';\nimport AppLogoBrand from '../../ccx/common/AppLogoBrand';\nimport Icon from '@ant-design/icons/lib/components/Icon';\n\ninterface Props extends CcxComponentProps {\n vpc: Vpc;\n countryCode: string;\n deploymentOptions: DeploymentOptions;\n}\n\nfunction InstanceInformation({\n vpc,\n countryCode,\n testId = 'InstanceInformation',\n deploymentOptions,\n}: Props): ReactElement {\n const getCloudProviderLogo = (\n deploymentOptions: DeploymentOptions | undefined,\n p: string\n ) => {\n if (deploymentOptions) {\n const url = deploymentOptions?.getCloudProviderLogo(p);\n return (\n (\n {url}\n )}\n />\n );\n }\n return null;\n };\n\n return (\n
\n
\n {getCloudProviderLogo(deploymentOptions, vpc.cloud)}\n \n {vpc.region}\n
\n
\n {vpc.getName()}\n
\n
\n );\n}\n\nexport default InstanceInformation;\n","import { Tooltip } from 'antd';\nimport React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport styles from './VpcStatus.module.less';\nimport Vpc from '../../../types/Vpc';\nimport DotLabelStatus from '../../ccx/common/DotLabelStatus';\n\ninterface Props extends CcxComponentProps {\n vpc: Vpc;\n updating?: boolean;\n}\n\nfunction VpcStatus({\n vpc,\n testId = 'VpcStatus',\n updating = false,\n}: Props): ReactElement {\n let StatusComponent = null;\n\n if (vpc?.isStatusOk()) {\n StatusComponent = (\n \n );\n } else if (vpc?.isStatusError()) {\n StatusComponent = (\n \n );\n } else if (vpc?.isStatusWarning()) {\n StatusComponent = (\n \n );\n } else {\n StatusComponent = (\n \n );\n }\n\n if (vpc?.isStatusError() || vpc?.isStatusWarning()) {\n return (\n
\n \n {StatusComponent}{' '}\n \n
\n );\n }\n\n return (\n
\n \n {StatusComponent}{' '}\n \n
\n );\n}\n\nexport default VpcStatus;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport styles from './VpcCidr.module.less';\nimport Vpc from '../../../types/Vpc';\n\ninterface Props extends CcxComponentProps {\n vpc: Vpc;\n}\n\nfunction VpcCidr({ vpc, testId = 'VpcCidr' }: Props): ReactElement {\n return (\n
\n
{vpc.getCidrIpv4Block()}
\n
\n );\n}\n\nexport default VpcCidr;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport Vpc from '../../../types/Vpc';\nimport styles from './VpcPeerings.module.less';\n\ninterface Props extends CcxComponentProps {\n vpc: Vpc;\n peerings?: any[];\n}\n\nfunction VpcPeerings({\n vpc,\n testId = 'VpcPeerings',\n peerings = [],\n}: Props): ReactElement {\n return (\n
\n
\n {peerings.length} connection{peerings.length !== 1 ? 's' : ''}\n
\n
\n );\n}\n\nexport default VpcPeerings;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport styles from './VpcDataStores.module.less';\n\ninterface Props extends CcxComponentProps {\n dataStores: number;\n}\n\nfunction VpcDataStores({\n testId = 'VpcDataStores',\n dataStores = 0,\n}: Props): ReactElement {\n return (\n
\n
\n {dataStores} datastore{dataStores !== 1 ? 's' : ''}\n
\n
\n );\n}\n\nexport default VpcDataStores;\n","import React, { createContext } from 'react';\n\nexport const VpcsContext = createContext(undefined);\n","import { ReactElement, useContext, useEffect, useMemo, useState } from 'react';\nimport { Button, Card, Dropdown, Menu, notification, Modal, Spin } from 'antd';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport AppGridTable from '../../ccx/common/AppGridTable';\nimport useVpcs from '../../../core/hooks/useVpcs';\nimport useVpcPeers from '../../../core/hooks/useVpcPeers';\nimport useContentProviders from '../../../core/hooks/useContentProviders';\nimport { useHistory, useParams } from 'react-router-dom';\nimport AppEmpty from '../../AppEmpty';\nimport LazyLoader from '../../LazyLoader';\nimport VpcListOptions from '../../vpc/VpcListOptions';\nimport styles from './Vpcs.module.less';\nimport CloudProvider from '../../../types/CloudProvider';\nimport CloudProviderRegion from '../../../types/CloudProviderRegion';\nimport Vpc from '../../../types/Vpc';\nimport InstanceInformation from './InstanceInformation';\nimport VpcStatus from './VpcStatus';\nimport VpcCidr from './VpcCidr';\nimport VpcPeering from '../../../types/VpcPeering';\nimport VpcPeerings from './VpcPeerings';\nimport CcxContextualMenuIcon from '../../ccx/icons/CcxContextualMenuIcon';\nimport AppConfirmDialog from '../../AppConfirmDialog';\nimport CreateVpcPeerButton from '../../vpc/CreateVpcPeerButton';\nimport VpcDataStores from './VpcDataStores';\nimport CcxIconInfoCircleTwoTone from '../../ccx/icons/CcxIconInfoCircleTwoTone';\nimport CcxIconCheckCircle from '../../ccx/icons/CcxIconCheckCircle';\nimport CcxIconCloseCircleTwoTone from '../../ccx/icons/CcxIconCloseCircleTwoTone';\nimport VpcService from '../../../services/VpcService';\nimport { VpcsContext } from '../../../core/context/VpcsContext';\nimport {\n DeleteOutlined,\n FileOutlined,\n PlusCircleOutlined,\n} from '@severalnines/frontend_hub/libs/icons';\nimport { useAppSelector } from '../../../redux/hooks';\n\ninterface UrlProps {\n projectUuid: string;\n}\n\ninterface Props extends CcxComponentProps {}\n\nfunction Vpcs({ testId = 'Vpcs' }: Props): ReactElement {\n const history = useHistory();\n const { projectUuid } = useParams();\n const [rows, setRows] = useState([]);\n const { cloudProviders, loading: loadingProviders } = useContentProviders();\n const [clouds, setClouds] = useState(undefined);\n const [regions, setRegions] = useState(undefined);\n\n const vpcContext = useContext(VpcsContext);\n\n const {\n vpcs,\n loading: loadingVpcs,\n refresh: refreshVpcs,\n } = useVpcs(vpcContext.cloud, vpcContext.region);\n\n const vpcIds = useMemo(() => {\n return vpcs?.map((v: Vpc) => v.id);\n }, [vpcs]);\n\n const {\n vpcPeers,\n loading: loadingPeers,\n refresh: refreshPeers,\n } = useVpcPeers(vpcContext.cloud, vpcContext.region, vpcIds);\n\n const { deploymentOptions } = useAppSelector(\n (state) => state.deploymentOptions\n );\n\n const [deleting, setDeleting] = useState(false);\n\n const columns = [\n { title: 'Resource info', span: 4 },\n { title: 'Status', span: 4 },\n { title: 'CIDR', span: 4 },\n { title: 'Peering', span: 4 },\n { title: 'Used by', span: 4 },\n ];\n\n useEffect(() => {\n if (cloudProviders && cloudProviders.length > 0) {\n setClouds(\n cloudProviders\n ?.filter((c: CloudProvider) => {\n // only show AWS for now\n return c.isAws();\n })\n .map((c: CloudProvider) => {\n return { label: c.name, value: c.code };\n }) || []\n );\n\n setRegions(\n cloudProviders\n ?.filter((c: CloudProvider) => {\n // only show AWS for now\n return c.isAws();\n })[0]\n ?.regions.map((r: CloudProviderRegion) => {\n return {\n label: `${r.code} - ${r.name}`,\n value: r.code,\n };\n }) || []\n );\n\n if (vpcContext.cloud && vpcContext.region) {\n vpcContext.setCloud(vpcContext.cloud);\n vpcContext.setRegion(vpcContext.region);\n } else {\n vpcContext.setCloud(cloudProviders[0].code);\n vpcContext.setRegion(cloudProviders[0].regions[0].code);\n }\n }\n }, [cloudProviders]);\n\n useEffect(() => {\n if (vpcs && vpcs.length > 0) {\n const data = vpcs.map((vpc: Vpc) => {\n const peeringData: any =\n vpcPeers &&\n vpcPeers.length &&\n vpcPeers.filter(\n (vpcPeer: VpcPeering) => vpcPeer.vpcId === vpc.id\n ).length\n ? vpcPeers.filter(\n (vpcPeer: VpcPeering) => vpcPeer.vpcId === vpc.id\n )\n : [];\n\n const onConfirmDelete = () => {\n return new Promise(async (resolve, reject) => {\n setDeleting(true);\n\n notification.open({\n message: 'Remove VPC',\n description: 'The VPC will be removed soon.',\n icon: ,\n });\n\n Modal.destroyAll();\n\n try {\n if (!vpc?.id) {\n throw new Error('no VPC ID provided');\n }\n await VpcService.deleteVpc({\n vpcUuid: vpc.id,\n });\n\n refreshVpcs && (await refreshVpcs());\n\n vpcContext.refresh && (await vpcContext.refresh());\n\n notification.open({\n message: 'Remove VPC',\n description: 'VPC successfully removed',\n icon: ,\n });\n\n setDeleting(false);\n resolve(null);\n } catch (e) {\n notification.open({\n message: 'Remove VPC',\n description: `There was an error removing the VPC. ${e}`,\n icon: (\n \n ),\n });\n\n console.error(e);\n\n setDeleting(false);\n reject();\n }\n }).catch(() => console.log('Oops errors!'));\n };\n\n const dataStores = vpc.datastores;\n\n const menu = (\n \n }\n onClick={() => {\n history.push({\n pathname: `/projects/${projectUuid}/vpcs/${vpc.id}/peerings`,\n state: {\n cloud: vpc.cloud,\n region: vpc.region,\n },\n });\n }}\n >\n View Peerings\n \n }\n >\n \n \n \n \n }\n label=\"Delete\"\n content=\"The selected VPC will be deleted.\"\n />\n \n \n );\n\n const countryCode = deploymentOptions\n ?.getCloudRegions(vpc?.cloud)\n ?.filter((r: any) => r.code === vpc.region)[0]?.countryCode;\n\n return {\n borderAlert: vpc.isStatusError(),\n columns: [\n {\n content: deploymentOptions && (\n \n ),\n span: 4,\n },\n {\n content: (\n \n ),\n span: 4,\n },\n {\n content: (\n \n ),\n span: 4,\n },\n {\n content: (\n \n \n \n ),\n span: 4,\n },\n {\n content: (\n \n ),\n span: 4,\n },\n {\n align: 'end',\n content: (\n \n \n }\n >\n \n ),\n span: 4,\n },\n ],\n };\n });\n setRows(data);\n }\n }, [vpcs, vpcPeers, loadingPeers]);\n\n useEffect(() => {\n const AUTO_REFRESH_INTERVAL = 10000;\n const interval = setInterval(async () => {\n refreshVpcs && (await refreshVpcs());\n }, AUTO_REFRESH_INTERVAL);\n\n return () => clearInterval(interval);\n }, [vpcContext.cloud, vpcContext.region]);\n\n const handleCloudChange = (value: string) => {\n vpcContext.setCloud(value);\n };\n\n const handleRegionChange = (value: string) => {\n vpcContext.setRegion(value);\n };\n\n return (\n
\n \n \n \n\n {loadingProviders || loadingVpcs ? : null}\n\n {(!vpcs || vpcs.length === 0) &&\n !loadingProviders &&\n !loadingVpcs ? (\n \n ) : null}\n\n {!loadingProviders && !loadingVpcs && vpcs && vpcs?.length > 0 ? (\n \n \n \n ) : null}\n
\n );\n}\n\nexport default Vpcs;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport { Button } from 'antd';\nimport { Tooltip } from 'antd';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { SizeType } from 'antd/lib/config-provider/SizeContext';\nimport { PlusCircleOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport styles from './CreateVpcButton.module.less';\n\ninterface Props extends CcxComponentProps {\n buttonType?: string;\n buttonText?: string;\n disabled?: boolean;\n disabledText?: string;\n className?: string;\n size?: SizeType;\n}\n\nexport type UrlProps = {\n projectUuid: string;\n};\n\nfunction CreateVpcButton({\n buttonText = 'Create VPC',\n buttonType,\n className,\n testId = 'CreateVpcButton',\n disabled,\n disabledText,\n size = 'small',\n}: Props): ReactElement {\n const history = useHistory();\n const { projectUuid } = useParams();\n\n const handleClick = () => {\n history.push(`/projects/${projectUuid}/services/new/vpc`);\n };\n\n return (\n \n \n {buttonText}\n \n \n );\n}\n\nexport default CreateVpcButton;\n","import React from 'react';\nimport { DownOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport CcxComponentProps from '../../../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {}\n\nconst CcxIconDownOutlined = ({ testId }: Props) => {\n return ;\n};\n\nexport default CcxIconDownOutlined;\n","import React, { ReactElement } from 'react';\nimport { Button, Dropdown, Menu } from 'antd';\nimport { NavLink, useParams } from 'react-router-dom';\nimport styles from './AppCreateButton.module.less';\nimport CcxIconDownOutlined from '../ccx/icons/CcxIconDownOutlined';\nimport CreateVpcButton from '../vpc/CreateVpcButton';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport { vpcDisabled } from '../../core/CcxEnv';\nimport User from '../../types/User';\nimport { useAppSelector } from '../../redux/hooks';\nimport Deployments from '../../types/Deployments';\nimport { useRBAC } from '../../core/hooks/useRBAC';\nimport { CAN_ADD_DATASTORE, CAN_ADD_VPC } from '../../core/PermissionRoles';\nimport Can from '../../core/providers/Can';\n\ninterface UrlProps {\n projectUuid?: string;\n}\n\ninterface Props extends CcxComponentProps {}\n\nfunction AppCreateButton({ testId = 'AppCreateButton' }: Props): ReactElement {\n const { projectUuid } = useParams();\n const { hasPermission } = useRBAC();\n const { datastores } = useAppSelector((state) => state.datastores);\n\n const { user } = useAppSelector((state) => state.user);\n\n const menu = () => {\n const limitReached = userReachedDatastoreLimit(datastores, user);\n return (\n \n \n \n \n Datastore\n \n \n \n\n {!vpcDisabled && (\n \n \n \n \n \n )}\n \n );\n };\n\n return hasPermission(CAN_ADD_DATASTORE) || hasPermission(CAN_ADD_VPC) ? (\n \n \n Create \n \n \n ) : (\n <>\n );\n}\n\nexport function userReachedDatastoreLimit(\n datastores: Deployments | undefined,\n user?: User\n) {\n return (\n user?.verifiedLevel === 0 &&\n (user?.maxDataStores || 0) > 0 &&\n (datastores?.notDeletingLength() || 0) >= (user?.maxDataStores || 0)\n );\n}\n\nexport default AppCreateButton;\n","export const CMON_STATUS_OK = 'OK';\nexport const CMON_STATUS_DEGRADED = 'DEGRADED';\nexport const CMON_STATUS_UNKNOWN = 'UNKNOWN';\nexport const CMON_STATUS_DOWN = 'DOWN';\nexport const CMON_STATUS_UP = 'UP';\n\nexport interface CmonStatusInterface {\n status: string;\n}\n\nexport default class CmonStatus implements CmonStatusInterface {\n readonly status: string;\n\n constructor(props: CmonStatusInterface) {\n this.status = props.status;\n }\n\n public isFunctional() {\n return (\n this.status !== CMON_STATUS_DEGRADED &&\n this.status !== CMON_STATUS_DOWN\n );\n }\n}\n","import ApiService from './ApiService';\nimport { API_V2 } from '../core/CcxEnv';\nimport CmonStatus from '../types/CmonStatus';\n\n// Constants\nconst CMON_API_URL = API_V2;\n\nexport default class CmonService extends ApiService {\n /**\n * Get CMON Status.\n */\n static async getCmonStatus(): Promise {\n try {\n const response = await this.request('GET', `status`);\n return new CmonStatus(response);\n } catch (error) {\n console.error('Error occurred while fetching CMON status:', error);\n }\n }\n\n protected static getApiUrl() {\n return CMON_API_URL;\n }\n}\n","import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';\nimport CmonStatus from '../types/CmonStatus';\nimport CmonService from '../services/CmonService';\n\ninterface CmonStatusInterface {\n status: CmonStatus | undefined;\n loading: boolean | undefined;\n error: string | null;\n}\n\nconst initialState = {\n status: undefined,\n loading: false,\n error: null,\n} as CmonStatusInterface;\n\nexport const fetchCmonStatus = createAsyncThunk('fetchCmonStatus', async () => {\n try {\n const response = await CmonService.getCmonStatus();\n\n return response;\n } catch (error) {\n if (error instanceof Error) return console.log(error.message);\n\n return 'Error fetching jobs';\n }\n});\n\nconst cmonSlice = createSlice({\n name: 'cmonStatus',\n initialState,\n reducers: {},\n extraReducers: (builder) => {\n builder\n .addCase(fetchCmonStatus.pending, (state) => {\n state.loading = true;\n })\n .addCase(fetchCmonStatus.fulfilled, (state, action: any) => {\n state.status = action.payload;\n state.error = null;\n state.loading = false;\n })\n .addCase(fetchCmonStatus.rejected, (state, action) => {\n state.error = action.payload as string;\n state.loading = false;\n });\n },\n});\n\nexport default cmonSlice.reducer;\n","import { useEffect } from 'react';\nimport { fetchCmonStatus } from '../../slices/cmon.slice';\nimport { useAppDispatch, useAppSelector } from '../../redux/hooks';\n\nexport default function useCmonStatus() {\n const dispatch = useAppDispatch();\n\n const { status, loading, error } = useAppSelector((state) => state.cmon);\n\n const refresh = () => {\n dispatch(fetchCmonStatus());\n };\n\n useEffect(() => {\n dispatch(fetchCmonStatus());\n\n const intervalId = setInterval(() => {\n refresh();\n }, 20000);\n\n return () => {\n clearInterval(intervalId);\n };\n }, [dispatch]);\n\n return { status, error, loading };\n}\n","import { Checkbox, Select } from 'antd';\nimport styles from './DatastoreFilterPopover.module.less';\n\nexport interface OptionsInterface {\n label: string;\n value: string;\n}\n\ninterface DatastoreFilterPopoverProps {\n options: {\n datastoreTypes: OptionsInterface[];\n tagsList: OptionsInterface[];\n };\n onChangeTagsFilter: Function;\n onChangeDbTypesFilter: Function;\n}\n\nfunction DatastoreFilterPopover({\n options,\n onChangeTagsFilter,\n onChangeDbTypesFilter,\n}: DatastoreFilterPopoverProps) {\n return (\n
\n

\n Database type\n

\n\n onChangeDbTypesFilter(value)}\n />\n

\n Tags\n

\n onChangeTagsFilter(value)}\n options={options.tagsList}\n />\n
\n );\n}\n\nexport default DatastoreFilterPopover;\n","import CloudProviderRegion, {\n CloudProviderRegionClassProps,\n} from './CloudProviderRegion';\nimport { CLUSTER_TYPE_EPHEMERAL } from './Db';\nimport DeploymentOptions from './DeploymentOptions';\nimport FriendlyDateTime from './FriendlyDateTime';\n\nexport const DB_VENDOR_MARIADB = 'mariadb';\nexport const DB_VENDOR_POSTGRESQL = 'pgsql';\nexport const DB_VENDOR_POSTGRESQL_V2 = 'postgres'; // introduced in provisioning v2\nexport const DB_VENDOR_PERCONA = 'percona';\nexport const DB_VENDOR_REDIS = 'redis';\nexport const DB_VENDOR_UNKNOWN = '';\n\nexport const LB_VENDOR_HAPROXY = 'haproxy';\nexport const LB_VENDOR_PROXYSQL = 'proxysql';\n\nexport const DB_VENDOR_MARIADB_PRETTY = 'MariaDB Cluster';\nexport const DB_VENDOR_POSTGRESQL_PRETTY = 'PostgreSQL';\nexport const DB_VENDOR_PERCONA_PRETTY = 'MySQL';\nexport const DB_VENDOR_REDIS_PRETTY = 'Cache22';\n\nexport const LB_VENDOR_HAPROXY_PRETTY = 'HAProxy';\nexport const LB_VENDOR_PROXYSQL_PRETTY = 'ProxySQL';\n\nexport type ServiceClassProps = {\n admin_port: number;\n cloud_provider: string;\n disk_type: string;\n disk_size: number;\n cluster_uuid: string;\n created_at: string;\n disks: string;\n fqdn?: string;\n host_az: string;\n az: string;\n host_status: string;\n host_type?: string;\n host_uuid: string;\n id: string;\n hostname: string;\n instance_id: string;\n instance_type: string;\n last_seen_at: string;\n last_seen: string;\n listening_port: number;\n listening_port_ro: number;\n node_type: string;\n port: number;\n private_ip: string;\n public_ip: string;\n region: CloudProviderRegionClassProps;\n role: string;\n security_group: string;\n service_started_at: string;\n ssl_enabled: boolean;\n subnet: string;\n unique_id: number;\n updated_at: string;\n user_login: string;\n vpc: string;\n version: string;\n readonly: boolean;\n};\n\nexport interface ServiceInterface {\n getAvailabilityZone(): string;\n getNodeType(): string;\n getRole(): string;\n getStatus(): string;\n getStatusText(): string;\n isStatusOk(): boolean;\n isStatusError(): boolean;\n isStatusWarning(): boolean;\n isStarting(): boolean;\n getPort(): number;\n getNodeVersion(): string;\n}\n\nexport default class Service implements ServiceInterface {\n static CMON_STATUS_ONLINE = 'CmonHostOnline';\n static CMON_STATUS_FAILED = 'CmonHostFailed';\n static CMON_STATUS_OFFLINE = 'CmonHostOffLine';\n static CMON_STATUS_SHUTDOWN = 'CmonHostShutDown';\n static CMON_STATUS_RECOVERY = 'CmonHostRecovery';\n static CMON_STATUS_UNKNOWN = 'CmonHostUnknown';\n\n protected adminPort: number;\n protected cloudProvider: string;\n protected diskType: string;\n protected diskSize: number;\n protected clusterUuid: string;\n protected createdAt: string;\n protected disks: string;\n protected fqdn?: string;\n protected hostAvailabilityZone: string;\n protected hostStatus: string;\n protected hostType?: string;\n protected hostUuid: string;\n protected hostname: string;\n protected instanceId: string;\n protected instanceType: string;\n protected lastSeenAt: string;\n protected listeningPort: number;\n protected listeningPortRo: number;\n protected nodeType: string;\n protected port: number;\n protected privateIp: string;\n protected publicIp: string;\n protected region?: CloudProviderRegion;\n readonly role: string;\n protected securityGroup: string;\n protected serviceStartedAt: string;\n protected status: string;\n protected sslEnabled: boolean;\n protected subnet: string;\n protected uniqueId: number;\n protected updatedAt: string;\n protected userLogin: string;\n protected vpc: string;\n protected version: string;\n protected readonly: boolean;\n\n constructor(props: ServiceClassProps) {\n this.adminPort = props.admin_port;\n this.cloudProvider = props.cloud_provider;\n this.diskType = props.disk_type;\n this.diskSize = props.disk_size;\n this.clusterUuid = props.cluster_uuid;\n this.createdAt = props.created_at;\n this.disks = props.disks;\n this.fqdn = props.fqdn;\n this.hostAvailabilityZone = props.host_az || props.az;\n this.hostStatus = props.host_status;\n this.hostType = props.host_type;\n this.hostUuid = props.host_uuid || props.id;\n this.hostname = props.hostname;\n this.instanceId = props.instance_id;\n this.instanceType = props.instance_type;\n this.lastSeenAt = props.last_seen_at || props.last_seen;\n this.listeningPort = props.listening_port;\n this.listeningPortRo = props.listening_port_ro;\n this.nodeType = props.node_type;\n this.port = props.port;\n this.privateIp = props.private_ip;\n this.publicIp = props.public_ip;\n this.region = props.region\n ? new CloudProviderRegion(props.region)\n : undefined;\n this.role = props.role;\n this.securityGroup = props.security_group;\n this.serviceStartedAt = props.service_started_at;\n this.status =\n this.isStatusError() || this.isStatusWarning() ? 'error' : 'ok';\n this.sslEnabled = props.ssl_enabled;\n this.subnet = props.subnet;\n this.uniqueId = props.unique_id;\n this.updatedAt = props.updated_at;\n this.userLogin = props.user_login;\n this.vpc = props.vpc;\n this.version = props.version.split('.')[0] || '';\n this.readonly = props.readonly;\n }\n\n getNodeType(): string {\n return this.nodeType;\n }\n\n getHostUuid(): string {\n return this.hostUuid;\n }\n\n getRole(): string {\n return this.role;\n }\n\n getRoleName(): string {\n if (this.role === 'master' || this.role === 'slave') {\n return this.role\n .replaceAll('master', 'primary')\n .replaceAll('slave', 'replica');\n } else {\n return this.role;\n }\n }\n\n isRoleReplica(): boolean {\n return ['slave', 'SECONDARY', 'RESOLVING', 'replica'].includes(\n this.role\n );\n }\n\n isRolePrimary(): boolean {\n return ['master', 'primary'].includes(this.role);\n }\n\n getPermission(): string {\n if (this.readonly === undefined) {\n return '';\n } else if (this.readonly) {\n return 'Read-only';\n } else {\n return 'Read-write';\n }\n }\n\n getStatus(): string {\n return this.hostStatus;\n }\n\n getServiceUuid(): string {\n return this.hostUuid;\n }\n\n getHostPort(isLB?: any) {\n return isLB\n ? `${this.publicIp || this.privateIp}:${this.listeningPort}`\n : `${this.publicIp || this.privateIp}:${this.port}`;\n }\n\n getFQDN(isLB?: any): string {\n return this.fqdn || this.getHostPort(isLB);\n }\n\n getAvailabilityZone(): string {\n return this.hostAvailabilityZone;\n }\n\n isStatusOk(): boolean {\n return this.hostStatus === Service.CMON_STATUS_ONLINE;\n }\n\n isStatusError(): boolean {\n return (\n this.hostStatus === Service.CMON_STATUS_FAILED ||\n this.hostStatus === Service.CMON_STATUS_SHUTDOWN ||\n this.hostStatus === Service.CMON_STATUS_OFFLINE\n );\n }\n\n isStatusWarning(): boolean {\n return (\n this.hostStatus === Service.CMON_STATUS_RECOVERY ||\n this.hostStatus === Service.CMON_STATUS_UNKNOWN\n );\n }\n\n isStarting(): boolean {\n if (!this.hostStatus) {\n return false;\n }\n return (\n this.hostStatus.toLowerCase() === Service.CMON_STATUS_RECOVERY ||\n this.hostStatus.toLowerCase() === Service.CMON_STATUS_UNKNOWN\n );\n }\n\n getStatusText(): string {\n switch (this.hostStatus) {\n case Service.CMON_STATUS_ONLINE:\n return 'Running';\n case Service.CMON_STATUS_SHUTDOWN:\n case Service.CMON_STATUS_OFFLINE:\n case Service.CMON_STATUS_FAILED:\n return 'Stopped';\n case Service.CMON_STATUS_RECOVERY:\n return 'Recovering';\n case Service.CMON_STATUS_UNKNOWN:\n default:\n return 'Unknown';\n }\n }\n\n getPort(): number {\n return this.port;\n }\n\n getElegantNodeType(): string {\n if (this.getNodeType() === LB_VENDOR_HAPROXY) {\n return LB_VENDOR_HAPROXY_PRETTY;\n } else if (this.getNodeType() === LB_VENDOR_PROXYSQL) {\n return LB_VENDOR_PROXYSQL_PRETTY;\n } else if (this.getNodeType() === DB_VENDOR_MARIADB) {\n return DB_VENDOR_MARIADB_PRETTY;\n } else if (this.getNodeType() === DB_VENDOR_POSTGRESQL) {\n return DB_VENDOR_POSTGRESQL_PRETTY;\n } else if (this.getNodeType() === DB_VENDOR_PERCONA) {\n return DB_VENDOR_PERCONA_PRETTY;\n } else if (this.getNodeType() === DB_VENDOR_REDIS) {\n return DB_VENDOR_REDIS_PRETTY;\n } else {\n return '';\n }\n }\n\n getNodeVersion(): string {\n return this.version;\n }\n\n getFriendlyCreatedAt(): string {\n const dateTime = new FriendlyDateTime({\n date: this.createdAt,\n });\n\n return dateTime.getFriendlyDate();\n }\n\n getFullCreatedAt(): string {\n const dateTime = new FriendlyDateTime({\n date: this.createdAt,\n });\n\n return dateTime.getFullDate();\n }\n\n getCloudProvider(): string {\n return this.cloudProvider;\n }\n\n getRegion(): CloudProviderRegion | undefined {\n return this.region;\n }\n\n getRegionCode(): string {\n return this.region ? this.region.code : '';\n }\n\n getInstanceType(): string {\n return this.instanceType;\n }\n\n getDiskType(): string {\n if (this.diskType === '') {\n return CLUSTER_TYPE_EPHEMERAL;\n }\n return this.diskType;\n }\n\n getDiskSizeInfo(deployOptions: DeploymentOptions | undefined): number {\n const cloudProvider = this.getCloudProvider();\n const instanceSizes =\n deployOptions?.instance.instanceSizes[cloudProvider];\n\n if (this.diskType === '' && !this.diskSize) {\n const matchOption = instanceSizes.find(\n (option: any) => option.type === this.instanceType\n );\n if (matchOption) return matchOption.diskSize;\n }\n return this.diskSize;\n }\n\n setUserLogin(userLogin: string) {\n this.userLogin = userLogin;\n }\n\n setClusterUuid(clusterUuid: string) {\n this.clusterUuid = clusterUuid;\n }\n\n getClusterUuid() {\n return this.clusterUuid;\n }\n\n getHostname() {\n return this.hostname;\n }\n\n public getHostnameOrIP(): string {\n if (this.fqdn) {\n return this.fqdn?.split('.')[0];\n } else {\n return this.hostname;\n }\n }\n}\n","import Service, { ServiceClassProps } from './Service';\nimport { getHostnameOrIP } from '../core/helpers';\n\nexport type DbServiceClassProps = ServiceClassProps & {\n disk_size: number;\n};\n\nexport interface DbServiceInterface {}\n\nexport default class DbService extends Service implements DbServiceInterface {\n private disk_size: number;\n\n constructor(props: DbServiceClassProps) {\n super(props);\n const { disk_size } = props;\n this.disk_size = disk_size;\n }\n\n public getDiskSize(): number {\n return this.disk_size;\n }\n}\n","import Job from './Job';\n\nexport type JobsClassProps = {\n total: number;\n jobs: any[];\n};\n\nexport interface JobsInterface {\n total: number;\n jobs: Job[];\n}\n\nexport default class Jobs implements JobsInterface {\n readonly jobs: Job[];\n readonly total: number;\n\n constructor(props: JobsClassProps) {\n this.jobs = props.jobs?.map((j) => {\n return new Job(j);\n });\n this.total = props.total;\n }\n}\n","import ApiService from './ApiService';\nimport { API_DEPLOYMENT_V2 } from '../core/CcxEnv';\nimport DbService, { DbServiceClassProps } from '../types/DbService';\nimport Jobs from '../types/Jobs';\n\n// constants\nconst API_URL = API_DEPLOYMENT_V2;\n\nexport interface Services {\n dbServices: DbService[];\n}\n\nexport default class ServiceService extends ApiService {\n /**\n * Get services for a data store\n * @param {string} dataStoreUuid\n */\n static async getAllServices(dataStoreUuid: string): Promise {\n const response = await this.request(\n 'GET',\n `data-stores/${dataStoreUuid}/nodes`\n );\n return {\n dbServices:\n response?.database_nodes?.map(\n (s: DbServiceClassProps) => new DbService(s)\n ) ?? [],\n };\n }\n\n /**\n * Get jobs for a data store\n * @param {string} dataStoreUuid\n */\n static async getAllJobs(\n dataStoreUuid: string,\n limit: number = 50,\n offset: number = 0\n ): Promise {\n const response = await this.request(\n 'GET',\n `data-stores/${dataStoreUuid}/jobs?limit=${limit}&offset=${offset}`\n );\n return new Jobs(response);\n }\n\n /**\n * Get database services for a data store\n * @param {string} dataStoreUuid\n */\n static async getDbServices(dataStoreUuid: string): Promise {\n const response = await this.request(\n 'GET',\n `deployment/${dataStoreUuid}`\n );\n return response?.database_nodes?.map(\n (s: DbServiceClassProps) => new DbService(s)\n );\n }\n\n /**\n * Get load balancer services for a data store\n * @param {string} dataStoreUuid\n */\n\n protected static getApiUrl() {\n return API_URL;\n }\n}\n","import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';\nimport ServiceService from '../services/ServiceService';\nimport Job from '../types/Job';\nimport { isUserDisconnected } from '../core/helpers';\n\ninterface Jobs {\n [key: string]: Job[];\n}\ninterface InitiallyLoaded {\n [key: string]: boolean;\n}\n\ninterface JobSliceType {\n jobs: Jobs;\n loading: boolean;\n initiallyLoaded: InitiallyLoaded;\n error: string | null;\n intervals: any;\n}\n\nconst initialState = {\n jobs: {},\n loading: false,\n initiallyLoaded: {},\n error: null,\n intervals: {},\n} as JobSliceType;\n\ntype GetJobsParams = {\n dataStoreUuid: string;\n limit: number;\n offset: number;\n};\n\nexport const fetchJobs = createAsyncThunk(\n 'jobs/fetchJobs',\n async (\n { dataStoreUuid, limit, offset }: GetJobsParams,\n { rejectWithValue, getState }: any\n ) => {\n if (isUserDisconnected()) {\n const { jobs } = getState()?.jobs;\n if (jobs) return jobs;\n }\n try {\n const response = await ServiceService.getAllJobs(\n dataStoreUuid,\n limit,\n offset\n );\n\n return {\n datastoreUuid: dataStoreUuid,\n jobs: response.jobs,\n };\n } catch (error) {\n if (error instanceof Error) return rejectWithValue(error.message);\n\n return rejectWithValue('Error fetching jobs');\n }\n }\n);\n\nexport const refreshJobs = createAsyncThunk(\n 'jobs/refreshJobs',\n async (\n { dataStoreUuid, limit, offset }: GetJobsParams,\n { rejectWithValue, dispatch, getState }: any\n ) => {\n if (isUserDisconnected()) {\n const { jobs } = getState()?.jobs;\n if (jobs) return jobs;\n }\n try {\n const response = await ServiceService.getAllJobs(\n dataStoreUuid,\n limit,\n offset\n );\n return {\n datastoreUuid: dataStoreUuid,\n jobs: response.jobs,\n };\n } catch (error) {\n dispatch(clearIntervals({ dataStoreUuid }));\n\n if (error instanceof Error) return rejectWithValue(error.message);\n\n return rejectWithValue('Error fetching jobs');\n }\n }\n);\n\nconst jobsSlice = createSlice({\n name: 'jobs',\n initialState,\n reducers: {\n setIntervals: (state, action) => {\n state.intervals[action.payload.dataStoreUuid] =\n action.payload.intervalId;\n },\n clearIntervals: (state, action) => {\n clearInterval(state.intervals[action.payload.dataStoreUuid]);\n delete state.intervals[action.payload.dataStoreUuid];\n delete state.jobs[action.payload.dataStoreUuid];\n state.initiallyLoaded = {};\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(fetchJobs.pending, (state, action) => {\n state.initiallyLoaded[action.meta.arg.dataStoreUuid] = true;\n state.loading = true;\n })\n .addCase(fetchJobs.fulfilled, (state, action) => {\n state.jobs[action.payload.datastoreUuid] = action.payload.jobs;\n state.error = null;\n state.initiallyLoaded[action.payload.datastoreUuid] = true;\n state.loading = false;\n })\n .addCase(fetchJobs.rejected, (state, action) => {\n state.initiallyLoaded[action.meta.arg.dataStoreUuid] = true;\n state.error = action.payload as string;\n state.loading = false;\n });\n\n builder\n .addCase(refreshJobs.fulfilled, (state, action) => {\n state.jobs[action.payload.datastoreUuid] = action.payload.jobs;\n state.initiallyLoaded[action.payload.datastoreUuid] = true;\n })\n .addCase(refreshJobs.rejected, (state, action) => {\n state.initiallyLoaded[action.meta.arg.dataStoreUuid] = true;\n state.error = action.payload as string;\n });\n },\n});\n\nexport const { setIntervals, clearIntervals } = jobsSlice.actions;\nexport default jobsSlice.reducer;\n","export type DbParameterValue = {\n value: string;\n description: string;\n type: 'number' | 'text' | 'boolean' | 'select';\n validation_options?: string;\n default_value: string;\n min?: string;\n max?: string;\n};\n\nexport type DbParameterDefaultsProps = {\n parameters: {\n [key: string]: DbParameterValue;\n };\n status: 'pending' | string;\n updated_at: string;\n};\n\nexport interface DBParameterDefaultsInterface {\n parameters: { [key: string]: DbParameterValue };\n status: string;\n updatedAt: string;\n}\n\nexport class DBParameterDefaults implements DBParameterDefaultsInterface {\n readonly parameters: { [key: string]: DbParameterValue };\n readonly status: string;\n readonly updatedAt: string;\n\n constructor(props: DbParameterDefaultsProps) {\n this.parameters = props.parameters;\n this.status = props.status;\n this.updatedAt = props.updated_at;\n }\n\n getParameter(key: string): DbParameterValue | undefined {\n return this.parameters[key];\n }\n\n getAllParameters(): {\n [key: string]: Omit & {\n min?: string;\n max?: string;\n };\n } {\n let result: {\n [key: string]: Omit & {\n min?: string;\n max?: string;\n };\n } = {};\n Object.entries(this.parameters).forEach(([key, param]) => {\n const { validation_options, ...rest } = param;\n result[key] = {\n ...rest,\n };\n\n if (validation_options) {\n const matches = validation_options.match(/min=(\\d+),max=(\\d+)/);\n if (matches) {\n result[key].min = matches[1];\n result[key].max = matches[2];\n }\n }\n });\n return result;\n }\n\n getParameterKeys(): string[] {\n return Object.keys(this.parameters);\n }\n}\n","export type DbParameter = {\n [key: string]: string;\n};\n\nexport type DbParameterGroupProps = {\n uuid: string;\n name: string;\n user_id: string;\n database_vendor: string;\n database_version: string;\n database_type: string;\n description: string;\n created_at: string;\n updated_at: string;\n db_parameters: DbParameter;\n data_stores: any;\n};\n\nexport type DbParameterGroupInterface = {\n uuid: string;\n name: string;\n userId: string;\n databaseVendor: string;\n databaseVersion: string;\n databaseType: string;\n description: string;\n createdAt: string;\n updatedAt: string;\n dbParameters: DbParameter;\n dataStores: any;\n};\n\nexport class DbParameterGroup implements DbParameterGroupInterface {\n readonly uuid: string;\n readonly name: string;\n readonly userId: string;\n readonly databaseVendor: string;\n readonly databaseVersion: string;\n readonly databaseType: string;\n readonly createdAt: string;\n readonly updatedAt: string;\n readonly dbParameters: DbParameter;\n readonly dataStores: any;\n readonly description: string;\n\n constructor(props: DbParameterGroupProps) {\n this.uuid = props.uuid;\n this.name = props.name;\n this.userId = props.user_id;\n this.databaseVendor = props.database_vendor;\n this.databaseVersion = props.database_version;\n this.databaseType = props.database_type;\n this.createdAt = props.created_at;\n this.updatedAt = props.updated_at;\n this.dbParameters = props.db_parameters;\n this.dataStores = props.data_stores;\n this.description = props.description;\n }\n}\n","import { config } from 'process';\nimport { DbParameterGroup, DbParameterGroupProps } from './DbParameterGroup';\n\nexport type DbParameter = {\n [key: string]: string;\n};\n\nexport type Metadata = {\n currentPage: number;\n pageSize: number;\n firstPage: number;\n lastPage: number;\n totalRecords: number;\n};\n\nexport type DbParameterGroupsInterface = {\n readonly pagination: Metadata;\n readonly parameterGroups: DbParameterGroup[];\n};\n\nexport class DbParametersGroup implements DbParameterGroupsInterface {\n readonly parameterGroups: DbParameterGroup[];\n readonly pagination: Metadata;\n\n constructor(response: any) {\n this.pagination = {\n currentPage: response.metadata.current_page,\n pageSize: response.metadata.page_size,\n firstPage: response.metadata.first_page,\n lastPage: response.metadata.last_page,\n totalRecords: response.metadata.total_records,\n };\n\n this.parameterGroups = response.parameter_groups.map(\n (group: DbParameterGroupProps) => new DbParameterGroup(group)\n );\n }\n}\n","export interface LegacyDatastoreInterface {\n isLegacyDatastore: boolean;\n}\n\nexport type LegacyDatastoreProps = {\n has_legacy_parameters: boolean;\n};\n\nexport default class LegacyDatastore implements LegacyDatastoreInterface {\n readonly isLegacyDatastore: boolean;\n\n constructor(props: LegacyDatastoreProps) {\n this.isLegacyDatastore = props.has_legacy_parameters;\n }\n\n hasLegacyParameters(): boolean {\n return this.isLegacyDatastore;\n }\n}\n","import {\n API_DB_CONFIGURATION,\n APPLY,\n DB_PARAMETERS_GROUP,\n LEGACY,\n} from '../core/CcxEnv';\nimport { DBParameterDefaults } from '../types/DBparameterDefaults';\nimport { DbParameterGroup } from '../types/DbParameterGroup';\nimport { DbParametersGroup } from '../types/DbParametersGroup';\nimport LegacyDatastore from '../types/LegacyDatastore';\nimport ApiService from './ApiService';\n\n// constants\nconst API_URL = API_DB_CONFIGURATION;\n\nexport default class DbParameterGroupService extends ApiService {\n /**\n * Get list of DB parameter groups.\n */\n static async getDbParameterGroups(\n perPage: number = 10,\n page: number = 1\n ): Promise {\n const response = await this.request(\n 'GET',\n `${DB_PARAMETERS_GROUP}?page_size=${perPage}&page=${page}`\n );\n return new DbParametersGroup(response);\n }\n\n static async getDefaultDbParameterGroup(\n db_vendor: string\n ): Promise {\n const response = await this.request(\n 'GET',\n `${DB_PARAMETERS_GROUP}/defaults?db_vendor=${db_vendor}`\n );\n return new DBParameterDefaults(response);\n }\n\n /**\n * Create a new DB parameter group.\n */\n static async createDbParameterGroup(requestData: any) {\n const reqData = { data: requestData };\n const response = await this.request(\n 'POST',\n `${DB_PARAMETERS_GROUP}`,\n reqData\n );\n return response;\n }\n\n /**\n * Update an existing DB parameter group.\n * @param groupId - The ID of the group to update.\n */\n static async updateDbParameterGroup(groupId: string, parameters: any) {\n await this.request(\n 'PUT',\n `${DB_PARAMETERS_GROUP}/${groupId}?sync=true`,\n {\n data: {\n ...parameters,\n },\n }\n );\n }\n\n static async getSingleDbParameterGroup(\n groupId: string\n ): Promise {\n const response = await this.request(\n 'GET',\n `${DB_PARAMETERS_GROUP}/${groupId}`\n );\n return new DbParameterGroup(response);\n }\n\n static async applyDbParameterGroup(groupId: string, dataStoreUuid: string) {\n await this.request(\n 'PUT',\n `${DB_PARAMETERS_GROUP}/${APPLY}/${groupId}/${dataStoreUuid}`\n );\n }\n\n static async verifyLegacyDatastore(\n dataStoreUuid: string\n ): Promise {\n const response = await this.request(\n 'GET',\n `${DB_PARAMETERS_GROUP}/${LEGACY}/${dataStoreUuid}`\n );\n return new LegacyDatastore(response);\n }\n\n static async createLegacyDbParameterGroup(dataStoreUuid: string) {\n await this.request(\n 'PUT',\n `${DB_PARAMETERS_GROUP}/${LEGACY}/${dataStoreUuid}`\n );\n }\n\n /**\n * Delete a DB parameter group.\n * @param groupId - The ID of the group to delete.\n */\n static async deleteDbParameterGroup(groupId: string) {\n await this.request('DELETE', `${DB_PARAMETERS_GROUP}/${groupId}`);\n }\n\n static async syncDbParameterGroup(\n groupId: string,\n sync: boolean,\n dbParameters: any\n ) {\n await this.request(\n 'PUT',\n `${DB_PARAMETERS_GROUP}/${groupId}?sync=${sync}`,\n {\n data: {\n parameters: { ...dbParameters },\n },\n }\n );\n }\n\n protected static getApiUrl() {\n return API_URL;\n }\n}\n","import { CheckCircleTwoTone } from '@ant-design/icons';\nimport React from 'react';\n\ntype Props = {\n twoToneColor?: string;\n};\n\nconst CcxIconCheckCircleTwoTone = ({ twoToneColor }: Props) => {\n return (\n \n );\n};\n\nexport default CcxIconCheckCircleTwoTone;\n","import { DeleteOutlined, InfoCircleFilled } from '@ant-design/icons';\nimport { Popover, Space, Row, Col, Button, notification, Tooltip } from 'antd';\nimport React, { useEffect, useState } from 'react';\nimport styles from './DeleteDbParametersPopover.module.less';\nimport DbParameterGroupService from '../../services/DbParameterGroupService';\nimport CcxIconCheckCircleTwoTone from '../ccx/icons/CcxIconCheckCircleTwoTone';\nimport CcxIconCloseCircleTwoTone from '../ccx/icons/CcxIconCloseCircleTwoTone';\nimport CcxIconInfoCircleOutlined from '../ccx/icons/CcxIconInfoCircleOutlined';\n\ninterface DeleteDbParametersPopoverProps {\n record: any;\n testId?: string;\n refresh: () => void | Promise;\n isDeleteable: boolean;\n setIsLoading: React.Dispatch>;\n}\n\nconst DeleteDbParametersPopover = ({\n record,\n refresh,\n testId = 'DeleteDbParametersPopover',\n isDeleteable,\n setIsLoading,\n}: DeleteDbParametersPopoverProps) => {\n const [openPopover, setOpenPopover] = useState(false);\n\n useEffect(() => {\n setOpenPopover(isDeleteable);\n }, [isDeleteable]);\n\n const handleCancel = () => {\n setOpenPopover(!openPopover);\n };\n\n const handleDelete = async () => {\n setIsLoading(true);\n handleCancel();\n try {\n await DbParameterGroupService.deleteDbParameterGroup(record.uuid);\n notification.open({\n message: 'Success',\n description: 'Parameter group deleted successfully',\n icon: ,\n duration: 4.5,\n });\n refresh();\n } catch (e) {\n notification.open({\n message: 'Error',\n description: 'Failed to delete parameter group',\n icon: ,\n duration: 4.5,\n });\n console.error(e);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n \n \n \n \n \n Are you sure delete this group? \n \n \n \n handleDelete()}\n >\n Yes\n \n \n \n \n \n }\n trigger=\"click\"\n >\n }\n disabled={record?.dataStores?.length > 0}\n onClick={() => setOpenPopover(!openPopover)}\n >\n Delete\n \n {record.dataStores?.length > 0 && (\n \n \n \n \n
\n \n }\n trigger=\"click\"\n onOpenChange={setOpenPopover}\n >\n \n \n );\n};\n\nexport default UpdateDbParametersPopover;\n","export interface ParameterProps {\n value: string;\n description: string;\n type: string;\n validation_options: string;\n default_value: string;\n}\n\nexport enum Type {\n TEXT = 'text',\n NUMBER = 'number',\n BOOLEAN = 'boolean',\n SELECT = 'select',\n}\n\nfunction asInt(n: any): number {\n try {\n return parseInt(n, 10);\n } catch (e) {\n return 0;\n }\n}\n\nfunction parseValidationOptions(validationOptions: any) {\n const result: any = {};\n\n // Check for 'oneof' in validationOptions\n const oneofMatch = validationOptions.match(/oneof=([A-Z,]+)/);\n if (oneofMatch) {\n result.oneof = oneofMatch[1].split(',');\n }\n\n // Check for 'min' and 'max' in validationOptions\n const minMatch = validationOptions.match(/min=([0-9]+)/);\n const maxMatch = validationOptions.match(/max=([0-9]+)/);\n if (minMatch || maxMatch) {\n result.min = minMatch ? minMatch[1] : undefined;\n result.max = maxMatch ? maxMatch[1] : undefined;\n }\n\n return result;\n}\n\nexport class Parameter {\n readonly name: string;\n readonly value: string;\n readonly description: string;\n readonly type: Type;\n readonly defaultValue: string;\n readonly max: number;\n readonly min: number;\n readonly options: string[];\n\n constructor(name: string, props: ParameterProps) {\n this.name = name;\n this.value = props.value;\n this.description = props.description;\n this.defaultValue = props.default_value;\n\n switch (props.type) {\n case 'text':\n this.type = Type.TEXT;\n break;\n case 'number':\n this.type = Type.NUMBER;\n break;\n case 'boolean':\n this.type = Type.BOOLEAN;\n break;\n case 'select':\n this.type = Type.SELECT;\n break;\n default:\n this.type = Type.TEXT;\n break;\n }\n\n const validationOpts = parseValidationOptions(props.validation_options);\n\n this.max = asInt(validationOpts.max ?? 0);\n this.min = asInt(validationOpts.min ?? 0);\n this.options = validationOpts.oneof ?? [];\n }\n\n public validate(value: string): boolean {\n return true;\n }\n}\n","import {\n Modal,\n Form,\n Row,\n Col,\n Input,\n Select,\n Divider,\n Tag,\n FormInstance,\n Spin,\n Button,\n Popover,\n Alert,\n} from 'antd';\nimport styles from './DbParametersModal.module.less';\nimport AppTable from '../AppTable';\nimport { useAppSelector } from '../../redux/hooks';\nimport {\n getDatabaseConfigurationOptions,\n getDatabaseVendorOptions,\n getDatabaseVersionOptions,\n} from '../../core/helpers';\nimport { useEffect, useState } from 'react';\nimport DbParameterGroupService from '../../services/DbParameterGroupService';\nimport { DBParameterDefaults } from '../../types/DBparameterDefaults';\nimport { DbParameterGroup } from '../../types/DbParameterGroup';\nimport UpdateDbParametersPopover from './UpdateDbParametersPopover';\nimport AppLoading from '../AppLoading';\nimport InfoIcon from '@severalnines/bar-frontend-components/build/lib/General/InfoIcon';\nimport { Type } from '../../types/DbParameter';\nimport usePiwikPro from '../../core/hooks/usePiwikPro';\nimport {\n CLICK_EVENT,\n DATASTORE_ADDED_NEW_DB_PARAMETERS,\n DATASTORE_FAILED_TO_ADD_DB_PARAMETERS,\n} from '../../core/PiwikConstants';\n\ninterface DbParameterFormType {\n [x: string]: any;\n parameter: string;\n currentValue: string;\n datastores: string[];\n description?: string;\n}\n\ninterface DbParametersModalProps {\n visible: boolean;\n onSubmit: (formData: any) => Promise;\n setVisible: (visible: boolean) => void;\n handleCancel: () => void;\n operation: 'create' | 'edit';\n record?: Partial;\n form: FormInstance;\n disableFields: boolean;\n tableForm: FormInstance;\n}\n\ninterface OptionType {\n value: string;\n label: string;\n}\n\nconst DbParametersModal: React.FC = ({\n visible,\n onSubmit,\n operation,\n setVisible,\n record,\n handleCancel,\n form,\n disableFields,\n tableForm,\n}) => {\n const { deploymentOptions } = useAppSelector(\n (state) => state.deploymentOptions\n );\n const { trackEvent } = usePiwikPro();\n\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [dbVendor, setDbVendor] = useState();\n const [dbVersion, setDbVersion] = useState();\n const [dbVersionOptions, setDbVersionOptions] = useState([]);\n const [filteredTableData, setFilteredTableData] = useState<\n DbParameterFormType[]\n >([]);\n const [dbConfigurationOptions, setDbConfigurationOptions] = useState<\n OptionType[]\n >([]);\n const [dbConfiguration, setDbConfiguration] = useState();\n const [tableData, setTableData] = useState([]);\n const [datastoreList, setDatastoreList] = useState([]);\n const [isLoading, setIsLoading] = useState(false);\n const [search, setSearch] = useState('');\n const databaseVendorOptions = getDatabaseVendorOptions(\n deploymentOptions?.getDatabaseVendors() || []\n );\n\n const handleDBVendorChange = async (value: string) => {\n const selectedDbVendor =\n deploymentOptions?.getDatabaseVendorByCode(value);\n setDbVendor(value);\n setDbVersion(undefined);\n setDbConfiguration(undefined);\n form.setFieldsValue({\n version: undefined,\n configuration: undefined,\n });\n\n if (selectedDbVendor?.name) {\n processDbVendorOptions(selectedDbVendor.name);\n processDbConfigurationsOptions(selectedDbVendor.name);\n }\n getDBParameters(value);\n };\n\n const processDbVendorOptions = (vendorName: string | undefined) => {\n if (vendorName) {\n const dbVersions = getDatabaseVersionOptions(\n deploymentOptions?.getDatabaseVendors(),\n vendorName\n );\n setDbVersionOptions(dbVersions);\n if (!record) {\n setDbVersion(dbVersions[0]);\n form.setFieldValue('version', dbVersions[0].value);\n }\n }\n };\n\n const processDbConfigurationsOptions = (vendorName: string | undefined) => {\n if (vendorName) {\n const dbConfigurations = getDatabaseConfigurationOptions(\n deploymentOptions?.getDatabaseVendors(),\n vendorName\n );\n setDbConfigurationOptions(dbConfigurations);\n }\n };\n\n const getDBParameters = async (value: string) => {\n setIsLoading(true);\n try {\n const dbParametersDefaults: DBParameterDefaults =\n await DbParameterGroupService.getDefaultDbParameterGroup(value);\n const dbParameters: any[] = [];\n for (const [key, value] of Object.entries(\n dbParametersDefaults.getAllParameters()\n )) {\n dbParameters.push({\n parameter: key,\n currentValue: value.value,\n defaultValue: value.default_value,\n description: value.description,\n type: value.type,\n min: value.min,\n max: value.max,\n });\n }\n setTableData(dbParameters);\n } catch (error) {\n console.error(error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const processDbParametersForTable = (dbparameters: any) => {\n if (!dbparameters) return;\n const dbParametersForm: any[] = [];\n for (const [key] of Object.entries(dbparameters)) {\n dbParametersForm.push({\n parameter: key,\n currentValue: dbparameters[key].currentValue,\n defaultValue: dbparameters[key].defaultValue,\n description: dbparameters[key].description,\n type: dbparameters[key].type,\n min: dbparameters[key].min,\n max: dbparameters[key].max,\n });\n }\n setTableData(dbParametersForm);\n };\n\n useEffect(() => {\n if (dbVersionOptions?.length === 1) {\n form.setFieldValue('version', dbVersionOptions[0].value);\n setDbVersion(dbVersionOptions[0]);\n }\n if (dbConfigurationOptions?.length === 1) {\n form.setFieldValue(\n 'configuration',\n dbConfigurationOptions[0].value\n );\n setDbConfiguration(dbConfigurationOptions[0]);\n }\n }, [dbVersionOptions, dbConfigurationOptions, form]);\n\n useEffect(() => {\n if (record) {\n processDbVendorOptions(record?.databaseVendor);\n processDbConfigurationsOptions(record?.databaseVendor);\n processDbParametersForTable(record.dbParameters);\n const fieldsToSet = {\n groupName: record.name,\n description: record.description,\n vendor: record.databaseVendor,\n version: record.databaseVersion,\n configuration: record.databaseType,\n };\n\n form.setFieldsValue(fieldsToSet);\n if (record.dbParameters) {\n form.setFieldsValue(record.dbParameters);\n }\n setDatastoreList(record.dataStores || []);\n setDbVendor(record.databaseVendor);\n }\n }, [record, form, visible]);\n\n const handleOk = async () => {\n try {\n setIsSubmitting(true);\n const [formValues, tableValues] = await Promise.all([\n form.validateFields(),\n tableForm.validateFields(),\n ]);\n\n const updatedTableData = updateTableDataWithFormValues(tableValues);\n\n const submitData = {\n name: formValues.groupName,\n description: formValues.description,\n databaseVendor: formValues.vendor,\n databaseVersion: formValues.version,\n dataStores: datastoreList,\n configuration: formValues.configuration,\n dbParameters: updatedTableData,\n };\n await onSubmit(submitData);\n trackEvent(CLICK_EVENT, DATASTORE_ADDED_NEW_DB_PARAMETERS);\n } catch (error) {\n trackEvent(CLICK_EVENT, DATASTORE_FAILED_TO_ADD_DB_PARAMETERS);\n console.error('Form validation or submission failed:', error);\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const updateTableDataWithFormValues = (\n formTableValues: Record\n ) => {\n const updatedTableData = tableData.map((item) => {\n const updatedValues = formTableValues[item.parameter];\n const filteredItem = filteredTableData.find(\n (filtered) => filtered.parameter === item.parameter\n );\n\n if ((filteredItem && updatedValues) || updatedValues) {\n return {\n ...item,\n currentValue: updatedValues,\n isActive: updatedValues.isActive,\n };\n }\n return item;\n });\n return updatedTableData.reduce((acc, item) => {\n acc[item.parameter] = item.currentValue;\n return acc;\n }, {} as Record);\n };\n\n const handleSearch = (e: React.ChangeEvent) => {\n const searchValue = e.target.value.toLowerCase();\n const filtered = tableData.filter((item) =>\n item.parameter.toLowerCase().includes(searchValue)\n );\n setFilteredTableData(filtered);\n setSearch(searchValue);\n };\n\n const getFormattedValues = (value: any, isDefault: boolean) => {\n const formattedValue = value\n .split(',')\n .reduce((result: any, item: any, index: number) => {\n const commaCount = result.split(',').length - 1;\n if (result === '' && isDefault) {\n return `Default: ${item}`;\n } else if (result === '' && !isDefault) {\n return `${item}`;\n } else if (commaCount % 2 === 1) {\n return `${result},\\n${item}`;\n } else {\n return `${result},${item}`;\n }\n }, '');\n\n return formattedValue;\n };\n\n const getMinMaxDefaultValues = (record: any) => {\n return (\n
\n {record?.type === Type.NUMBER && (\n <>\n {`Max: ${record?.max} | `}\n {`Min: ${record?.min} | `}\n \n )}\n {record?.defaultValue && (\n \n {getFormattedValues(record?.defaultValue, true)}\n \n )}\n
\n );\n };\n\n const columns = [\n {\n title: 'Parameter',\n dataIndex: 'parameter',\n width: 400,\n render: (text: string, record: any) => {\n return (\n record && (\n
\n \n \n {record.parameter}{' '}\n \n {record.description}}\n />\n \n
\n {getMinMaxDefaultValues(record)}\n
\n )\n );\n },\n },\n {\n title: 'Current Value',\n dataIndex: 'currentValue',\n width: 500,\n render: (text: string, record: DbParameterFormType) => (\n \n \n \n ),\n },\n ];\n\n return (\n \n \n {operation === 'create' && (\n \n )}\n {operation === 'edit' && (\n \n )}\n \n }\n onCancel={() => setVisible(false)}\n width={1100}\n confirmLoading={isSubmitting}\n maskClosable={!isSubmitting}\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Associated data stores\n \n {datastoreList?.length === 0 ? (\n \n \n \n ) : (\n datastoreList?.map(\n (dataStore: any, index: number) => (\n \n \n {dataStore.name}\n \n \n )\n )\n )}\n \n \n \n \n \n
\n \n \n \n \n \n \n \n
\n
\n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n \n );\n};\n\nexport default DbParametersModal;\n","import React, { useEffect, useState } from 'react';\nimport { Button, Form, notification } from 'antd';\nimport { EditOutlined } from '@ant-design/icons';\nimport DbParametersModal from './DbParametersModal';\nimport styles from './EditDbParametersModal.module.less';\nimport DbParameterGroupService from '../../services/DbParameterGroupService';\nimport CcxIconCheckCircleTwoTone from '../ccx/icons/CcxIconCheckCircleTwoTone';\nimport CcxIconCloseCircleTwoTone from '../ccx/icons/CcxIconCloseCircleTwoTone';\nimport { wrapDbParameterValues } from '../../core/helpers';\ninterface EditDBParametersModalProps {\n record: any;\n refresh?: () => void;\n isEditVisible: boolean;\n setIsEditVisible: (value: boolean) => void;\n setIsLoading: React.Dispatch>;\n}\n\nconst EditDBParametersModal = ({\n record,\n refresh,\n setIsLoading,\n isEditVisible,\n setIsEditVisible,\n}: EditDBParametersModalProps) => {\n const [visible, setVisible] = useState(false);\n const [editRecord, setEditRecord] = useState(record);\n const [form] = Form.useForm();\n const [tableForm] = Form.useForm();\n\n useEffect(() => {\n if (isEditVisible) {\n setIsLoading(true);\n handleOpenDbParametersModal();\n }\n }, [isEditVisible, record]);\n\n useEffect(() => {\n if (!visible) {\n setIsEditVisible(false);\n }\n }, [visible]);\n\n const handleOpenDbParametersModal = async () => {\n const defaultParameters =\n await DbParameterGroupService.getDefaultDbParameterGroup(\n record.databaseVendor\n );\n const mappedParameters = wrapDbParameterValues(\n record.dbParameters,\n defaultParameters.getAllParameters()\n );\n\n setEditRecord({\n ...record,\n dbParameters: mappedParameters,\n });\n setVisible(isEditVisible);\n setIsLoading(false);\n };\n\n const onSubmit = async (formData: any) => {\n const data: any = {\n name: formData.name,\n database_vendor: formData.databaseVendor,\n database_version: formData.databaseVersion,\n database_type: formData.configuration,\n description: formData.description,\n parameters: formData.dbParameters,\n data_stores: formData.dataStores,\n };\n try {\n await DbParameterGroupService.updateDbParameterGroup(\n record.uuid,\n data\n );\n notification.open({\n message: 'DB Parameter Group Updated',\n description:\n 'Database parameter group has been updated successfully.',\n icon: ,\n });\n if (refresh) {\n refresh();\n }\n setIsEditVisible(false);\n form.resetFields();\n tableForm.resetFields();\n } catch (error: any) {\n const errorMessage =\n error instanceof Error || error.message\n ? error.message\n : String(error);\n validateFields(errorMessage, error);\n\n notification.open({\n message: 'Failed to Update DB Parameter Group',\n description: `An error occurred while updating the database parameter group: ${errorMessage}`,\n icon: ,\n });\n console.error(error);\n }\n };\n\n const validateFields = (errorMessage: string, error: any) => {\n const isNameUnique = errorMessage.includes(\n form.getFieldValue('groupName')\n );\n\n if (isNameUnique) {\n form.setFields([\n {\n name: 'groupName',\n errors: ['Parameter group with this name already exists'],\n },\n ]);\n }\n\n if (error?.errorFields?.length > 0) {\n error.errorFields.forEach(\n (field: { name: string; description: string }) => {\n tableForm.setFields([\n {\n name: field.name,\n errors: ['Enter valid parameters'],\n },\n ]);\n }\n );\n }\n };\n\n const handleCancel = () => {\n setVisible(false);\n };\n\n return (\n <>\n }\n onClick={handleOpenDbParametersModal}\n >\n Edit\n \n \n \n );\n};\n\nexport default EditDBParametersModal;\n","import { Dropdown, Button, Menu, notification, Tooltip } from 'antd';\nimport CcxContextualMenuIcon from '../ccx/icons/CcxContextualMenuIcon';\nimport DeleteDbParametersPopover from './DeleteDbParametersPopover';\nimport EditDBParametersModal from './EditDBParametersModal';\nimport styles from './DbParametersActionsLists.module.less';\nimport { useState } from 'react';\nimport DbParameterGroupService from '../../services/DbParameterGroupService';\nimport CcxIconCheckCircleTwoTone from '../ccx/icons/CcxIconCheckCircleTwoTone';\nimport CcxIconCloseCircleTwoTone from '../ccx/icons/CcxIconCloseCircleTwoTone';\nimport { CopyOutlined } from '@ant-design/icons';\nimport { useRBAC } from '../../core/hooks/useRBAC';\nimport {\n CAN_DELETE_DB_PARAMS,\n CAN_MODIFY_DB_PARAMS,\n} from '../../core/PermissionRoles';\nimport Can from '../../core/providers/Can';\nimport { DeniedOutlined } from '@severalnines/frontend_hub/libs/icons';\n\ninterface DbParametersActionsListsProps {\n record: any;\n refresh: () => void | Promise;\n}\n\nconst DbParametersActionsLists = ({\n record,\n refresh,\n}: DbParametersActionsListsProps) => {\n const { hasPermission } = useRBAC();\n const [isEditVisible, setIsEditVisible] = useState(false);\n const [isDeleteable, setIsDeleteable] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n\n const handleEditDbParameters = () => {\n setIsEditVisible(true);\n };\n\n const onSubmit = async () => {\n setIsLoading(true);\n const data = {\n name: `${record.name}_COPY`,\n database_vendor: record.databaseVendor,\n database_version: record.databaseVersion,\n database_type: record.databaseType,\n description: record.description,\n parameters: record.dbParameters,\n };\n\n try {\n await DbParameterGroupService.createDbParameterGroup(data);\n notification.open({\n message: 'DB Parameter Group Duplicated',\n description:\n 'Database parameter group has been duplicated successfully.',\n icon: ,\n });\n } catch (error) {\n notification.open({\n message: 'Failed to Create DB Parameter Group',\n description: `An error occurred while creating the database parameter group: ${error}`,\n icon: ,\n });\n console.error(error);\n } finally {\n refresh();\n setIsLoading(false);\n }\n };\n\n const menu = (\n \n \n handleEditDbParameters()}\n >\n \n \n \n \n onSubmit()}\n >\n }\n >\n Duplicate\n \n \n \n \n {\n if (record?.dataStores?.length === 0)\n setIsDeleteable(true);\n }}\n >\n \n \n {' '}\n \n );\n\n return hasPermission(CAN_MODIFY_DB_PARAMS) ||\n hasPermission(CAN_DELETE_DB_PARAMS) ? (\n \n \n \n \n );\n}\n\nexport default CreateDbParameters;\n","import { useCallback, useEffect, useState } from 'react';\nimport DbParameterGroupService from '../../services/DbParameterGroupService';\n\nconst useDbParametersGroup = () => {\n const [dbParameters, setDbParameters] = useState();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n\n const fetchDbParameters = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const response =\n await DbParameterGroupService.getDbParameterGroups();\n setDbParameters(response);\n } catch (err) {\n setError('Failed to fetch DB parameters');\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchDbParameters();\n }, [fetchDbParameters]);\n\n return { dbParameters, loading, error, refresh: fetchDbParameters };\n};\n\nexport default useDbParametersGroup;\n","import { Button, Col, Row, Tooltip } from 'antd';\nimport AppTable from '../AppTable';\nimport DbParametersActionsLists from './DbParametersActionsLists';\nimport styles from './DbParametersTable.module.less';\nimport CreateDbParameters from './CreateDbParameters';\nimport useDbParametersGroup from '../../core/hooks/useDbParametersGroup';\nimport AppLoading from '../AppLoading';\nimport { useEffect, useMemo, useState } from 'react';\nimport DbParameterGroupService from '../../services/DbParameterGroupService';\nimport { DbParametersGroup } from '../../types/DbParametersGroup';\nimport { DbParameterGroup } from '../../types/DbParameterGroup';\nimport { RootState } from '../../redux/store';\nimport { useAppSelector } from '../../redux/hooks';\nimport {\n CAN_ADD_DB_PARAMS,\n CAN_MODIFY_DB_PARAMS,\n} from '../../core/PermissionRoles';\nimport Can from '../../core/providers/Can';\nimport { replaceIfRedis } from '../../core/helpers';\n\ninterface TableColumn {\n title: string;\n dataIndex?: string;\n key: string;\n align?: 'left' | 'right' | 'center';\n render?: (text: string, record: DbParameterGroup) => React.ReactNode;\n}\n\ninterface PaginationProps {\n page: number;\n perPage: number;\n total: number;\n}\n\nconst DbParametersTable = () => {\n const {\n dbParameters: dbParametersGroup,\n loading: loadingGroup,\n error: errorGroup,\n refresh,\n } = useDbParametersGroup();\n\n const [pagination, setPagination] = useState();\n const [tableData, setTableData] = useState([]);\n const [isLoading, setIsLoading] = useState(false);\n const { deploymentOptions } = useAppSelector(\n (state: RootState) => state.deploymentOptions\n );\n\n useEffect(() => {\n if (dbParametersGroup) {\n setPagination({\n page: dbParametersGroup.pagination.currentPage,\n perPage: dbParametersGroup.pagination.pageSize,\n total: dbParametersGroup.pagination.totalRecords,\n });\n\n if (deploymentOptions) {\n setTableData(dbParametersGroup.parameterGroups);\n }\n }\n }, [dbParametersGroup, deploymentOptions]);\n\n useEffect(() => {\n setIsLoading(loadingGroup);\n }, [loadingGroup]);\n\n const onChangePage = async (nextPage: any) => {\n setIsLoading(true);\n setPagination({\n ...pagination,\n page: nextPage.current,\n perPage: nextPage.pageSize,\n total: nextPage.total,\n });\n\n try {\n const update: DbParametersGroup =\n await DbParameterGroupService.getDbParameterGroups(\n nextPage?.perPage,\n nextPage.current\n );\n\n setTableData(update.parameterGroups);\n } catch (e) {\n console.error(e);\n } finally {\n setIsLoading(false);\n }\n };\n\n const tableColumns: TableColumn[] = useMemo(\n () => [\n {\n title: 'Group Name',\n dataIndex: 'name',\n key: 'name',\n },\n {\n title: 'Vendor and Version',\n key: 'vendorVersion',\n render: (_, record) => (\n
\n {replaceIfRedis(record.databaseVendor)}{' '}\n {record.databaseVersion}\n
\n ),\n },\n {\n title: 'Datastores',\n dataIndex: 'dataStores',\n key: 'dataStores',\n render: (_, record) => (\n
\n {record?.dataStores?.map(\n (datastore: any, index: number) => (\n \n {index > 0 && ', '}\n {datastore.name}\n \n )\n )}\n
\n ),\n },\n {\n title: 'Descriptions',\n dataIndex: 'description',\n key: 'description',\n },\n {\n title: 'Actions',\n key: 'actions',\n align: 'right',\n render: (_, record) => (\n \n \n \n ),\n },\n ],\n []\n );\n\n return (\n
\n \n \n DB parameter groups\n \n \n \n \n \n \n {' '}\n \n \n \n \n {isLoading ? (\n \n ) : (\n \n )}\n
\n );\n};\n\nexport default DbParametersTable;\n","export type InviteClassProps = {\n created_at: string;\n declined_at: string;\n accepted_at: string;\n expires_at: string;\n from_user: {\n email: string;\n id: string;\n first_name: string;\n last_name: string;\n };\n to_user: {\n email: string;\n id: string;\n first_name: string;\n last_name: string;\n };\n organization: {\n id: string;\n name: string;\n };\n id: string;\n role: Role;\n};\n\ninterface InviteUserDetails {\n email: string;\n id: string;\n firstName: string;\n lastName: string;\n}\n\ninterface InviteOrganizationDetails {\n id: string;\n name: string;\n}\n\nenum Role {\n read = 'read',\n write = 'write',\n admin = 'admin',\n}\n\nexport interface InviteInterface {\n createdAt: string;\n expiresAt: string;\n declinedAt: string;\n acceptedAt: string;\n fromUser: InviteUserDetails;\n toUser: InviteUserDetails;\n organization: InviteOrganizationDetails;\n role: Role;\n id: string;\n}\n\nexport default class Invite implements InviteInterface {\n readonly createdAt: string;\n readonly declinedAt: string;\n readonly acceptedAt: string;\n readonly expiresAt: string;\n readonly fromUser: InviteUserDetails;\n readonly toUser: InviteUserDetails;\n readonly organization: InviteOrganizationDetails;\n readonly id: string;\n readonly role: Role;\n\n constructor(props: InviteClassProps) {\n this.createdAt = props.created_at;\n this.declinedAt = props.declined_at;\n this.acceptedAt = props.accepted_at;\n this.expiresAt = props.expires_at;\n this.fromUser = {\n email: props.from_user.email,\n id: props.from_user.id,\n firstName: props.from_user.first_name,\n lastName: props.from_user.last_name,\n };\n this.toUser = {\n email: props.to_user.email,\n id: props.to_user.id,\n firstName: props.to_user.first_name,\n lastName: props.to_user.last_name,\n };\n this.organization = {\n id: props.organization.id,\n name: props.organization.name,\n };\n this.id = props.id;\n this.role = props.role;\n }\n}\n","import moment from 'moment';\nimport Invite, { InviteClassProps } from './Invite';\n\nexport type InvitesClassProps = {\n invites: Invite[];\n total: number;\n};\n\nexport interface InvitesInterface {\n invites: Invite[];\n total: number;\n}\n\nexport default class Invites implements InvitesInterface {\n readonly invites: Invite[];\n readonly total: number;\n\n constructor(props: InvitesClassProps) {\n this.invites = props.invites.map((invite: any) => {\n return new Invite(invite);\n });\n this.total = props.total;\n }\n\n getAllPendingInvites = () => {\n return this.invites.filter((invite: Invite) => {\n if (\n !invite.acceptedAt &&\n !invite.declinedAt &&\n moment(invite.expiresAt) > moment()\n ) {\n return invite;\n }\n });\n };\n\n getFirstPendingInvites = () => {\n return this.invites.filter((invite: Invite) => {\n if (\n !invite.acceptedAt &&\n !invite.declinedAt &&\n moment(invite.expiresAt) > moment()\n ) {\n return invite;\n }\n })[0];\n };\n\n // getAllPendingInvites = () => {\n // return this.invites.filter((invite: Invite) => {\n // if (invite.declinedAt || moment(invite.expiresAt) > moment()) {\n // return invite;\n // }\n // });\n // };\n}\n","import ApiService from './ApiService';\nimport { API_AUTH, ORGANIZATIONS, INVITES } from '../core/CcxEnv';\nimport Invites from '../types/Invites';\n\n// constants\nconst API_URL = API_AUTH;\n\nexport default class InviteMemberService extends ApiService {\n /**\n * Get list of all invites for a given organization.\n * @param {string} uuid\n */\n static async getAllInvites(): Promise {\n const response = await this.request('GET', INVITES);\n return new Invites(response);\n }\n\n /**\n * Get list of all invites for a given organization.\n * @param {string} uuid\n */\n static async getOrgInvites(orgId: string): Promise {\n try {\n const response = await this.request(\n 'GET',\n `${ORGANIZATIONS}/${orgId}/${INVITES}`\n );\n return new Invites(response);\n } catch (e) {\n console.error(e);\n }\n }\n\n static async inviteNewMember(\n member: {\n email: string;\n role: string;\n },\n orgId: string\n ): Promise {\n const requestData = {\n data: {\n ...member,\n },\n };\n try {\n const response = await this.request(\n 'POST',\n `${ORGANIZATIONS}/${orgId}/${INVITES}`,\n requestData\n );\n return response;\n } catch (e) {\n console.error(e);\n }\n }\n\n static async acceptInvite(id: string): Promise {\n const response = await this.request('POST', `${INVITES}/${id}/accept`);\n return response;\n }\n\n static async declineInvite(id: string): Promise {\n const response = await this.request('POST', `${INVITES}/${id}/decline`);\n return response;\n }\n\n static async deleteInvite(orgId: string, inviteId: string): Promise {\n const response = await this.request(\n 'DELETE',\n `${ORGANIZATIONS}/${orgId}/${INVITES}/${inviteId}`\n );\n return response;\n }\n\n protected static getApiUrl() {\n return API_URL;\n }\n}\n","import { createSlice } from '@reduxjs/toolkit';\nimport { AddDeploymentV2Props } from '../services/ProvisionService';\n\ninterface RestoreDataStoreType {\n restoreDatastore: AddDeploymentV2Props | undefined;\n isBackupRestore: boolean;\n}\nconst initialState: RestoreDataStoreType = {\n restoreDatastore: undefined,\n isBackupRestore: false,\n};\n\nexport const restoreDatastoreSlice = createSlice({\n name: 'datastore',\n initialState,\n reducers: {\n restoreDatastoreFromBackup: (state, action) => {\n state.isBackupRestore = true;\n state.restoreDatastore = action.payload;\n },\n setInitialState: (state) => {\n state.isBackupRestore = false;\n state.restoreDatastore = undefined;\n },\n },\n});\n\nexport const { restoreDatastoreFromBackup, setInitialState } =\n restoreDatastoreSlice.actions;\nexport default restoreDatastoreSlice.reducer;\n","import { ReactElement, Suspense, useEffect, useState } from 'react';\nimport {\n Alert,\n Badge,\n Button,\n Col,\n message,\n Popover,\n Row,\n Tabs,\n Tooltip,\n} from 'antd';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport styles from './Projects.module.less';\nimport { Link, useHistory, useParams } from 'react-router-dom';\nimport LazyLoader from '../LazyLoader';\nimport DataStores from './dataStores/DataStores';\nimport Vpcs from './vpcs/Vpcs';\nimport CreateVpcButton from '../vpc/CreateVpcButton';\nimport { vpcDisabled } from '../../core/CcxEnv';\nimport { userReachedDatastoreLimit } from '../layout/AppCreateButton';\nimport { useAppDispatch, useAppSelector } from '../../redux/hooks';\nimport useCmonStatus from '../../core/hooks/useCmonStatus';\nimport DatastoreFilterPopover, {\n OptionsInterface,\n} from './DatastoreFilterPopover';\nimport { FilterOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport { clearIntervals } from '../../slices/jobs.slice';\nimport Deployment from '../../types/Deployment';\nimport DbParametersTable from '../dbParameters/DbParametersTable';\nimport usePiwikPro from '../../core/hooks/usePiwikPro';\nimport { LANDING_PAGE } from '../../core/PiwikConstants';\nimport useInvites from '../../core/hooks/useInvites';\nimport { InviteInterface } from '../../types/Invite';\nimport InviteMemberService from '../../services/InvitesService';\nimport { CAN_ADD_DATABASE, CAN_ADD_VPC } from '../../core/PermissionRoles';\nimport { userCheck } from '../../slices/user.slice';\nimport Can from '../../core/providers/Can';\nimport { setInitialState } from '../../slices/restore.slice';\n\ninterface UrlProps {\n projectUuid: string;\n activeTab: string;\n}\n\ninterface Props extends CcxComponentProps {}\n\ninterface FilterOptionsInterface {\n datastoreTypes: OptionsInterface[];\n tagsList: OptionsInterface[];\n}\n\nexport interface SelectedFilterOptionsInterface {\n dbVendors: string[];\n tags: string[];\n}\n\nfunction Projects({ testId = 'Projects' }: Props): ReactElement {\n const history = useHistory();\n const { projectUuid, activeTab } = useParams();\n const { refresh, invites } = useInvites();\n const [openPopover, setOpenPopover] = useState(false);\n const [filterOptions, setFilterOptions] = useState({\n datastoreTypes: [],\n tagsList: [],\n });\n\n const [selectedFilterOptions, setSelectedFilterOptions] =\n useState({\n dbVendors: [],\n tags: [],\n });\n\n const [filterCount, setFilterCount] = useState(0);\n\n const { datastores } = useAppSelector((state) => state.datastores);\n const { user } = useAppSelector((state) => state.user);\n const { status } = useCmonStatus();\n const dispatch = useAppDispatch();\n const { trackPageView } = usePiwikPro();\n\n useEffect(() => {\n trackPageView(LANDING_PAGE);\n }, []);\n\n useEffect(() => {\n dispatch(setInitialState());\n }, []);\n\n const limitReached = userReachedDatastoreLimit(datastores, user);\n useEffect(() => {\n if (datastores) {\n datastores.map((datastore: Deployment) =>\n dispatch(\n clearIntervals({ dataStoreUuid: datastore.dataStoreUuid })\n )\n );\n }\n }, [datastores, dispatch]);\n\n useEffect(() => {\n if (datastores)\n setFilterOptions({\n tagsList: datastores.getTagsForFiltering(),\n datastoreTypes: datastores.getVendorsForFiltering(),\n });\n }, [datastores]);\n\n const onChangeDatastoreCheckbox = (value: string[]) => {\n setSelectedFilterOptions({\n ...selectedFilterOptions,\n dbVendors: value,\n });\n setFilterCount(value.length + selectedFilterOptions.tags.length);\n };\n\n const onChangeDatastoreTags = (value: string[]) => {\n setSelectedFilterOptions({\n ...selectedFilterOptions,\n tags: value,\n });\n setFilterCount(value.length + selectedFilterOptions.dbVendors.length);\n };\n\n const openFilter = () => {\n setOpenPopover(!openPopover);\n };\n\n const acceptInvite = async (invite: InviteInterface) => {\n try {\n await InviteMemberService.acceptInvite(invite.id);\n message.success('Invite accepted successfully');\n refresh();\n dispatch(userCheck());\n } catch (e: any) {\n console.error(e);\n }\n };\n\n const declineInvite = async (invite: InviteInterface) => {\n try {\n await InviteMemberService.declineInvite(invite.id);\n message.success('Invite declined successfully');\n refresh();\n } catch (e: any) {\n console.error(e);\n }\n };\n\n const operations =\n activeTab === 'data-stores' ? (\n <>\n \n }\n title={Filters}\n trigger=\"click\"\n onOpenChange={() => openFilter()}\n open={openPopover}\n overlayInnerStyle={{\n borderRadius: 16,\n }}\n overlayStyle={{\n width: '250px',\n }}\n >\n \n \n \n \n \n \n \n \n {' '}\n {'+'}\n \n Create{' '}\n {activeTab === 'data-stores'\n ? 'datastore'\n : 'VPC'}\n \n \n \n \n \n \n ) : activeTab === 'vpcs' ? (\n \n \n \n ) : null;\n\n return (\n
\n {status && !status.isFunctional() && (\n \n Attention: Our system is currently undergoing\n maintenance to enhance your experience. We\n appreciate your patience as we work to restore full\n functionality.\n \n }\n />\n )}\n {invites && invites.invites.length > 0 && (\n \n \n \n declineInvite(\n invites.getFirstPendingInvites()\n )\n }\n >\n Decline{' '}\n \n \n \n \n acceptInvite(\n invites.getFirstPendingInvites()\n )\n }\n >\n Accept\n \n \n \n }\n message={`Pending Invitation ${\n invites.total - 1 > 0 ? `(+${invites.total - 1})` : ''\n }`}\n description={\n
\n You have been invited to join{' '}\n \n {\n invites.getFirstPendingInvites()\n .organization.name\n }\n .\n \n
\n }\n />\n )}\n\n {\n history.push(`/projects/${projectUuid}/${tabKey}`);\n }}\n >\n \n }>\n \n \n \n\n {!vpcDisabled && (\n \n }>\n \n \n \n )}\n\n \n }>\n \n \n \n \n
\n );\n}\n\nexport default Projects;\n","import { useEffect, useState } from 'react';\nimport InvitesMemberService from '../../services/InvitesService';\nimport Invites from '../../types/Invites';\n\nexport default function useInvites() {\n const [loading, setLoading] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [invites, setInvites] = useState();\n\n const load = async () => {\n try {\n const response = await InvitesMemberService.getAllInvites();\n setInvites(response);\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, []);\n\n return { invites, refresh, loading, updating, error };\n}\n","export type FirewallRulePortPropClassProps = {\n port: string;\n port_no: number;\n};\n\nexport interface FirewallRulePortInterface {\n port: string;\n portNo: number;\n}\n\nexport default class FirewallRulePort implements FirewallRulePortInterface {\n readonly port: string;\n readonly portNo: number;\n\n constructor(props: FirewallRulePortPropClassProps) {\n this.port = props.port;\n this.portNo = props.port_no;\n }\n}\n","import FirewallRulePort from './FirewallRulePort';\nimport FirewallRulePortPropClassProps from './FirewallRulePort';\n\nexport type FirewallRuleClassProps = {\n description: string;\n source: string;\n ports: FirewallRulePortPropClassProps[];\n};\n\nexport interface FirewallRuleInterface {\n description: string;\n source: string;\n ports: FirewallRulePortPropClassProps[];\n}\n\nexport default class FirewallRule implements FirewallRuleInterface {\n readonly description: string;\n readonly ports: FirewallRulePort[];\n readonly source: string;\n\n constructor(props: FirewallRuleClassProps) {\n this.description = props.description;\n this.ports = props.ports.map((p: any) => new FirewallRulePort(p));\n this.source = props.source;\n }\n}\n","import ApiService from './ApiService';\nimport FirewallRule from '../types/FirewallRule';\nimport { API_FIREWALL } from '../core/CcxEnv';\n\n// constants\nconst API_URL = API_FIREWALL;\n\nexport type AddRuleProps = {\n uuid: string;\n source: string;\n description?: string;\n};\n\nexport type DeleteRuleProps = {\n rule: any;\n uuid: string;\n};\n\ntype DeleteAllRulesInterface = {\n source: string;\n description: string;\n};\n\nexport type DeleteAllRulesProps = {\n rule: DeleteAllRulesInterface;\n uuid: string;\n};\n\nexport default class FirewallService extends ApiService {\n /**\n * Get list of all firewall rules.\n * @param {string} uuid\n */\n static async getAllRules(uuid: string): Promise {\n const response = await this.request('GET', `firewalls/${uuid}`);\n return response.map((r: any) => new FirewallRule(r));\n }\n\n /**\n * Add a Firewall rule\n * @param {AddRuleProps} props\n */\n static async addRule({\n uuid,\n source,\n description,\n }: AddRuleProps): Promise {\n const postData = {\n data: {\n source,\n description,\n },\n };\n return await this.request('POST', `firewall/${uuid}`, postData);\n }\n\n /**\n * Delete a Firewall rule\n * @param {FirewallRule} rule\n * @param {string} uuid\n */\n static async deleteRule({ rule, uuid }: DeleteRuleProps): Promise {\n const requestData = {\n data: {\n description: rule?.description,\n port: rule?.port,\n source: rule?.source,\n },\n };\n return await this.request('DELETE', `firewall/${uuid}`, requestData);\n }\n\n static async deleteAllRule({\n rule,\n uuid,\n }: DeleteAllRulesProps): Promise {\n const requestData = {\n data: {\n description: rule?.description,\n source: rule?.source,\n },\n };\n return await this.request('DELETE', `firewall/${uuid}`, requestData);\n }\n\n protected static getApiUrl() {\n return API_URL;\n }\n}\n","import { useEffect, useState } from 'react';\nimport Deployment from '../../types/Deployment';\nimport FirewallService from '../../services/FirewallService';\n\nexport default function useFirewalls(uuid: string | undefined) {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n const [firewalls, setFirewalls] = useState(\n undefined\n );\n\n const load = async () => {\n if (uuid) {\n setLoading(true);\n\n try {\n const details = await FirewallService.getAllRules(uuid);\n setFirewalls(details);\n setLoading(false);\n setError(null);\n } catch (e: any) {\n setLoading(false);\n setError(e);\n }\n\n setLoading(false);\n }\n };\n\n const refresh = () => {\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n refresh();\n }, [uuid]);\n\n return { firewalls, refresh, loading, error };\n}\n","import { DeleteOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport React from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {}\n\nconst CcxIconDeleteOutlined = ({ testId = 'CcxIconDeleteOutlined' }: Props) => {\n return ;\n};\n\nexport default CcxIconDeleteOutlined;\n","import { Modal, TableColumnsType, notification } from 'antd';\nimport AppTable from '../AppTable';\nimport CcxIconInfoCircleTwoTone from '../ccx/icons/CcxIconInfoCircleTwoTone';\nimport FirewallService from '../../services/FirewallService';\nimport CcxIconCheckCircle from '../ccx/icons/CcxIconCheckCircle';\nimport CcxIconCloseCircleTwoTone from '../ccx/icons/CcxIconCloseCircleTwoTone';\nimport AppConfirmDialog from '../AppConfirmDialog';\nimport CcxIconDeleteOutlined from '../ccx/icons/CcxIconDeleteOutlined';\nimport FirewallRulePort from '../../types/FirewallRulePort';\nimport FirewallRule from '../../types/FirewallRule';\nimport styles from './FirewallsPortsTable.module.less';\nimport Can from '../../core/providers/Can';\nimport { CAN_DELETE_FIREWALL } from '../../core/PermissionRoles';\n\ninterface PortsProps {\n rule: FirewallRule;\n ports: FirewallRulePort[];\n dataStoreUuid: string;\n refresh: Function;\n}\n\nfunction FirewallPortsTable({\n rule,\n ports,\n dataStoreUuid,\n refresh,\n}: PortsProps) {\n const columns: TableColumnsType = [\n { title: 'Port number', dataIndex: 'portNo', key: 'portNo' },\n { title: 'Port name', dataIndex: 'port', key: 'port' },\n {\n title: 'Actions',\n dataIndex: 'actions',\n key: 'actions',\n render: (text: string, record: any) => {\n const onConfirmDelete = () => {\n return new Promise(async (resolve, reject) => {\n notification.open({\n message: 'Remove trusted port',\n description: 'The port will be removed soon.',\n icon: ,\n });\n\n Modal.destroyAll();\n\n try {\n await FirewallService.deleteRule({\n rule: {\n ...rule,\n port: record.port,\n },\n uuid: dataStoreUuid,\n });\n\n refresh();\n\n notification.open({\n message: 'Remove trusted port',\n description: 'Port successfully removed',\n icon: ,\n });\n\n resolve(null);\n } catch (e) {\n notification.open({\n message: 'Remove trusted port',\n description: `There was an error removing the port. ${e}`,\n icon: (\n \n ),\n });\n\n console.error(e);\n\n reject();\n }\n }).catch(() => console.log('Oops errors!'));\n };\n\n return (\n \n
\n }\n />\n
\n
\n );\n },\n },\n ];\n\n return (\n \n );\n}\n\nexport default FirewallPortsTable;\n","import ApiService from './ApiService';\n\nconst API_URL = 'https://api.ipify.org?format=json';\n\nexport default class IpifyService extends ApiService {\n /**\n * Get the user's IP address\n * @returns {Promise} User's IP address\n */\n static async getIPAddress(): Promise {\n try {\n const response = await fetch(API_URL);\n const data = await response.json();\n return data;\n } catch (error) {\n throw new Error('Failed to fetch IP address');\n }\n }\n}\n","import { useEffect, useState } from 'react';\nimport IpifyService from '../../services/IpifyService';\n\nexport default function useIPAddress() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n const [ipAddress, setIPAddress] = useState(null);\n\n const fetchIpAddress = async () => {\n try {\n const { ip } = await IpifyService.getIPAddress();\n setIPAddress(ip);\n } catch (error: any) {\n setError(error);\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n setLoading(true);\n fetchIpAddress();\n }, []);\n\n return { ipAddress, loading, error };\n}\n","import React, { ReactElement } from 'react';\nimport { PlusCircleOutlined } from '@severalnines/frontend_hub/libs/icons';\n\nfunction CcxIconPlusCircleOutlined(): ReactElement {\n return ;\n}\n\nexport default CcxIconPlusCircleOutlined;\n","import React, { ReactElement, useState } from 'react';\nimport ButtonModalForm from '../ButtonModalForm';\nimport FirewallService, { AddRuleProps } from '../../services/FirewallService';\nimport CcxIconPlusCircleOutlined from '../ccx/icons/CcxIconPlusCircleOutlined';\nimport { notification } from 'antd';\nimport CcxIconCheckCircle from '../ccx/icons/CcxIconCheckCircle';\nimport CcxIconCloseCircleTwoTone from '../ccx/icons/CcxIconCloseCircleTwoTone';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport CopyToClipboardText from '../CopyToClipboardText';\nimport styles from './AddFirewallRule.module.less';\nimport usePiwikPro from '../../core/hooks/usePiwikPro';\nimport {\n CLICK_EVENT,\n DATASTORE_ADDED_TRUSTED_SOURCE_FIREWALL_FAILED,\n DATASTORE_ADDED_TRUSTED_SOURCE_FIREWALL_SUCCESSFULLY,\n} from '../../core/PiwikConstants';\nimport Can from '../../core/providers/Can';\nimport { CAN_ADD_FIREWALL } from '../../core/PermissionRoles';\n\ntype AddFirewallRuleProps = {\n uuid: string;\n onSuccess: Function;\n currentDeployment?: DeploymentsItem | null | undefined;\n ipAddress: string;\n testId?: string;\n};\n\nfunction AddFirewallRule({\n uuid,\n onSuccess,\n currentDeployment,\n ipAddress,\n testId = 'AddFirewallRule',\n}: AddFirewallRuleProps): ReactElement {\n const { trackEvent } = usePiwikPro();\n const [form, setForm] = useState(undefined);\n\n const fields = [\n {\n name: ['source'],\n testId: 'AddFirewallRuleSource',\n required: true,\n label: 'Source',\n helpText: (\n
\n Your IP:{' '}\n \n
\n ),\n placeholder: 'Enter CIDR',\n type: 'cidr',\n onBlur: ({ target }: any) => {\n const { value } = target;\n const [ip, range] = value.split('/');\n\n if (range) {\n form.setFieldsValue({\n source: value,\n });\n } else {\n if (ip.length > 0) {\n form.setFieldsValue({\n source: `${value}/32`,\n });\n }\n }\n\n return;\n },\n tips: <>Source address CIDR, i.e.: 1.2.3.4/32,\n },\n {\n name: ['description'],\n testId: 'AddFirewallRuleDescription',\n required: false,\n label: 'Description',\n tips: (\n <>\n You can add a description for the rule, which can help you\n identify it later. A description can be up to 255 characters\n in length. Allowed characters are a-z, A-Z, 0-9, spaces, and\n ._-:/()#,@[]+=;{}!$*\n \n ),\n maxLength: 255,\n validators: [\n {\n message: `Allowed characters are a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=;{}!$*`,\n pattern:\n /^[a-zA-Z0-9\\s._\\-\\:\\/\\(\\)#\\,@\\[\\]\\+\\=\\;\\{\\}!$\\*]*$/,\n },\n ],\n },\n ];\n\n const doApiRequest = async ({ source, description }: AddRuleProps) => {\n try {\n await FirewallService.addRule({\n uuid,\n source: source.trim(),\n description: description ? description.trim() : undefined,\n });\n\n notification.open({\n message: 'Add trusted source',\n description: `New trusted source successfully added!`,\n icon: ,\n });\n\n trackEvent(\n CLICK_EVENT,\n DATASTORE_ADDED_TRUSTED_SOURCE_FIREWALL_SUCCESSFULLY\n );\n\n return true;\n } catch (e) {\n trackEvent(\n CLICK_EVENT,\n DATASTORE_ADDED_TRUSTED_SOURCE_FIREWALL_FAILED\n );\n notification.open({\n message: 'Add trusted source',\n description: `There was an error adding your trusted source. ${e}`,\n icon: ,\n });\n\n console.error(e);\n\n throw e;\n }\n };\n\n return (\n \n }\n onSubmit={doApiRequest}\n onSuccess={onSuccess}\n testId={testId}\n fields={fields}\n submitText=\"Create\"\n formLayout=\"vertical\"\n useGrid={true}\n onFormLoad={setForm}\n disabled={!currentDeployment?.isOperable()}\n >\n \n

\n A trusted client source address is an IP allowed to\n connect to the datastore.\n

\n
\n \n
\n );\n}\n\nexport default AddFirewallRule;\n","import { Col, Row } from 'antd';\nimport AddFirewallRule from './AddFirewallRule';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport styles from './FirewallHeader.module.less';\n\ntype FirewallHeaderProps = {\n refresh: Function;\n ipAddress: string;\n dataStoreUuid: string;\n currentDeployment: DeploymentsItem | null | undefined;\n};\n\nfunction FirewallHeader({\n ipAddress,\n dataStoreUuid,\n refresh,\n currentDeployment,\n}: FirewallHeaderProps) {\n return (\n \n \n Your IP: {ipAddress}\n \n \n \n \n \n );\n}\n\nexport default FirewallHeader;\n","import { ReactElement, useState } from 'react';\nimport { notification, Modal } from 'antd';\nimport styles from './Firewalls.module.less';\nimport AppEmpty from '../AppEmpty';\nimport { useParams } from 'react-router-dom';\nimport useFirewalls from '../../core/hooks/useFirewalls';\nimport AppTable from '../AppTable';\nimport AppConfirmDialog from '../AppConfirmDialog';\nimport FirewallService from '../../services/FirewallService';\nimport AppLoading from '../AppLoading';\nimport CcxIconCheckCircle from '../ccx/icons/CcxIconCheckCircle';\nimport CcxIconCloseCircleTwoTone from '../ccx/icons/CcxIconCloseCircleTwoTone';\nimport CcxIconInfoCircleTwoTone from '../ccx/icons/CcxIconInfoCircleTwoTone';\nimport CcxIconDeleteOutlined from '../ccx/icons/CcxIconDeleteOutlined';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport FirewallPortsTable from './FirewallsPortsTable';\nimport useIPAddress from '../../core/hooks/useIpAddress';\nimport FirewallHeader from './FirewallHeader';\nimport { FirewallTableInterface } from '../../types/FirewallTable';\nimport Can from '../../core/providers/Can';\nimport { CAN_DELETE_FIREWALL } from '../../core/PermissionRoles';\n\ninterface UrlProps {\n dataStoreUuid: string;\n testId?: string;\n}\n\ninterface FirewallsProps {\n testId?: string;\n currentDeployment?: DeploymentsItem | null | undefined;\n}\n\nfunction Firewalls({\n testId = 'Firewalls',\n currentDeployment,\n}: FirewallsProps): ReactElement {\n const { dataStoreUuid } = useParams();\n useState();\n const { firewalls, refresh, loading } = useFirewalls(dataStoreUuid);\n const { ipAddress } = useIPAddress();\n\n const columns = [\n {\n title: 'Source',\n dataIndex: 'source',\n key: 'source',\n },\n {\n title: 'Description',\n dataIndex: 'description',\n key: 'description',\n },\n {\n title: 'Actions',\n key: 'actions',\n width: 85,\n render: (text: string, record: FirewallTableInterface) => {\n const onConfirmDelete = () => {\n return new Promise(async (resolve, reject) => {\n notification.open({\n message: 'Remove trusted source',\n description: 'The source will be removed soon.',\n icon: ,\n });\n\n Modal.destroyAll();\n\n try {\n await FirewallService.deleteAllRule({\n rule: record,\n uuid: dataStoreUuid,\n });\n\n refresh();\n\n notification.open({\n message: 'Remove trusted source',\n description: 'Source successfully removed',\n icon: (\n \n ),\n });\n\n resolve(null);\n } catch (e) {\n notification.open({\n message: 'Remove trusted source',\n description: `There was an error removing the source. ${e}`,\n icon: (\n \n ),\n });\n\n console.error(e);\n\n reject();\n }\n }).catch(() => console.log('Oops errors!'));\n };\n\n return (\n \n
\n }\n />\n
\n
\n );\n },\n },\n ];\n\n const rowExpandable = (record: FirewallTableInterface) => {\n return record.ports;\n };\n\n const expandedRowRenderFirewallTable = (record: FirewallTableInterface) => {\n return (\n \n );\n };\n\n return (\n
\n \n\n {loading ? (\n \n ) : firewalls?.length ? (\n
\n \n
\n ) : (\n \n )}\n
\n );\n}\n\nexport default Firewalls;\n","export type QueryProcessClassProps = {\n user: string;\n instance: string;\n client: string;\n query: string;\n state: string;\n query_time: number;\n};\n\nexport interface QueryProcessInterface {\n user: string;\n instance: string;\n client: string;\n query: string;\n state: string;\n queryTime: number;\n uniqueKey: string; // this is used for the Table component, a unique key for each value\n}\n\nexport default class QueryProcess implements QueryProcessInterface {\n readonly user: string;\n readonly instance: string;\n readonly client: string;\n readonly query: string;\n readonly state: string;\n readonly queryTime: number;\n readonly uniqueKey: string;\n\n constructor(props: QueryProcessClassProps) {\n this.instance = props.instance;\n this.user = props.user;\n this.client = props.client;\n this.query = props.query;\n this.state = props.state;\n this.queryTime = props.query_time;\n this.uniqueKey = `${props.user}-${props.query_time}`;\n }\n}\n","import QueryProcess from './QueryProcess';\n\nexport type QueryProcessesClassProps = {\n error: string;\n timestamp: number;\n request_status: string;\n data: any[];\n};\n\nexport interface QueryProcessesInterface {\n error: string;\n timestamp: number;\n requestStatus: string;\n queryProcesses: QueryProcess[];\n}\n\nexport default class QueryProcesses implements QueryProcessesInterface {\n readonly error: string;\n readonly timestamp: number;\n readonly requestStatus: string;\n readonly queryProcesses: QueryProcess[];\n\n constructor(props: QueryProcessesClassProps) {\n this.queryProcesses = props.data?.map((a) => {\n return new QueryProcess(a);\n });\n this.timestamp = props.timestamp;\n this.error = props.error;\n this.requestStatus = props.request_status;\n }\n}\n","import dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport moment from 'moment';\ndayjs.extend(utc);\n\nexport type TopQueryClassProps = {\n user: string;\n instance: string;\n database: string;\n digest_text: string;\n sum_time: number;\n count_star: number;\n last_seen: string;\n max_time: number;\n min_time: number;\n avg_time: number;\n examined_rows: number;\n affected_rows: number;\n sent_rows: number;\n disk: number;\n ram: number;\n};\n\nexport interface TopQueryInterface {\n user: string;\n instance: string;\n database: string;\n digestText: string;\n sumTime: number;\n sumTimeFormatted: string;\n countStar: number;\n uniqueKey: string; // this is used for the Table component, a unique key for each value\n lastSeen: string;\n maxTime: number;\n minTime: number;\n avgTime: number;\n examinedRows: number;\n affectedRows: number;\n sentRows: number;\n disk: number;\n ram: number;\n}\n\nexport default class TopQuery implements TopQueryInterface {\n readonly user: string;\n readonly instance: string;\n readonly database: string;\n readonly digestText: string;\n readonly sumTime: number;\n readonly sumTimeFormatted: string;\n readonly countStar: number;\n readonly uniqueKey: string;\n readonly lastSeen: string;\n readonly maxTime: number;\n readonly minTime: number;\n readonly avgTime: number;\n readonly examinedRows: number;\n readonly affectedRows: number;\n readonly sentRows: number;\n readonly disk: number;\n readonly ram: number;\n\n constructor(props: TopQueryClassProps) {\n this.instance = props.instance;\n this.user = props.user;\n this.database = props.database;\n this.digestText = props.digest_text;\n this.sumTime = props.sum_time;\n this.sumTimeFormatted = dayjs.utc(props.sum_time).format('HH:mm:ss');\n this.countStar = props.count_star;\n this.uniqueKey = `${props.sum_time}-${props.digest_text}`;\n this.lastSeen = moment\n .utc(props?.last_seen)\n .format('YYYY-MM-DD HH:mm:ss');\n this.maxTime = props.max_time || 0;\n this.minTime = props.min_time || 0;\n this.avgTime = props.avg_time || 0;\n this.examinedRows = props.examined_rows || 0;\n this.affectedRows = props.affected_rows || 0;\n this.sentRows = props.sent_rows || 0;\n this.disk = props.disk || 0;\n this.ram = props.ram || 0;\n }\n}\n","import TopQuery from './TopQuery';\n\nexport type TopQueriesClassProps = {\n error: string;\n timestamp: number;\n request_status: string;\n data: any[];\n};\n\nexport interface TopQueriesInterface {\n error: string;\n timestamp: number;\n requestStatus: string;\n topQueries: TopQuery[];\n totalExecutionTime: number;\n}\n\nexport default class TopQueries implements TopQueriesInterface {\n readonly error: string;\n readonly timestamp: number;\n readonly requestStatus: string;\n readonly topQueries: TopQuery[];\n readonly totalExecutionTime: number;\n\n constructor(props: TopQueriesClassProps) {\n this.topQueries = props.data?.map((a) => {\n return new TopQuery(a);\n });\n this.timestamp = props.timestamp;\n this.error = props.error;\n this.requestStatus = props.request_status;\n this.totalExecutionTime = this.getTotalExecutionTime();\n }\n\n getTotalExecutionTime(): number {\n return this.topQueries.reduce((prev, curr) => {\n return prev + curr.sumTime;\n }, 0);\n }\n}\n","import ApiService from './ApiService';\nimport QueryProcesses from '../types/QueryProcesses';\nimport TopQueries from '../types/TopQueries';\nimport { API_QMON } from '../core/CcxEnv';\n\n// constants\nconst API_URL = API_QMON;\n\nexport default class QueryMonitorService extends ApiService {\n /**\n * Get list of query processes.\n * @param {string} uuid\n */\n static async getQueryProcesses(uuid: string): Promise {\n const response = await this.request('GET', `qmon/${uuid}/processes`);\n return new QueryProcesses(response);\n }\n\n /**\n * Get list of top queries.\n * @param {string} uuid\n */\n static async getTopQueries(uuid: string): Promise {\n const response = await this.request('GET', `qmon/${uuid}/topqueries`);\n return new TopQueries(response);\n }\n\n protected static getApiUrl() {\n return API_URL;\n }\n}\n","import { useEffect, useState } from 'react';\nimport QueryMonitorService from '../../services/QueryMonitorService';\nimport TopQueries from '../../types/TopQueries';\n\nexport default function useTopQueries(uuid: string | undefined) {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n const [topQueries, setTopQueries] = useState();\n\n const load = async () => {\n if (uuid) {\n setLoading(true);\n\n try {\n const details = await QueryMonitorService.getTopQueries(uuid);\n setTopQueries(details);\n setLoading(false);\n setError(null);\n } catch (e: any) {\n setLoading(false);\n setError(e);\n }\n\n setLoading(false);\n }\n };\n\n const refresh = () => {\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n refresh();\n }, [uuid]);\n\n return { topQueries, refresh, loading, error };\n}\n","import { useEffect, useState } from 'react';\nimport Deployment from '../../types/Deployment';\nimport QueryMonitorService from '../../services/QueryMonitorService';\n\nexport default function useQueryProcesses(uuid: string | undefined) {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n const [queryProcesses, setQueryProcesses] = useState<\n Deployment | undefined | any\n >(undefined);\n\n const load = async () => {\n if (uuid) {\n setLoading(true);\n\n try {\n const details = await QueryMonitorService.getQueryProcesses(\n uuid\n );\n setQueryProcesses(details);\n setLoading(false);\n setError(null);\n } catch (e: any) {\n setLoading(false);\n setError(e);\n }\n\n setLoading(false);\n }\n };\n\n const refresh = () => {\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n refresh();\n }, [uuid]);\n\n return { queryProcesses, refresh, loading, error };\n}\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport styles from './TopQueriesTable.module.less';\nimport TopQuery from '../../../types/TopQuery';\nimport AppTable from '../../AppTable';\n\ninterface Props extends CcxComponentProps {\n title?: string;\n query: TopQuery;\n}\n\nfunction TopQueriesTable({ title = 'Query', query }: Props): ReactElement {\n const columns = [\n {\n title: 'Temporary tables',\n children: [\n {\n title: 'Disk',\n dataIndex: 'disk',\n key: 'disk',\n },\n {\n title: 'RAM',\n dataIndex: 'ram',\n key: 'ram',\n },\n ],\n },\n {\n title: 'Lock Time',\n children: [\n {\n title: 'Min',\n key: 'minTime',\n render: (text: any, record: any) => (\n {record.minTime} ms\n ),\n },\n {\n title: 'Max',\n key: 'maxTime',\n render: (text: any, record: any) => (\n {record.maxTime} ms\n ),\n },\n {\n title: 'Avg',\n key: 'avgTime',\n render: (text: any, record: any) => (\n {record.avgTime} ms\n ),\n },\n ],\n },\n {\n title: 'Rows',\n children: [\n {\n title: 'Examined',\n dataIndex: 'examinedRows',\n key: 'examinedRows',\n },\n {\n title: 'Affected',\n dataIndex: 'affectedRows',\n key: 'affectedRows',\n },\n {\n title: 'Sent',\n dataIndex: 'sentRows',\n key: 'sentRows',\n },\n ],\n },\n ];\n\n return (\n
\n
{title}
\n {query.digestText}\n \n
\n );\n}\n\nexport default TopQueriesTable;\n","import { useEffect, useState } from 'react';\nimport ServiceService from '../../services/ServiceService';\n\ninterface Props {\n dataStoreUuid?: string;\n}\n\nexport default function useDataStoreServices({ dataStoreUuid }: Props) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [services, setServices] = useState(undefined);\n const [error, setError] = useState(null);\n\n const load = async () => {\n if (dataStoreUuid) {\n try {\n const response = await ServiceService.getAllServices(\n dataStoreUuid\n );\n setServices(response);\n } catch (err: any) {\n console.error(err);\n setError(err);\n }\n } else {\n setError('No datastore selected.');\n }\n };\n\n const refresh = () => {\n const update = async () => {\n setUpdating(true);\n await load();\n setUpdating(false);\n };\n update();\n };\n\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n if (!services) {\n init();\n } else {\n refresh();\n }\n }, [dataStoreUuid]);\n\n return { services, refresh, error, loading, updating };\n}\n","import { ReactElement, useState } from 'react';\nimport styles from './SecretText.module.less';\nimport { Tooltip } from 'antd';\nimport CcxComponentProps from '../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {\n visibleText?: string;\n hiddenText?: string;\n tooltipText?: string;\n displayInline?: any;\n}\n\nfunction SecretText({\n visibleText,\n hiddenText,\n testId = 'SecretText',\n tooltipText,\n displayInline,\n}: Props): ReactElement {\n const [expanded, setExpanded] = useState(false);\n\n const handleClick = () => {\n setExpanded(!expanded);\n };\n\n return (\n \n \n {expanded ? hiddenText : visibleText}\n \n \n );\n}\n\nexport default SecretText;\n","import SecretText from '../components/SecretText';\nimport { normalizeHostPort } from '../core/helpers';\n\nexport type RequestProps = {\n target?: string;\n hostPort?: string;\n host?: string;\n port?: string;\n username?: string;\n database?: string;\n password?: string;\n protocol?: string;\n service?: string;\n};\n\nexport default class DsnService {\n public static getDsn({\n hostPort = '{your_host:your_port}',\n port = '{port_number}',\n username = '{your_username}',\n database = '{your_database_name}',\n password = '{your_password}',\n service = 'mysql',\n }: RequestProps): string {\n let dsn = '';\n switch (service) {\n case 'mssql':\n dsn = `Data Source=${normalizeHostPort(\n hostPort,\n port\n )};User ID=${username};Password=${password}`;\n break;\n case 'postgres':\n dsn = `${service}://${username}:${password}@${normalizeHostPort(\n hostPort,\n port\n )}/${database}`;\n break;\n default:\n dsn = `${service}://${username}:${password}@${hostPort}/${database}`;\n }\n return dsn;\n }\n\n public static getDsnUsageExample({\n target = 'example',\n hostPort = '{your_host:your_port}',\n host = '{your_host}',\n port = '{port_number}',\n username = '{your_username}',\n database = '{your_database_name}',\n password = '{your_password}',\n protocol = 'tcp',\n service = 'mysql',\n }: RequestProps): any {\n let dsnForCopy: string[] = [];\n let dsnForDisplay: any[];\n const passwordReplace: string = '{your_password}';\n\n const getPasswordForDisplay = () => {\n return username === 'ccxadmin' ? (\n \n ) : (\n <>{`{REPLACE_WITH_YOUR_PASSWORD}`}\n );\n };\n\n const getPasswordForCopy = () => {\n return username === 'ccxadmin'\n ? password\n : '{REPLACE_WITH_YOUR_PASSWORD}';\n };\n\n const connectionCodeCopy = (connectionCode: string[]) => {\n return connectionCode.map((line: string) => {\n return line.replace(passwordReplace, getPasswordForCopy);\n });\n };\n const connectionCodeDisplay = (dsnForCopy: string[]) => {\n return [\n <>\n {dsnForCopy.map((line: string) => {\n const i = line.indexOf(passwordReplace);\n return (\n <>\n {i === -1 ? (\n <>{line}\n ) : (\n <>\n <>{line.substring(0, i)}\n <>{getPasswordForDisplay()}\n <>\n {line.substring(\n i + passwordReplace.length\n )}\n \n \n )}\n
\n \n );\n })}\n ,\n ];\n };\n let connectionString: string[] = [];\n switch (target) {\n case 'ado.net':\n connectionString = [\n `Server=${host};`,\n `Port=${port};`,\n `Database=${database};`,\n `Uid=${username};`,\n `Pwd=${passwordReplace};`,\n `SslMode=Required;`,\n ];\n break;\n case 'jdbc':\n connectionString = [\n `String url = \"jdbc:${service}://%s:%s/%s?verifyServerCertificate=true&useSSL=true&requireSSL=true\", ${host}, ${port}, ${database}\";`,\n `myDbConn = DriverManager.getConnection(url, ${username}, ${passwordReplace}\";`,\n ];\n break;\n case 'node.js':\n switch (service) {\n case 'mysql':\n connectionString = [\n `var conn = mysql.createConnection({host: ${host}, user: ${username}, password: ${passwordReplace}, database: ${database}, Port: ${port}, ssl: {ca:fs.readFileSync({ca-cert filename})}});`,\n ];\n break;\n case 'postgres':\n connectionString = [\n `const pg = require('pg');`,\n ``,\n `var conn = pg.Client({host: ${host}, user: ${username}, password: ${passwordReplace}, database: ${database}, port: ${port}, ssl: true);`,\n ];\n break;\n case 'redis':\n connectionString = [\n `const { createClient } = require('redis');`,\n ``,\n `const client = createClient({`,\n ` host: '${host}',`,\n ` port: ${port},`,\n ` user: '${username}',`,\n ` password: '${passwordReplace}',`,\n ` db: ${database}`,\n `});`,\n ];\n break;\n }\n break;\n case 'odbc':\n connectionString =\n service === 'mysql'\n ? [\n `DRIVER={MySQL ODBC 5.3 UNICODE Driver};`,\n `Server=${host};`,\n `Port=${port};`,\n `Database=${database};`,\n `Uid=${username};`,\n `Pwd=${passwordReplace};`,\n `sslca={ca-cert filename};`,\n `sslverify=1;`,\n `Option=3;`,\n ]\n : [\n `DRIVER={PostgreSQL};`,\n `Server=${host};`,\n `Port=${port};`,\n `Database=${database};`,\n `Uid=${username};`,\n `Pwd=${passwordReplace};`,\n `sslca={ca-cert filename};`,\n `sslverify=1;`,\n `Option=3;`,\n ];\n break;\n case 'php':\n switch (service) {\n case 'mysql':\n connectionString = [\n `connect('${host}', ${port});`,\n `$redis->auth('${username},${passwordReplace}');`,\n `$redis->select(${database});`,\n ];\n break;\n }\n break;\n case 'php.pdo':\n connectionString = [\n ` '${host}', :user => '${username}', :dbname => '${database}', :port => '${port}', :password => '${passwordReplace}')`,\n ];\n break;\n case 'redis':\n connectionString = [\n `require 'redis'`,\n ``,\n `redis = Redis.new(:host => '${host}', :port => ${port}, :user => '${username}', :password => '${passwordReplace}', :db => ${database})`,\n ];\n break;\n }\n break;\n case 'go':\n switch (service) {\n case 'mysql':\n connectionString = [\n `import (`,\n ` \"database/sql\"`,\n ` _ \"github.com/go-sql-driver/mysql\"`,\n `)`,\n ``,\n `db, err := sql.Open(\"mysql\", \"${username}:${passwordReplace}@${hostPort}/${database}\")`,\n ];\n break;\n case 'postgres':\n connectionString = [\n `import (`,\n ` \"database/sql\"`,\n ` \"fmt\"`,\n ` _ \"github.com/lib/pq\"`,\n `)`,\n ``,\n `var connectionString string = fmt.Sprintf(\"host=%s user=%s password=%s dbname=%s sslmode=require\", \"${host}\", \"${username}\", \"${passwordReplace}\", \"${database}\")`,\n ``,\n `db, err := sql.Open(\"postgres\", connectionString)`,\n ];\n break;\n case 'redis':\n connectionString = [\n `import (`,\n ` \"github.com/go-redis/redis/v8\"`,\n `)`,\n ``,\n `rdb := redis.NewClient(&redis.Options{`,\n ` Addr: \"${host}:${port}\",`,\n ` Username: \"${username}\",`,\n ` Password: \"${passwordReplace}\",`,\n ` DB: ${database},`,\n `})`,\n ];\n break;\n }\n\n break;\n case 'dsn':\n connectionString = [\n this.getDsn({\n hostPort,\n port,\n username,\n database,\n password: passwordReplace,\n service,\n }),\n ];\n break;\n }\n dsnForCopy = connectionCodeCopy(connectionString);\n dsnForDisplay = connectionCodeDisplay(connectionString);\n\n return { dsnForCopy, dsnForDisplay };\n }\n}\n","import DeploymentsItem from '../../../../types/DeploymentsItem';\nimport Service from '../../../../types/Service';\nimport { useMemo } from 'react';\nimport DsnService from '../../../../services/DsnService';\n\nexport type UseDatastoreServiceDsnProps = {\n dataStore?: DeploymentsItem;\n service?: Service;\n type?: string;\n};\nexport default function useDatastoreServiceDsn({\n dataStore,\n service,\n type,\n}: UseDatastoreServiceDsnProps) {\n return useMemo(() => {\n let dbType = '';\n const username =\n dataStore?.getDbAccount().getUsername() || '{your_username}';\n const password =\n dataStore?.getDbAccount().getPassword() || '{your_password}';\n const database =\n dataStore?.getDbAccount().getDatabase() || '{your_database}';\n if (dataStore?.isMariaDb() || dataStore?.isPercona()) {\n dbType = 'mysql';\n } else if (dataStore?.isPostgreSql()) {\n dbType = 'postgres';\n } else if (dataStore?.isRedis()) {\n dbType = 'rediss';\n } else if (dataStore?.isMSSQL()) {\n dbType = 'mssql';\n }\n const hostPort =\n (type === 'db' ? service?.getFQDN() : service?.getFQDN(true)) ||\n '{database_host:port}';\n\n const dsn = DsnService.getDsn({\n service: dbType,\n username,\n password,\n database,\n hostPort,\n port: `${service?.getPort()}`,\n });\n return {\n dsn,\n username,\n password,\n database,\n dbType,\n hostPort,\n };\n }, [dataStore, service, type]);\n}\n","import React from 'react';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\nimport Service from '../../../../types/Service';\nimport useDatastoreServiceDsn from './useDatastoreServiceDsn';\nimport CopyToClipboardText from '../../../CopyToClipboardText';\n\nexport default ServiceDSNCopyButton;\nexport type ServiceDSNCopyButtonProps = {\n dataStore?: DeploymentsItem;\n service?: Service;\n type?: string;\n buttonProps?: any;\n};\n\nfunction ServiceDSNCopyButton({\n dataStore,\n service,\n type = 'db',\n buttonProps,\n ...rest\n}: ServiceDSNCopyButtonProps) {\n const { dsn, username, database, hostPort, dbType } =\n useDatastoreServiceDsn({ dataStore, service, type });\n\n const tooltip = `${dbType}://${username}@${hostPort}/${database}`;\n\n return (\n \n );\n}\n","import React from 'react';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\nimport Service from '../../../../types/Service';\nimport ServiceDSNCopyButton from './ServiceDSNCopyButton';\nimport { Space } from 'antd';\nimport TypographyText from '@severalnines/bar-frontend-components/build/lib/General/TypographyText';\nimport styles from './ServiceInstanceFormat.module.less';\n\nexport default ServiceInstanceFormat;\nexport type ServiceInstanceFormatProps = {\n instance: string;\n dataStore?: DeploymentsItem;\n service?: Service;\n type?: string;\n};\n\nfunction ServiceInstanceFormat({\n instance,\n dataStore,\n service,\n type,\n ...rest\n}: ServiceInstanceFormatProps) {\n const formatInstanceName = (instance: string) => {\n const instanceName = instance.split(':')[0];\n const port =\n instance.split(':').length === 2 ? instance.split(':')[1] : '';\n const ipRegex = /^([0-9]{1,3}\\.){3}[0-9]{1,3}$/;\n if (ipRegex.test(instanceName)) {\n const formattedInstance = `${instanceName}${\n port ? `:${port}` : ''\n }`;\n return formattedInstance;\n } else {\n const instanceFqdn = instanceName.split('.')[0];\n const formattedInstance = `${instanceFqdn}${\n port ? `:${port}` : ''\n }`;\n return formattedInstance;\n }\n };\n\n return (\n \n \n \n {formatInstanceName(instance)}\n \n \n {dataStore && service && (\n \n )}\n \n );\n}\n","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport styles from './QueryStats.module.less';\nimport AppEmpty from '../AppEmpty';\nimport { useHistory, useParams } from 'react-router-dom';\nimport useTopQueries from '../../core/hooks/useTopQueries';\nimport useQueryProcesses from '../../core/hooks/useQueryProcesses';\nimport AppTable from '../AppTable';\nimport AppLoading from '../AppLoading';\nimport { Radio } from 'antd';\nimport { RadioChangeEvent } from 'antd/lib/radio/interface';\nimport CopyToClipboardText from '../CopyToClipboardText';\nimport TopQuery from '../../types/TopQuery';\nimport TopQueriesTable from './topQueries/TopQueriesTable';\nimport useDataStoreServices from '../../core/hooks/useDataStoreServices';\nimport Service from '../../types/Service';\nimport ServiceInstanceFormat from '../projects/dataStores/services/ServiceInstanceFormat';\nimport { useAppSelector } from '../../redux/hooks';\nimport DeploymentsItem from '../../types/DeploymentsItem';\n\ninterface UrlProps {\n dataStoreUuid: string;\n projectUuid: string;\n}\n\ntype QueryStatsProps = {\n testId?: string;\n currentDeployment: DeploymentsItem;\n};\n\nfunction QueryStats({\n testId = 'QueryStats',\n currentDeployment,\n}: QueryStatsProps): ReactElement {\n const [showConnections, setShowConnections] =\n useState('dbConnections');\n const { dataStoreUuid } = useParams();\n const { topQueries, loading: topQueryLoading } =\n useTopQueries(dataStoreUuid);\n const {\n queryProcesses,\n refresh,\n loading: processLoading,\n } = useQueryProcesses(dataStoreUuid);\n\n const {\n services,\n refresh: servicesRefresh,\n loading: servicesLoading,\n updating,\n } = useDataStoreServices({\n dataStoreUuid,\n });\n\n const [expandedKeys, setExpandedKeys] = useState([]);\n\n const history = useHistory();\n\n useEffect(() => {\n if (currentDeployment?.isRedis()) {\n history.goBack();\n }\n }, [currentDeployment]);\n\n const findInstanceService = (instance?: string) => {\n return (\n instance &&\n services?.dbServices?.find(\n (service: Service) =>\n service.getFQDN() === instance ||\n service.getFQDN() === instance?.split(':')[0]\n )\n );\n };\n\n const topQueriesColumns = [\n {\n title: 'Node',\n dataIndex: 'instance',\n key: 'instance',\n render: (text: string, record: any) => {\n const service = findInstanceService(record.instance);\n return (\n \n );\n },\n },\n {\n title: 'Query digest',\n dataIndex: 'digestText',\n key: 'digestText',\n width: '200px',\n render: (text: string, record: any) => (\n 14 ? `${text.substring(0, 14)}...` : text\n }\n hoverable={false}\n buttonProps={{\n textSize: 'small',\n }}\n />\n ),\n },\n {\n title: 'Database',\n dataIndex: 'database',\n key: 'database',\n },\n\n {\n title: 'Count',\n dataIndex: 'countStar',\n key: 'countStar',\n sorter: (a: any, b: any) => a.countStar - b.countStar,\n width: '100px',\n },\n\n {\n title: 'Execution time',\n children: [\n {\n title: 'Absolute',\n key: 'sumTime',\n width: '100px',\n render: (text: string, record: any) =>\n record.sumTimeFormatted,\n sorter: (a: any, b: any) => a.sumTime - b.sumTime,\n },\n {\n title: 'Relative %',\n key: 'sumTime',\n render: (text: string, record: any) => {\n if (topQueries?.totalExecutionTime) {\n const percent =\n Math.round(\n (record.sumTime /\n topQueries?.totalExecutionTime) *\n 100 *\n 100\n ) / 100;\n return percent;\n }\n return 0;\n },\n },\n ],\n },\n {\n title: 'Avg',\n dataIndex: 'avgTime',\n key: 'avgTime',\n render: (text: string) =>
{parseFloat(text).toFixed(1)}s
,\n sorter: (a: any, b: any) => a.avgTime - b.avgTime,\n width: '100px',\n },\n ];\n\n if (!currentDeployment?.isPostgreSql()) {\n topQueriesColumns.push({\n title: 'Last seen',\n dataIndex: 'lastSeen',\n key: 'lastSeen',\n });\n }\n\n const queryProcessesColumns = [\n {\n title: 'Node',\n dataIndex: 'instance',\n key: 'instance',\n render: (text: string, record: any) => {\n const service = findInstanceService(record.instance);\n return (\n \n );\n },\n },\n {\n title: 'User',\n dataIndex: 'user',\n key: 'user',\n },\n {\n title: 'Client',\n dataIndex: 'client',\n key: 'client',\n },\n {\n title: 'Query ',\n dataIndex: 'query',\n key: 'query',\n width: '350px',\n render: (text: string, record: any) =>\n record.query && (\n 35\n ? `${text.substring(0, 35)}...`\n : text\n }\n hoverable={false}\n />\n ),\n },\n {\n title: 'State',\n dataIndex: 'state',\n key: 'state',\n },\n {\n title: 'Query time',\n key: 'queryTime',\n render: (text: any, record: any) => (\n {record.queryTime} sec\n ),\n },\n ];\n\n const onChange = (e: RadioChangeEvent) => {\n setShowConnections(e.target.value);\n };\n\n const rowExpandableTopQuery = (record: TopQuery) => {\n return record.countStar;\n };\n\n const expandedRowRenderTopQuery = (record: TopQuery) => {\n return ;\n };\n\n const onRow = (record: TopQuery) => {\n return (\n expandedKeys.includes(record.uniqueKey) && {\n className: styles.QueryStatsExpanded,\n }\n );\n };\n\n const onExpand = (expanded: any, { uniqueKey }: TopQuery) => {\n const keys = expandedKeys;\n\n const tempExpandedKeys = expanded\n ? keys.concat(uniqueKey)\n : keys.filter((k) => k !== uniqueKey);\n setExpandedKeys(tempExpandedKeys);\n };\n\n return (\n
\n \n \n Databases connections\n \n Top queries\n \n\n {showConnections === 'dbConnections' && (\n <>\n {processLoading ? (\n \n ) : queryProcesses?.queryProcesses ? (\n \n ) : (\n \n )}\n \n )}\n\n {showConnections === 'topQueries' && (\n
\n {topQueryLoading ? (\n \n ) : topQueries ? (\n \n ) : (\n \n )}\n
\n )}\n
\n );\n}\n\nexport default QueryStats;\n","import { Tag, Tooltip } from 'antd';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport styles from './AppFormTag.module.less';\nimport { replaceIfRedis } from '../../../core/helpers';\n\ninterface Props extends CcxComponentProps {\n label: string;\n value?: string;\n size?: string;\n closable?: boolean;\n toolTip?: boolean;\n onClose?: Function;\n}\n\nfunction AppFormTag({\n label,\n closable,\n toolTip = true,\n size = '',\n onClose,\n testId = 'AppFormTag',\n}: Props) {\n const onPreventMouseDown = (event: any) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n const labelReplace = replaceIfRedis(label);\n\n return toolTip ? (\n \n \n {label.length <= 10\n ? label\n : `${labelReplace.substring(0, 10)}...`}\n \n \n ) : (\n \n {labelReplace.length <= 10\n ? labelReplace\n : `${labelReplace.substring(0, 10)}...`}\n \n );\n}\n\nexport default AppFormTag;\n","import CcxComponentProps from '../../../core/CcxComponent';\nimport React, { useEffect, useState } from 'react';\nimport AppFormTag from './AppFormTag';\nimport { Tooltip } from 'antd';\nimport { replaceIfRedis } from '../../../core/helpers';\n\ninterface Props extends CcxComponentProps {\n tags: any;\n length?: number;\n}\n\nfunction AppFormTags({ tags, length, testId = 'AppFormTags' }: Props) {\n const [subTags, setSubTags] = useState([]);\n\n useEffect(() => {\n if (length && tags) {\n setSubTags(tags.slice(0, length));\n }\n }, [length, tags]);\n\n return (\n
\n \n {subTags?.map((t: string, i: number) => {\n return (\n \n );\n })}\n \n
\n );\n}\n\nexport default AppFormTags;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { Col, Row } from 'antd';\nimport CcxComponentProps from '../../../../core/CcxComponent';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\nimport CcxLogo from '../../../ccx/common/CcxLogo';\nimport CcxIcon1NodeDeployment from '../../../ccx/icons/CcxIcon1NodeDeployment';\nimport LazyLoader from '../../../LazyLoader';\nimport DataStoreStatus from '../DataStoreStatus';\nimport styles from './DataStoreOverviewGeneralInformation.module.less';\nimport SmallContainer from '../../../ccx/common/SmallContainer';\nimport AppFormTags from '../../../ccx/common/AppFormTags';\nimport CopyToClipboardText from '../../../CopyToClipboardText';\nimport { replaceIfRedis } from '../../../../core/helpers';\n\ninterface Props extends CcxComponentProps {\n dataStore?: DeploymentsItem;\n}\n\nfunction DataStoreOverviewGeneralInformation({\n dataStore,\n testId = 'DataStoreOverviewGeneralInformation',\n}: Props): ReactElement {\n const [cards, setCards] = useState([]);\n\n useEffect(() => {\n if (dataStore) {\n setCards([\n {\n label: (\n \n Name and ID\n \n ),\n testId: `${testId}CardName`,\n content: (\n \n {dataStore.getName()}\n\n
\n 20\n ? `${dataStore\n .getUUID()\n .substring(0, 20)}...`\n : dataStore.getUUID()\n }\n tooltip={dataStore.getUUID()}\n hoverable={false}\n />\n
\n \n ),\n span: 12,\n },\n {\n label: (\n \n Status\n \n ),\n testId: `${testId}CardStatus`,\n content: (\n \n ),\n span: 12,\n style: 'DataStoreOverviewGeneralInformationEvenColumns',\n },\n {\n label: (\n \n Version\n \n ),\n testId: `${testId}CardVersion`,\n content: (\n \n \n {dataStore?.getDbVendorName()}{' '}\n {dataStore?.db.dbVersion}\n \n }\n />\n ),\n span: 12,\n },\n {\n label: (\n \n Topology\n \n ),\n testId: `${testId}CardTopology`,\n content: (\n \n {dataStore.getNumberOfNodes() && (\n \n )}\n
\n {dataStore.getNumberOfNodes()}{' '}\n {dataStore.getNumberOfNodes() === 1\n ? 'node'\n : 'nodes'}{' '}\n {replaceIfRedis(\n dataStore.clusterType\n ).toLowerCase()}\n
\n \n }\n />\n ),\n span: 12,\n style: 'DataStoreOverviewGeneralInformationEvenColumns',\n },\n {\n label: (\n \n Configuration\n \n ),\n testId: `${testId}CardTopology`,\n content: (\n {dataStore.getClusterTypeName()}\n }\n />\n ),\n span: 12,\n },\n {\n label: (\n \n Tags\n \n ),\n testId: `${testId}CardTags`,\n content: (\n
\n \n
\n ),\n span: 12,\n style: 'DataStoreOverviewGeneralInformationEvenColumns',\n },\n ]);\n }\n }, [dataStore]);\n\n return (\n \n
\n {dataStore && cards.length > 0 ? (\n <>\n
General information
\n
\n \n {cards.map((c: any, i: number) => {\n return (\n \n \n \n );\n })}\n \n
\n \n ) : (\n \n )}\n
\n \n );\n}\n\nexport default DataStoreOverviewGeneralInformation;\n","import { CloseCircleOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport React from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {}\n\nconst CcxIconCloseCircleOutlined = ({\n testId = 'CcxIconCloseCircleOutlined',\n}: Props) => ;\n\nexport default CcxIconCloseCircleOutlined;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { Tooltip } from 'antd';\nimport CcxComponentProps from '../../../../core/CcxComponent';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\nimport LazyLoader from '../../../LazyLoader';\nimport styles from './DataStoreOverviewServicesState.module.less';\nimport CcxIconCheckCircle from '../../../ccx/icons/CcxIconCheckCircle';\nimport CcxIconCloseCircleOutlined from '../../../ccx/icons/CcxIconCloseCircleOutlined';\n\ninterface Props extends CcxComponentProps {\n loading: Boolean;\n dataStore?: DeploymentsItem;\n services?: any;\n}\n\nfunction DataStoreOverviewServicesState({\n loading,\n dataStore,\n services,\n testId = 'DataStoreOverviewServicesState',\n}: Props): ReactElement {\n const [total, setTotal] = useState(0);\n const [failed, setFailed] = useState(0);\n\n useEffect(() => {\n if (services) {\n const total = services?.dbServices?.length ?? 0;\n let stopped = 0;\n\n if (total) {\n stopped =\n services.dbServices.filter(\n (service: any) => service?.status === 'error'\n ).length ?? 0;\n }\n\n setFailed(stopped);\n setTotal(total);\n }\n }, [services]);\n\n let content;\n\n if (loading) {\n content = ;\n }\n\n if (dataStore && services) {\n content = (\n <>\n
State of nodes
\n
\n {failed === 0 && (\n
\n \n \n
\n All nodes are running fine. No issues reported.\n \n )}\n {failed > 0 && (\n <>\n \n
\n \n \n
\n {failed} out of {total} nodes are reporting\n issues.\n \n \n \n )}\n
\n \n );\n }\n\n if (!loading && !services) {\n content = (\n <>\n
State of nodes
\n
\n {failed === 0 && (\n
\n \n \n
\n No nodes information available at this time\n \n )}\n
\n \n );\n }\n\n return (\n \n
\n {content}\n
\n \n );\n}\n\nexport default DataStoreOverviewServicesState;\n","import { Tooltip } from 'antd';\nimport { Tag, Row, Col } from 'antd';\nimport React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../../core/CcxComponent';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\nimport SmallContainer from '../../../ccx/common/SmallContainer';\nimport CcxIconInfoCircleOutlined from '../../../ccx/icons/CcxIconInfoCircleOutlined';\nimport LazyLoader from '../../../LazyLoader';\nimport styles from './DataStoreOverviewNetworkInformation.module.less';\n\ninterface Props extends CcxComponentProps {\n dataStore?: DeploymentsItem;\n}\n\nfunction DataStoreOverviewNetworkInformation({\n dataStore,\n testId = 'DataStoreOverviewNetworkInformation',\n}: Props): ReactElement {\n const [cards, setCards] = useState([]);\n useEffect(() => {\n if (dataStore) {\n const cards = [\n {\n label: (\n \n Network\n \n ),\n testId: `${testId}CardNetwork`,\n content: (\n \n {dataStore.vpc ? 'Private' : 'Public'}\n \n }\n />\n ),\n span: 5,\n },\n {\n label: (\n \n Type\n \n ),\n testId: `${testId}CardType`,\n content: (\n \n {dataStore.isSingleAZ()\n ? 'Single AZ'\n : 'Multi AZ'}\n \n }\n />\n ),\n span: 5,\n },\n {\n label: (\n \n Availability zones\n \n ),\n testId: `${testId}CardAZs`,\n content: dataStore?.cloudRegion.code ? (\n {dataStore?.cloudRegion.code}\n }\n />\n ) : (\n \n Not available \n \n ),\n span: 14,\n },\n ];\n\n if (!dataStore.cloudRegion.code) {\n cards.pop();\n }\n\n setCards(cards);\n }\n }, [dataStore]);\n\n return (\n \n
\n {dataStore ? (\n <>\n
Network
\n
\n \n {cards.map((c: any, i: number) => {\n return (\n \n \n \n );\n })}\n \n
\n \n ) : (\n \n )}\n
\n \n );\n}\n\nexport default DataStoreOverviewNetworkInformation;\n","import { Tooltip } from 'antd';\nimport { Row, Col } from 'antd';\nimport React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../../core/CcxComponent';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\nimport AppFlagIcon from '../../../ccx/common/AppFlagIcon';\nimport SmallContainer from '../../../ccx/common/SmallContainer';\nimport CcxIconInfoCircleOutlined from '../../../ccx/icons/CcxIconInfoCircleOutlined';\nimport LazyLoader from '../../../LazyLoader';\nimport styles from './DataStoreOverviewCloudInformation.module.less';\nimport { getCloudProviderLogo } from '../DataStoreCloudProviderLogo';\nimport { useAppSelector } from '../../../../redux/hooks';\n\ninterface Props extends CcxComponentProps {\n dataStore?: DeploymentsItem;\n}\n\nfunction DataStoreOverviewCloudInformation({\n dataStore,\n testId = 'DataStoreOverviewCloudInformation',\n}: Props): ReactElement {\n const [cards, setCards] = useState([]);\n const [countryCode, setCountryCode] = useState(\n undefined\n );\n const { deploymentOptions } = useAppSelector(\n (state) => state.deploymentOptions\n );\n\n useEffect(() => {\n if (deploymentOptions && dataStore) {\n setCountryCode(\n deploymentOptions?.getCloudRegion(\n dataStore?.getCloudProvider().code,\n dataStore.cloudRegion.code\n )\n );\n }\n }, [dataStore, deploymentOptions]);\n\n useEffect(() => {\n if (dataStore) {\n const cardData = [\n {\n label: (\n \n Provider\n \n ),\n testId: `${testId}CardProvider`,\n content: (\n \n {getCloudProviderLogo(\n dataStore.getCloudProvider()\n )}\n
\n {dataStore.getFullCloudProviderName()}\n
\n \n }\n />\n ),\n span: 9,\n },\n {\n label: (\n \n Region\n \n ),\n testId: `${testId}CardRegion`,\n content: (\n \n {countryCode && (\n \n )}\n
\n {dataStore?.isLintasarta()\n ? dataStore?.preferredRegion\n : dataStore?.cloudRegion\n .display_code}\n
\n \n }\n />\n ),\n span: 8,\n },\n {\n label: (\n \n VPC\n \n ),\n testId: `${testId}CardVpc`,\n content: (\n
\n {dataStore.vpc ? (\n dataStore?.vpc?.getVpcName()\n ) : (\n \n Not available \n \n )}\n
\n ),\n span: 7,\n },\n ];\n\n if (!dataStore.getCloudProvider().isAws()) {\n cardData.pop();\n }\n\n setCards(cardData);\n }\n }, [dataStore, countryCode]);\n\n return (\n \n
\n {dataStore ? (\n <>\n
Cloud
\n
\n \n {cards.map((c: any, i: number) => {\n return (\n \n \n \n );\n })}\n \n
\n \n ) : (\n \n )}\n
\n \n );\n}\n\nexport default DataStoreOverviewCloudInformation;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../../core/CcxComponent';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\nimport LazyLoader from '../../../LazyLoader';\nimport styles from './DataStoreOverviewQueriesPerSecond.module.less';\nimport NoChartAvailable from '../../../ccx/common/NoChartAvailable';\nimport DataStoreChart from '../DataStoreChart';\n\ninterface Props extends CcxComponentProps {\n dataStore?: DeploymentsItem;\n}\n\nfunction DataStoreOverviewQueriesPerSecond({\n dataStore,\n testId = 'DataStoreOverviewQueriesPerSecond',\n}: Props): ReactElement {\n return (\n \n
\n {dataStore ? (\n <>\n
Queries per second
\n
\n {dataStore?.isDeploying() ||\n dataStore?.isDeleting() ||\n dataStore?.isStatusError() ||\n dataStore?.isStatusWarning() ? (\n \n ) : (\n \n )}\n
\n \n ) : (\n \n )}\n
\n \n );\n}\n\nexport default DataStoreOverviewQueriesPerSecond;\n","import { ReactElement } from 'react';\nimport CcxComponentProps from '../../../../core/CcxComponent';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\nimport Service from '../../../../types/Service';\nimport AppCodeCard from '../../../AppCodeCard';\nimport SecretText from '../../../SecretText';\nimport styles from './ServiceAccessConnectionInformation.module.less';\nimport useDatastoreServiceDsn from './useDatastoreServiceDsn';\n\ninterface Props extends CcxComponentProps {\n dataStore: DeploymentsItem;\n connectionMethod: string;\n service: Service;\n type?: string;\n}\n\nfunction ServiceAccessConnectionInformation({\n connectionMethod,\n dataStore,\n service,\n type = 'db',\n testId = 'ServiceAccessConnectionInformation',\n}: Props): ReactElement {\n const { username, password, database, dbType } = useDatastoreServiceDsn({\n dataStore,\n service,\n type,\n });\n\n const connectionString =\n connectionMethod === 'dsn'\n ? `${dbType}://${username}:${password}@${dataStore?.getPrimaryReplicaUrl(\n service\n )}${!dataStore?.isRedis() ? `/${database}` : ''}`\n : `mysql -uccxadmin -p${password} -h${dataStore?.getPrimaryReplicaUrl(\n service\n )} -P3306 ccxdb`;\n\n return (\n \n \n \n {connectionMethod === 'dsn' ? (\n <>\n
{dbType}
\n
://
\n \n
{`@${dataStore?.getPrimaryReplicaUrl(\n service\n )}${\n !dataStore?.isRedis() ? `/${database}` : ''\n }`}
\n \n ) : (\n <>\n
mysql -uccxadmin -p
\n
\n \n
\n
\n  -h\n {dataStore?.getPrimaryReplicaUrl(service)}\n
\n
 -P3306 ccxdb
\n \n )}\n \n \n \n );\n}\n\nexport default ServiceAccessConnectionInformation;\n","import { Col, Radio, Row } from 'antd';\nimport CcxComponentProps from '../../../../core/CcxComponent';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\nimport styles from './DataStoreOverviewAccessToServices.module.less';\nimport ServiceAccessConnectionInformation from '../services/ServiceAccessConnectionInformation';\nimport LazyLoader from '../../../LazyLoader';\nimport InfoIcon from '@severalnines/bar-frontend-components/build/lib/General/InfoIcon';\nimport { sortNodesByRole } from '../../../../core/helpers';\nimport Service from '../../../../types/Service';\nimport { useState } from 'react';\n\ninterface Props extends CcxComponentProps {\n dataStore: DeploymentsItem | undefined;\n services?: any;\n}\n\nfunction DataStoreOverviewAccessToServices({\n dataStore,\n services,\n testId = 'DataStoreOverviewAccessToServices',\n}: Props) {\n const getRoleNameWithInfo = (s: Service) => {\n if (s.isRoleReplica()) {\n return (\n \n Replica\n The replica points to a read-only node.\n }\n />\n \n );\n } else {\n return (\n \n Primary\n The primary points to a writeable node.\n }\n />\n \n );\n }\n };\n\n const uniqueRolesMap: Record = {}; // Object to keep track of unique roles\n const sortedDbServices = services && sortNodesByRole(services?.dbServices);\n\n const accessibleServices = (sortedDbServices || []).filter(\n (service: Service) => {\n const role = service.getRole();\n\n if (!uniqueRolesMap[role]) {\n if (\n (service.isRolePrimary() && dataStore?.getPrimaryUrl()) ||\n (service.isRoleReplica() && dataStore?.getReplicaUrl())\n ) {\n uniqueRolesMap[role] = true;\n return true;\n }\n }\n return false;\n }\n );\n\n const isMariaDBorMySQL = dataStore?.isMariaDb() || dataStore?.isPercona();\n\n const [connectionMethod, setConnectionMethod] = useState(\n isMariaDBorMySQL ? 'cli' : 'dsn'\n );\n\n const tabsOptions = [\n { label: 'CLI', value: 'cli' },\n { label: 'DSN', value: 'dsn' },\n ];\n\n if (accessibleServices.length === 0) return null;\n\n return (\n
\n
Connection information
\n {isMariaDBorMySQL && (\n \n \n \n setConnectionMethod(e.target.value)\n }\n optionType=\"button\"\n className={\n styles.DataStoreOverviewAccessToServicesRadioOptions\n }\n >\n {tabsOptions?.map(({ label, value: val }: any) => (\n \n {label}\n \n ))}\n \n \n \n )}\n\n {dataStore && accessibleServices ? (\n \n {accessibleServices?.map((s: Service) => {\n if (dataStore.isMSSQL() && s.isRoleReplica())\n return null;\n return (\n <>\n \n {getRoleNameWithInfo(s)}\n \n \n \n \n \n );\n })}\n \n ) : (\n \n )}\n
\n );\n}\nexport default DataStoreOverviewAccessToServices;\n","import { ReactElement } from 'react';\nimport CcxComponentProps from '../../../../core/CcxComponent';\nimport { Col, Row, Space } from 'antd';\nimport styles from './DataStoreOverview.module.less';\nimport DataStoreOverviewGeneralInformation from './DataStoreOverviewGeneralInformation';\nimport { useParams } from 'react-router';\nimport DataStoreOverviewServicesState from './DataStoreOverviewServicesState';\nimport DataStoreOverviewNetworkInformation from './DataStoreOverviewNetworkInformation';\nimport DataStoreOverviewCloudInformation from './DataStoreOverviewCloudInformation';\nimport useDataStoreServices from '../../../../core/hooks/useDataStoreServices';\nimport DataStoreOverviewQueriesPerSecond from './DataStoreOverviewQueriesPerSecond';\nimport DataStoreOverviewAccessToServices from './DataStoreOverviewAccessToServices';\n\ninterface UrlProps {\n dataStoreUuid: string;\n}\n\ninterface Props extends CcxComponentProps {\n dataStore: any;\n}\n\nfunction DataStoreOverview({\n testId = 'DataStoreOverview',\n dataStore,\n}: Props): ReactElement {\n const { dataStoreUuid } = useParams();\n\n const { services, loading } = useDataStoreServices({\n dataStoreUuid,\n });\n\n const isDataLoading = loading;\n\n return (\n
\n \n \n \n {(dataStore?.replica_url || dataStore?.primary_url) && (\n \n )}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n );\n}\n\nexport default DataStoreOverview;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { useHistory, useParams } from 'react-router';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport styles from './ProjectBreadcrumb.module.less';\nimport { Link } from 'react-router-dom';\nimport { Breadcrumb } from 'antd';\nimport { BASE_PAGE_HEADING, hideBreadcrumbs } from '../../core/CcxEnv';\nimport DeploymentsItem from '../../types/DeploymentsItem';\n\ninterface UrlProps {\n projectUuid: string;\n dataStoreUuid: string;\n vpcUuid: string;\n}\ninterface Props extends CcxComponentProps {\n deployment?: DeploymentsItem;\n}\n\nfunction ProjectBreadcrumb({\n deployment,\n testId = 'ProjectBreadcrumb',\n}: Props): ReactElement {\n const history = useHistory();\n const { projectUuid, dataStoreUuid } = useParams();\n const [name, setName] = useState('');\n const [vendor, setVendor] = useState('');\n const [version, setVersion] = useState('');\n\n useEffect(() => {\n if (deployment) {\n setVersion(deployment?.db?.dbVersion);\n setVendor(deployment?.getDbVendorName());\n setName(deployment?.getTruncatedName());\n }\n }, [deployment]);\n\n return (\n
\n {!hideBreadcrumbs && (\n \n \n \n {BASE_PAGE_HEADING}\n \n \n {name}\n \n )}\n
\n );\n}\n\nexport default ProjectBreadcrumb;\n","import { Parameter, ParameterProps } from './DbParameter';\n\nexport type DbParametersClassProps = {\n parameters: ParameterProps;\n};\n\nexport interface DbParametersInterface {\n parameters: ParameterProps;\n}\n\nexport default class DbParameters implements DbParametersInterface {\n readonly parameters: any;\n\n constructor(props: DbParametersClassProps) {\n this.parameters = Object.entries(props.parameters).map(\n ([name, prop]) => new Parameter(name, prop)\n );\n }\n}\n","import ApiService from './ApiService';\nimport { API_DB_CONFIGURATION } from '../core/CcxEnv';\nimport DbParameters from '../types/DbParameters';\n\n// constants\nconst API_URL = API_DB_CONFIGURATION;\n\nexport type UpdateDatabaseParametersPayload = {\n parameters: { [key: string]: { value: string } };\n};\n\nexport default class DatabaseConfigurationService extends ApiService {\n /**\n * Get list of Database parameters.\n */\n static async getDatabaseParameters(\n dataStoreUuid?: string\n ): Promise {\n const response = await this.request('GET', `${dataStoreUuid}`);\n return new DbParameters(response);\n }\n\n static async updateDatabaseParameters(\n dataStoreUuid: string,\n payload: UpdateDatabaseParametersPayload\n ) {\n const reqData = { data: payload };\n await this.request('PUT', `${dataStoreUuid}`, reqData);\n }\n\n protected static getApiUrl() {\n return API_URL;\n }\n}\n","import { Tooltip } from 'antd';\nimport { InfoCircleOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport styles from './DataStoreMaintenanceTooltip.module.less';\n\nfunction DataStoreMaintenanceTooltip() {\n return (\n \n \n The update will be performed using a roll-forward\n upgrade algorithm with the following steps:\n \n
    \n
  1. \n {' '}\n The oldest replica (or primary if no replica exist)\n will be selected first;\n
  2. \n
  3. \n A new node will be added with the same specification\n as the oldest node and join the datastore;\n
  4. \n
  5. The oldest node will be removed;
  6. \n
  7. \n If it is a primary-replica configuration then the\n primary will be updated last. A new node will be\n added, the new node will be promoted to become the\n new primary, and the old primary will be removed.\n
  8. \n
\n Please note:\n
    \n
  • \n Steps from 1 to 3 continues until all replicas (or\n primaries in case of a multi-primary setup) are\n updated.\n
  • \n
  • \n The FQDNs will be constant but the underlying IP\n addresses may change;\n
  • \n
  • \n There will be short service interruption during step\n 5, to promote the new primary.\n
  • \n
\n \n }\n >\n \n \n );\n}\n\nexport default DataStoreMaintenanceTooltip;\n","import { Alert, Badge, Button, Popconfirm } from 'antd';\nimport { Form, Row, Col } from 'antd';\nimport { Select } from 'antd';\nimport { ReactElement, useEffect } from 'react';\nimport CcxComponentProps from '../../../../core/CcxComponent';\nimport styles from './DataStoreSettingsMaintenance.module.less';\nimport './DatastoreSettingsDbParameters.less';\nimport { CheckCircleTwoTone } from '@ant-design/icons';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\nimport DataStoreMaintenanceTooltip from './DataStoreMaintenanceTooltip';\nimport { useRBAC } from '../../../../core/hooks/useRBAC';\nimport { CAN_MODIFY_DATASTORE_SETTINGS } from '../../../../core/PermissionRoles';\n\nconst timeSlots = Array(24)\n .fill({ label: '', value: 0 })\n .map((_, index): { label: string; value: number } => ({\n label: index < 10 ? `0${index}:00` : `${index}:00`,\n value: index,\n }));\n\ninterface Props extends CcxComponentProps {\n form: any;\n maintenanceDayOfWeek?: number;\n maintenanceStartHour?: number;\n onDayOfWeekChange: Function;\n onTimeWindowChange: Function;\n canUpgradeTo: string | undefined;\n handleUpgradeTo: () => Promise;\n filteredJob: any;\n currentDeployment?: DeploymentsItem | null | undefined;\n}\n\nfunction DataStoreSettingsMaintenance({\n currentDeployment,\n form,\n maintenanceDayOfWeek,\n maintenanceStartHour,\n onDayOfWeekChange,\n onTimeWindowChange,\n canUpgradeTo,\n handleUpgradeTo,\n filteredJob,\n testId = 'DataStoreSettingsMaintenance',\n}: Props): ReactElement {\n const { hasPermission } = useRBAC();\n\n useEffect(() => {\n if (maintenanceDayOfWeek) form.setFieldsValue({ maintenanceDayOfWeek });\n if (maintenanceStartHour && maintenanceStartHour >= 0) {\n form.setFieldsValue({ maintenanceStartHour });\n }\n }, [maintenanceDayOfWeek, maintenanceStartHour]);\n\n const handleOnDayOfWeekChange = (value: number) => {\n if (maintenanceDayOfWeek !== value) {\n onDayOfWeekChange && onDayOfWeekChange(value);\n }\n };\n\n const handleOnTimeWindowChange = (value: number) => {\n if (maintenanceStartHour !== value) {\n onTimeWindowChange && onTimeWindowChange(value, value + 2);\n }\n };\n\n const dataStoreMaintenanceCard = () => {\n return (\n <>\n {canUpgradeTo ? (\n <>\n
\n Upgrades available\n
\n \n There is a pending upgrade,{' '}\n select a time and date when the upgrade will\n be started or select Upgrade now to perform\n the upgrade immediately.\n \n \n Note: The update will be performed using a\n roll-forward upgrade algorithm.\n \n \n \n ) : (\n \n Please select your preferred time settings when we could\n work on regular maintenance.\n \n )}\n
\n \n \n \n \n \n \n Sunday\n \n \n Monday\n \n \n Tuesday\n \n \n Wednesday\n \n \n Thursday\n \n \n Friday\n \n \n Saturday\n \n \n \n \n \n \n \n \n \n {timeSlots?.map(\n (t: {\n label: string;\n value: number;\n }) => {\n return (\n \n {t.label}\n \n );\n }\n )}\n \n \n \n \n {hasPermission(CAN_MODIFY_DATASTORE_SETTINGS) &&\n canUpgradeTo && (\n <>\n \n \n or\n 0\n }\n >\n \n 0 ||\n !currentDeployment?.isOperable\n }\n >\n Upgrade now\n \n \n \n \n \n )}\n \n
\n \n );\n };\n\n return (\n \n

\n \n Maintenance\n {' '}\n {canUpgradeTo && }\n

\n\n {canUpgradeTo ? (\n \n ) : (\n <>\n
\n \n Your system is up to date\n
\n {dataStoreMaintenanceCard()}\n \n )}\n \n );\n}\n\nexport default DataStoreSettingsMaintenance;\n","import React, { ReactElement, useEffect } from 'react';\nimport { Row, Col, Form, Input } from 'antd';\nimport CcxComponentProps from '../../../../core/CcxComponent';\nimport styles from './DataStoreSettingsNameChange.module.less';\nimport { useRBAC } from '../../../../core/hooks/useRBAC';\nimport { CAN_MODIFY_DATASTORE_SETTINGS } from '../../../../core/PermissionRoles';\n\ninterface Props extends CcxComponentProps {\n dataStoreName?: string;\n form: any;\n onChange: Function;\n}\n\nfunction DataStoreSettingsNameChange({\n dataStoreName,\n form,\n onChange,\n testId = 'DataStoreSettingsNameChange',\n}: Props): ReactElement {\n const { hasPermission } = useRBAC();\n\n useEffect(() => {\n if (dataStoreName) form.setFieldsValue({ dataStoreName });\n }, [dataStoreName]);\n\n const handleOnChange = () => {\n if (dataStoreName !== form.getFieldValue('dataStoreName')) {\n onChange && onChange(form.getFieldValue('dataStoreName'));\n }\n };\n\n return (\n \n

Datastore name

\n
\n \n \n \n \n \n \n \n \n \n
\n \n );\n}\n\nexport default DataStoreSettingsNameChange;\n","import { BackupSettingsDTO } from '../sdk/BackupsApi';\n\nexport type BackupSettingsClassProps = BackupSettingsDTO & {\n full_source?: number;\n inc_source?: number;\n inc_node_id?: string;\n full_node_id?: string;\n full_host?: string;\n inc_host?: string;\n};\n\nexport interface BackupSettingsInterface {\n fullFrequency?: number;\n fullStartHour?: number;\n incFrequency?: number;\n fullCron?: string;\n incCron?: string;\n incNodeId?: string;\n fullNodeId?: string;\n fullHostName?: string;\n incHostName?: string;\n}\n\nexport default class BackupSettings implements BackupSettingsInterface {\n readonly fullFrequency?: number;\n readonly fullStartHour?: number;\n readonly incFrequency?: number;\n readonly fullCron?: string;\n readonly incCron?: string;\n readonly incNodeId?: string;\n readonly fullNodeId?: string;\n readonly fullHostName?: string;\n readonly incHostName?: string;\n\n constructor(props: BackupSettingsClassProps) {\n this.fullFrequency = props.full_frequency || props.full_source;\n this.fullStartHour = props.full_start_hour;\n this.incFrequency = props.inc_frequency || props.inc_source;\n this.fullCron = props.full_cron;\n this.incCron = props.inc_cron;\n this.incNodeId = props.inc_node_id;\n this.fullNodeId = props.full_node_id;\n this.incHostName = props.inc_host;\n this.fullHostName = props.full_host;\n }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * CCX Backup Service\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: v1.0.0\n * Contact: support@severalnines.com\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport type { Configuration } from './configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport type { AxiosPromise, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport globalAxios from 'axios';\n\nexport const BASE_PATH = \"https://ccx.s9s-dev.net/api/backup/api/v1\".replace(/\\/+$/, \"\");\n\n/**\n *\n * @export\n */\nexport const COLLECTION_FORMATS = {\n csv: \",\",\n ssv: \" \",\n tsv: \"\\t\",\n pipes: \"|\",\n};\n\n/**\n *\n * @export\n * @interface RequestArgs\n */\nexport interface RequestArgs {\n url: string;\n options: AxiosRequestConfig;\n}\n\n/**\n *\n * @export\n * @class BaseAPI\n */\nexport class BaseAPI {\n protected configuration: Configuration | undefined;\n\n constructor(configuration?: Configuration, protected basePath: string = BASE_PATH, protected axios: AxiosInstance = globalAxios) {\n if (configuration) {\n this.configuration = configuration;\n this.basePath = configuration.basePath || this.basePath;\n }\n }\n};\n\n/**\n *\n * @export\n * @class RequiredError\n * @extends {Error}\n */\nexport class RequiredError extends Error {\n constructor(public field: string, msg?: string) {\n super(msg);\n this.name = \"RequiredError\"\n }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * CCX Backup Service\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: v1.0.0\n * Contact: support@severalnines.com\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport type { Configuration } from \"./configuration\";\nimport type { RequestArgs } from \"./base\";\nimport type { AxiosInstance, AxiosResponse } from 'axios';\nimport { RequiredError } from \"./base\";\n\n/**\n *\n * @export\n */\nexport const DUMMY_BASE_URL = 'https://example.com'\n\n/**\n *\n * @throws {RequiredError}\n * @export\n */\nexport const assertParamExists = function (functionName: string, paramName: string, paramValue: unknown) {\n if (paramValue === null || paramValue === undefined) {\n throw new RequiredError(paramName, `Required parameter ${paramName} was null or undefined when calling ${functionName}.`);\n }\n}\n\n/**\n *\n * @export\n */\nexport const setApiKeyToObject = async function (object: any, keyParamName: string, configuration?: Configuration) {\n if (configuration && configuration.apiKey) {\n const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n ? await configuration.apiKey(keyParamName)\n : await configuration.apiKey;\n object[keyParamName] = localVarApiKeyValue;\n }\n}\n\n/**\n *\n * @export\n */\nexport const setBasicAuthToObject = function (object: any, configuration?: Configuration) {\n if (configuration && (configuration.username || configuration.password)) {\n object[\"auth\"] = { username: configuration.username, password: configuration.password };\n }\n}\n\n/**\n *\n * @export\n */\nexport const setBearerAuthToObject = async function (object: any, configuration?: Configuration) {\n if (configuration && configuration.accessToken) {\n const accessToken = typeof configuration.accessToken === 'function'\n ? await configuration.accessToken()\n : await configuration.accessToken;\n object[\"Authorization\"] = \"Bearer \" + accessToken;\n }\n}\n\n/**\n *\n * @export\n */\nexport const setOAuthToObject = async function (object: any, name: string, scopes: string[], configuration?: Configuration) {\n if (configuration && configuration.accessToken) {\n const localVarAccessTokenValue = typeof configuration.accessToken === 'function'\n ? await configuration.accessToken(name, scopes)\n : await configuration.accessToken;\n object[\"Authorization\"] = \"Bearer \" + localVarAccessTokenValue;\n }\n}\n\nfunction setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = \"\"): void {\n if (parameter == null) return;\n if (typeof parameter === \"object\") {\n if (Array.isArray(parameter)) {\n (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key));\n } \n else {\n Object.keys(parameter).forEach(currentKey => \n setFlattenedQueryParams(urlSearchParams, parameter[currentKey], `${key}${key !== '' ? '.' : ''}${currentKey}`)\n );\n }\n } \n else {\n if (urlSearchParams.has(key)) {\n urlSearchParams.append(key, parameter);\n } \n else {\n urlSearchParams.set(key, parameter);\n }\n }\n}\n\n/**\n *\n * @export\n */\nexport const setSearchParams = function (url: URL, ...objects: any[]) {\n const searchParams = new URLSearchParams(url.search);\n setFlattenedQueryParams(searchParams, objects);\n url.search = searchParams.toString();\n}\n\n/**\n *\n * @export\n */\nexport const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) {\n const nonString = typeof value !== 'string';\n const needsSerialization = nonString && configuration && configuration.isJsonMime\n ? configuration.isJsonMime(requestOptions.headers['Content-Type'])\n : nonString;\n return needsSerialization\n ? JSON.stringify(value !== undefined ? value : {})\n : (value || \"\");\n}\n\n/**\n *\n * @export\n */\nexport const toPathString = function (url: URL) {\n return url.pathname + url.search + url.hash\n}\n\n/**\n *\n * @export\n */\nexport const createRequestFunction = function (axiosArgs: RequestArgs, globalAxios: AxiosInstance, BASE_PATH: string, configuration?: Configuration) {\n return >(axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n const axiosRequestArgs = {...axiosArgs.options, url: (configuration?.basePath || basePath) + axiosArgs.url};\n return axios.request(axiosRequestArgs);\n };\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * CCX Backup Service\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: v1.0.0\n * Contact: support@severalnines.com\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport type { Configuration } from './configuration';\nimport type { AxiosPromise, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport globalAxios from 'axios';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common';\nimport type { RequestArgs } from './base';\n// @ts-ignore\nimport { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError } from './base';\n\n/**\n * \n * @export\n * @interface Backup\n */\nexport interface Backup {\n /**\n * \n * @type {number}\n * @memberof Backup\n */\n 'backup_id'?: number;\n /**\n * \n * @type {number}\n * @memberof Backup\n */\n 'parent_id'?: number;\n /**\n * \n * @type {number}\n * @memberof Backup\n */\n 'chain_up'?: number;\n /**\n * \n * @type {number}\n * @memberof Backup\n */\n 'children'?: number;\n /**\n * \n * @type {boolean}\n * @memberof Backup\n */\n 'has_children'?: boolean;\n /**\n * \n * @type {string}\n * @memberof Backup\n */\n 'backup_method'?: string;\n /**\n * \n * @type {string}\n * @memberof Backup\n */\n 'backup_type'?: string;\n /**\n * \n * @type {string}\n * @memberof Backup\n */\n 'status'?: string;\n /**\n * Backup size in bytes\n * @type {number}\n * @memberof Backup\n */\n 'size'?: number;\n /**\n * \n * @type {string}\n * @memberof Backup\n */\n 'started_at'?: string;\n /**\n * \n * @type {string}\n * @memberof Backup\n */\n 'ended_at'?: string | null;\n}\n/**\n * \n * @export\n * @interface BackupsDatastoreUuidBackupIdRestorePostRequest\n */\nexport interface BackupsDatastoreUuidBackupIdRestorePostRequest {\n /**\n * PITR stop time in RFC3339 format\n * @type {string}\n * @memberof BackupsDatastoreUuidBackupIdRestorePostRequest\n */\n 'pitr_stop_time'?: string;\n}\n/**\n * \n * @export\n * @interface BackupsDatastoreUuidGet200Response\n */\nexport interface BackupsDatastoreUuidGet200Response {\n /**\n * \n * @type {Array}\n * @memberof BackupsDatastoreUuidGet200Response\n */\n 'backups': Array;\n /**\n * \n * @type {number}\n * @memberof BackupsDatastoreUuidGet200Response\n */\n 'total': number;\n}\n/**\n * \n * @export\n * @interface BackupsDatastoreUuidGet500Response\n */\nexport interface BackupsDatastoreUuidGet500Response {\n /**\n * \n * @type {number}\n * @memberof BackupsDatastoreUuidGet500Response\n */\n 'code'?: number;\n /**\n * \n * @type {string}\n * @memberof BackupsDatastoreUuidGet500Response\n */\n 'err': string;\n}\n/**\n * \n * @export\n * @interface Pbtime\n */\nexport interface Pbtime {\n /**\n * \n * @type {number}\n * @memberof Pbtime\n */\n 'seconds'?: number;\n /**\n * \n * @type {number}\n * @memberof Pbtime\n */\n 'nanos'?: number;\n}\n/**\n * \n * @export\n * @interface Restore\n */\nexport interface Restore {\n /**\n * \n * @type {string}\n * @memberof Restore\n */\n 'user_id'?: string;\n /**\n * \n * @type {string}\n * @memberof Restore\n */\n 'restore_uuid'?: string;\n /**\n * \n * @type {string}\n * @memberof Restore\n */\n 'datastore_uuid'?: string;\n /**\n * \n * @type {string}\n * @memberof Restore\n */\n 'controller_uuid'?: string;\n /**\n * \n * @type {number}\n * @memberof Restore\n */\n 'cmon_cluster_id'?: number;\n /**\n * \n * @type {number}\n * @memberof Restore\n */\n 'cmon_job_id'?: number;\n /**\n * \n * @type {number}\n * @memberof Restore\n */\n 'cmon_backup_id'?: number;\n /**\n * \n * @type {number}\n * @memberof Restore\n */\n 'progress'?: number;\n /**\n * DEFINED = 0; DEQUEUED = 1; RUNNING = 2; RUNNING2 = 3; RUNNING3 = 4; RUNNING_EXT = 5; ABORTED = 6; FINISHED = 7; FAILED = 8; \n * @type {number}\n * @memberof Restore\n */\n 'status'?: RestoreStatusEnum;\n /**\n * \n * @type {string}\n * @memberof Restore\n */\n 'status_text'?: string;\n /**\n * \n * @type {Pbtime}\n * @memberof Restore\n */\n 'created_at'?: Pbtime;\n /**\n * \n * @type {Pbtime}\n * @memberof Restore\n */\n 'updated_at'?: Pbtime;\n /**\n * \n * @type {Pbtime}\n * @memberof Restore\n */\n 'started_at'?: Pbtime;\n /**\n * \n * @type {Pbtime}\n * @memberof Restore\n */\n 'ended_at'?: Pbtime;\n /**\n * \n * @type {Backup}\n * @memberof Restore\n */\n 'backup'?: Backup;\n}\n\nexport const RestoreStatusEnum = {\n NUMBER_0: 0,\n NUMBER_1: 1,\n NUMBER_2: 2,\n NUMBER_3: 3,\n NUMBER_4: 4,\n NUMBER_5: 5,\n NUMBER_6: 6,\n NUMBER_7: 7,\n NUMBER_8: 8\n} as const;\n\nexport type RestoreStatusEnum = typeof RestoreStatusEnum[keyof typeof RestoreStatusEnum];\n\n/**\n * \n * @export\n * @interface RestoresDatastoreUuidGet200Response\n */\nexport interface RestoresDatastoreUuidGet200Response {\n /**\n * \n * @type {Array}\n * @memberof RestoresDatastoreUuidGet200Response\n */\n 'restores'?: Array;\n /**\n * \n * @type {number}\n * @memberof RestoresDatastoreUuidGet200Response\n */\n 'total'?: number;\n}\n/**\n * \n * @export\n * @interface RetentionSettings\n */\nexport interface RetentionSettings {\n /**\n * Positive number to indicate number of days for backup retention\n * @type {number}\n * @memberof RetentionSettings\n */\n 'retention_days'?: number;\n}\n/**\n * \n * @export\n * @interface Schedule\n */\nexport interface Schedule {\n /**\n * \n * @type {string}\n * @memberof Schedule\n */\n 'backup_method'?: string;\n /**\n * \n * @type {string}\n * @memberof Schedule\n */\n 'backup_type'?: ScheduleBackupTypeEnum;\n /**\n * \n * @type {string}\n * @memberof Schedule\n */\n 'status'?: string;\n /**\n * Schedule in crontab format\n * @type {string}\n * @memberof Schedule\n */\n 'recurrence'?: string;\n /**\n * \n * @type {string}\n * @memberof Schedule\n */\n 'created_at'?: string;\n /**\n * \n * @type {string}\n * @memberof Schedule\n */\n 'host'?: string;\n}\n\nexport const ScheduleBackupTypeEnum = {\n Full: 'full',\n Incremental: 'incremental'\n} as const;\n\nexport type ScheduleBackupTypeEnum = typeof ScheduleBackupTypeEnum[keyof typeof ScheduleBackupTypeEnum];\n\n/**\n * \n * @export\n * @interface Settings\n */\nexport interface Settings {\n /**\n * How often to run a full backup. 0 - never; 1 - hourly; 2 - daily.\n * @type {number}\n * @memberof Settings\n */\n 'full_frequency'?: SettingsFullFrequencyEnum;\n /**\n * When to start a full backup if it is set to \\\"2 - daily\\\".\n * @type {number}\n * @memberof Settings\n */\n 'full_start_hour'?: number;\n /**\n * How often to run incremental backups. 0 - never; 1 - every5 minutes.\n * @type {number}\n * @memberof Settings\n */\n 'inc_frequency'?: SettingsIncFrequencyEnum;\n /**\n * Valid crontab string to schedule full_cron\n * @type {string}\n * @memberof Settings\n */\n 'full_cron'?: string;\n /**\n * Valid crontab string to schedule incremental_cron\n * @type {string}\n * @memberof Settings\n */\n 'inc_cron'?: string;\n}\n\nexport const SettingsFullFrequencyEnum = {\n NUMBER_0: 0,\n NUMBER_1: 1,\n NUMBER_2: 2\n} as const;\n\nexport type SettingsFullFrequencyEnum = typeof SettingsFullFrequencyEnum[keyof typeof SettingsFullFrequencyEnum];\nexport const SettingsIncFrequencyEnum = {\n NUMBER_0: 0,\n NUMBER_1: 1\n} as const;\n\nexport type SettingsIncFrequencyEnum = typeof SettingsIncFrequencyEnum[keyof typeof SettingsIncFrequencyEnum];\n\n/**\n * \n * @export\n * @interface SettingsSet\n */\nexport interface SettingsSet {\n /**\n * \n * @type {SettingsSetFull}\n * @memberof SettingsSet\n */\n 'full'?: SettingsSetFull;\n /**\n * \n * @type {SettingsSetIncremental}\n * @memberof SettingsSet\n */\n 'incremental'?: SettingsSetIncremental;\n /**\n * \n * @type {string}\n * @memberof SettingsSet\n */\n}\n/**\n * \n * @export\n * @interface SettingsSetFull\n */\nexport interface SettingsSetFull {\n /**\n * How often to run a full backup. 0 - never; 1 - hourly; 2 - daily.\n * @type {number}\n * @memberof SettingsSetFull\n */\n 'frequency'?: SettingsSetFullFrequencyEnum;\n /**\n * When to start a full backup if it is set to \\\"2 - daily\\\".\n * @type {number}\n * @memberof SettingsSetFull\n */\n 'start_hour'?: number;\n /**\n * Valid crontab string to schedule full backup\n * @type {string}\n * @memberof SettingsSetFull\n */\n 'cron'?: string;\n /**\n * Valid crontab string to schedule full backup\n * @type {string}\n * @memberof SettingsSetFull\n */\n 'host'?: string \n}\n\nexport const SettingsSetFullFrequencyEnum = {\n NUMBER_0: 0,\n NUMBER_1: 1,\n NUMBER_2: 2\n} as const;\n\nexport type SettingsSetFullFrequencyEnum = typeof SettingsSetFullFrequencyEnum[keyof typeof SettingsSetFullFrequencyEnum];\n\n/**\n * \n * @export\n * @interface SettingsSetIncremental\n */\nexport interface SettingsSetIncremental {\n /**\n * How often to run incremental backups. 0 - never; 1 - every 5 minutes.\n * @type {number}\n * @memberof SettingsSetIncremental\n */\n 'frequency'?: SettingsSetIncrementalFrequencyEnum;\n /**\n * Valid crontab string to schedule incremental backup\n * @type {string}\n * @memberof SettingsSetIncremental\n */\n 'cron'?: string;\n /**\n * Valid crontab string to schedule incremental backup\n * @type {string}\n * @memberof SettingsSetIncremental\n */\n 'host'?: string;\n}\n\nexport const SettingsSetIncrementalFrequencyEnum = {\n NUMBER_0: 0,\n NUMBER_1: 1\n} as const;\n\nexport type SettingsSetIncrementalFrequencyEnum = typeof SettingsSetIncrementalFrequencyEnum[keyof typeof SettingsSetIncrementalFrequencyEnum];\n\n\n/**\n * BackupApi - axios parameter creator\n * @export\n */\nexport const BackupApiAxiosParamCreator = function (configuration?: Configuration) {\n return {\n /**\n * \n * @summary Backup schedules list\n * @param {string} datastoreUuid \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n backupSchedulesDatastoreUuidGet: async (datastoreUuid: string, options: AxiosRequestConfig = {}): Promise => {\n // verify required parameter 'datastoreUuid' is not null or undefined\n assertParamExists('backupSchedulesDatastoreUuidGet', 'datastoreUuid', datastoreUuid)\n const localVarPath = `/backup_schedules/{datastore_uuid}`\n .replace(`{${\"datastore_uuid\"}}`, encodeURIComponent(String(datastoreUuid)));\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication cookieAuth required\n\n\n \n setSearchParams(localVarUrlObj, localVarQueryParameter);\n let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n /**\n * \n * @summary Backups list\n * @param {string} datastoreUuid \n * @param {number} [parentId] \n * @param {number} [page] \n * @param {number} [perPage] \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n backupsDatastoreUuidGet: async (datastoreUuid: string, parentId?: number, page?: number, perPage?: number, options: AxiosRequestConfig = {}): Promise => {\n // verify required parameter 'datastoreUuid' is not null or undefined\n assertParamExists('backupsDatastoreUuidGet', 'datastoreUuid', datastoreUuid)\n const localVarPath = `/backups/{datastore_uuid}`\n .replace(`{${\"datastore_uuid\"}}`, encodeURIComponent(String(datastoreUuid)));\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication cookieAuth required\n\n if (parentId !== undefined) {\n localVarQueryParameter['parent_id'] = parentId;\n }\n\n if (page !== undefined) {\n localVarQueryParameter['page'] = page;\n }\n\n if (perPage !== undefined) {\n localVarQueryParameter['per_page'] = perPage;\n }\n\n\n \n setSearchParams(localVarUrlObj, localVarQueryParameter);\n let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n }\n};\n\n/**\n * BackupApi - functional programming interface\n * @export\n */\nexport const BackupApiFp = function(configuration?: Configuration) {\n const localVarAxiosParamCreator = BackupApiAxiosParamCreator(configuration)\n return {\n /**\n * \n * @summary Backup schedules list\n * @param {string} datastoreUuid \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async backupSchedulesDatastoreUuidGet(datastoreUuid: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> {\n const localVarAxiosArgs = await localVarAxiosParamCreator.backupSchedulesDatastoreUuidGet(datastoreUuid, options);\n return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);\n },\n /**\n * \n * @summary Backups list\n * @param {string} datastoreUuid \n * @param {number} [parentId] \n * @param {number} [page] \n * @param {number} [perPage] \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async backupsDatastoreUuidGet(datastoreUuid: string, parentId?: number, page?: number, perPage?: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {\n const localVarAxiosArgs = await localVarAxiosParamCreator.backupsDatastoreUuidGet(datastoreUuid, parentId, page, perPage, options);\n return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);\n },\n }\n};\n\n/**\n * BackupApi - factory interface\n * @export\n */\nexport const BackupApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n const localVarFp = BackupApiFp(configuration)\n return {\n /**\n * \n * @summary Backup schedules list\n * @param {string} datastoreUuid \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n backupSchedulesDatastoreUuidGet(datastoreUuid: string, options?: any): AxiosPromise> {\n return localVarFp.backupSchedulesDatastoreUuidGet(datastoreUuid, options).then((request) => request(axios, basePath));\n },\n /**\n * \n * @summary Backups list\n * @param {string} datastoreUuid \n * @param {number} [parentId] \n * @param {number} [page] \n * @param {number} [perPage] \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n backupsDatastoreUuidGet(datastoreUuid: string, parentId?: number, page?: number, perPage?: number, options?: any): AxiosPromise {\n return localVarFp.backupsDatastoreUuidGet(datastoreUuid, parentId, page, perPage, options).then((request) => request(axios, basePath));\n },\n };\n};\n\n/**\n * BackupApi - object-oriented interface\n * @export\n * @class BackupApi\n * @extends {BaseAPI}\n */\nexport class BackupApi extends BaseAPI {\n /**\n * \n * @summary Backup schedules list\n * @param {string} datastoreUuid \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof BackupApi\n */\n public backupSchedulesDatastoreUuidGet(datastoreUuid: string, options?: AxiosRequestConfig) {\n return BackupApiFp(this.configuration).backupSchedulesDatastoreUuidGet(datastoreUuid, options).then((request) => request(this.axios, this.basePath));\n }\n\n /**\n * \n * @summary Backups list\n * @param {string} datastoreUuid \n * @param {number} [parentId] \n * @param {number} [page] \n * @param {number} [perPage] \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof BackupApi\n */\n public backupsDatastoreUuidGet(datastoreUuid: string, parentId?: number, page?: number, perPage?: number, options?: AxiosRequestConfig) {\n return BackupApiFp(this.configuration).backupsDatastoreUuidGet(datastoreUuid, parentId, page, perPage, options).then((request) => request(this.axios, this.basePath));\n }\n}\n\n\n/**\n * RestoreApi - axios parameter creator\n * @export\n */\nexport const RestoreApiAxiosParamCreator = function (configuration?: Configuration) {\n return {\n /**\n * \n * @summary Restore a backup\n * @param {string} datastoreUuid \n * @param {number} backupId \n * @param {BackupsDatastoreUuidBackupIdRestorePostRequest} [backupsDatastoreUuidBackupIdRestorePostRequest] \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n backupsDatastoreUuidBackupIdRestorePost: async (datastoreUuid: string, backupId: number, backupsDatastoreUuidBackupIdRestorePostRequest?: BackupsDatastoreUuidBackupIdRestorePostRequest, options: AxiosRequestConfig = {}): Promise => {\n // verify required parameter 'datastoreUuid' is not null or undefined\n assertParamExists('backupsDatastoreUuidBackupIdRestorePost', 'datastoreUuid', datastoreUuid)\n // verify required parameter 'backupId' is not null or undefined\n assertParamExists('backupsDatastoreUuidBackupIdRestorePost', 'backupId', backupId)\n const localVarPath = `/backups/{datastore_uuid}/{backup_id}/restore`\n .replace(`{${\"datastore_uuid\"}}`, encodeURIComponent(String(datastoreUuid)))\n .replace(`{${\"backup_id\"}}`, encodeURIComponent(String(backupId)));\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication cookieAuth required\n\n\n \n localVarHeaderParameter['Content-Type'] = 'application/json';\n\n setSearchParams(localVarUrlObj, localVarQueryParameter);\n let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n localVarRequestOptions.data = serializeDataIfNeeded(backupsDatastoreUuidBackupIdRestorePostRequest, localVarRequestOptions, configuration)\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n /**\n * \n * @summary List backup restore jobs\n * @param {string} datastoreUuid \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n restoresDatastoreUuidGet: async (datastoreUuid: string, options: AxiosRequestConfig = {}): Promise => {\n // verify required parameter 'datastoreUuid' is not null or undefined\n assertParamExists('restoresDatastoreUuidGet', 'datastoreUuid', datastoreUuid)\n const localVarPath = `/restores/{datastore_uuid}`\n .replace(`{${\"datastore_uuid\"}}`, encodeURIComponent(String(datastoreUuid)));\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication cookieAuth required\n\n\n \n setSearchParams(localVarUrlObj, localVarQueryParameter);\n let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n }\n};\n\n/**\n * RestoreApi - functional programming interface\n * @export\n */\nexport const RestoreApiFp = function(configuration?: Configuration) {\n const localVarAxiosParamCreator = RestoreApiAxiosParamCreator(configuration)\n return {\n /**\n * \n * @summary Restore a backup\n * @param {string} datastoreUuid \n * @param {number} backupId \n * @param {BackupsDatastoreUuidBackupIdRestorePostRequest} [backupsDatastoreUuidBackupIdRestorePostRequest] \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async backupsDatastoreUuidBackupIdRestorePost(datastoreUuid: string, backupId: number, backupsDatastoreUuidBackupIdRestorePostRequest?: BackupsDatastoreUuidBackupIdRestorePostRequest, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {\n const localVarAxiosArgs = await localVarAxiosParamCreator.backupsDatastoreUuidBackupIdRestorePost(datastoreUuid, backupId, backupsDatastoreUuidBackupIdRestorePostRequest, options);\n return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);\n },\n /**\n * \n * @summary List backup restore jobs\n * @param {string} datastoreUuid \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async restoresDatastoreUuidGet(datastoreUuid: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {\n const localVarAxiosArgs = await localVarAxiosParamCreator.restoresDatastoreUuidGet(datastoreUuid, options);\n return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);\n },\n }\n};\n\n/**\n * RestoreApi - factory interface\n * @export\n */\nexport const RestoreApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n const localVarFp = RestoreApiFp(configuration)\n return {\n /**\n * \n * @summary Restore a backup\n * @param {string} datastoreUuid \n * @param {number} backupId \n * @param {BackupsDatastoreUuidBackupIdRestorePostRequest} [backupsDatastoreUuidBackupIdRestorePostRequest] \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n backupsDatastoreUuidBackupIdRestorePost(datastoreUuid: string, backupId: number, backupsDatastoreUuidBackupIdRestorePostRequest?: BackupsDatastoreUuidBackupIdRestorePostRequest, options?: any): AxiosPromise {\n return localVarFp.backupsDatastoreUuidBackupIdRestorePost(datastoreUuid, backupId, backupsDatastoreUuidBackupIdRestorePostRequest, options).then((request) => request(axios, basePath));\n },\n /**\n * \n * @summary List backup restore jobs\n * @param {string} datastoreUuid \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n restoresDatastoreUuidGet(datastoreUuid: string, options?: any): AxiosPromise {\n return localVarFp.restoresDatastoreUuidGet(datastoreUuid, options).then((request) => request(axios, basePath));\n },\n };\n};\n\n/**\n * RestoreApi - object-oriented interface\n * @export\n * @class RestoreApi\n * @extends {BaseAPI}\n */\nexport class RestoreApi extends BaseAPI {\n /**\n * \n * @summary Restore a backup\n * @param {string} datastoreUuid \n * @param {number} backupId \n * @param {BackupsDatastoreUuidBackupIdRestorePostRequest} [backupsDatastoreUuidBackupIdRestorePostRequest] \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof RestoreApi\n */\n public backupsDatastoreUuidBackupIdRestorePost(datastoreUuid: string, backupId: number, backupsDatastoreUuidBackupIdRestorePostRequest?: BackupsDatastoreUuidBackupIdRestorePostRequest, options?: AxiosRequestConfig) {\n return RestoreApiFp(this.configuration).backupsDatastoreUuidBackupIdRestorePost(datastoreUuid, backupId, backupsDatastoreUuidBackupIdRestorePostRequest, options).then((request) => request(this.axios, this.basePath));\n }\n\n /**\n * \n * @summary List backup restore jobs\n * @param {string} datastoreUuid \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof RestoreApi\n */\n public restoresDatastoreUuidGet(datastoreUuid: string, options?: AxiosRequestConfig) {\n return RestoreApiFp(this.configuration).restoresDatastoreUuidGet(datastoreUuid, options).then((request) => request(this.axios, this.basePath));\n }\n}\n\n\n/**\n * SettingsApi - axios parameter creator\n * @export\n */\nexport const SettingsApiAxiosParamCreator = function (configuration?: Configuration) {\n return {\n /**\n * \n * @summary Backup settings of a datastore\n * @param {string} datastoreUuid \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n settingsDatastoreUuidGet: async (datastoreUuid: string, options: AxiosRequestConfig = {}): Promise => {\n // verify required parameter 'datastoreUuid' is not null or undefined\n assertParamExists('settingsDatastoreUuidGet', 'datastoreUuid', datastoreUuid)\n const localVarPath = `/settings/{datastore_uuid}`\n .replace(`{${\"datastore_uuid\"}}`, encodeURIComponent(String(datastoreUuid)));\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication cookieAuth required\n\n\n \n setSearchParams(localVarUrlObj, localVarQueryParameter);\n let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n /**\n * \n * @summary Update backup settings of a datastore. At least one of \\'full\\' or \\'incremental\\' must be set.\n * @param {string} datastoreUuid \n * @param {SettingsSet} settingsSet Backup settings\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n settingsDatastoreUuidPatch: async (datastoreUuid: string, settingsSet: SettingsSet, options: AxiosRequestConfig = {}): Promise => {\n // verify required parameter 'datastoreUuid' is not null or undefined\n assertParamExists('settingsDatastoreUuidPatch', 'datastoreUuid', datastoreUuid)\n // verify required parameter 'settingsSet' is not null or undefined\n assertParamExists('settingsDatastoreUuidPatch', 'settingsSet', settingsSet)\n const localVarPath = `/settings/{datastore_uuid}`\n .replace(`{${\"datastore_uuid\"}}`, encodeURIComponent(String(datastoreUuid)));\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication cookieAuth required\n\n\n \n localVarHeaderParameter['Content-Type'] = 'application/json';\n\n setSearchParams(localVarUrlObj, localVarQueryParameter);\n let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n localVarRequestOptions.data = serializeDataIfNeeded(settingsSet, localVarRequestOptions, configuration)\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n /**\n * \n * @summary Backup settings of a datastore\n * @param {string} datastoreUuid \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n settingsDatastoreUuidRetentionGet: async (datastoreUuid: string, options: AxiosRequestConfig = {}): Promise => {\n // verify required parameter 'datastoreUuid' is not null or undefined\n assertParamExists('settingsDatastoreUuidRetentionGet', 'datastoreUuid', datastoreUuid)\n const localVarPath = `/settings/{datastore_uuid}/retention`\n .replace(`{${\"datastore_uuid\"}}`, encodeURIComponent(String(datastoreUuid)));\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication cookieAuth required\n\n\n \n setSearchParams(localVarUrlObj, localVarQueryParameter);\n let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n /**\n * \n * @summary Update backup retention settings of a datastore\n * @param {string} datastoreUuid \n * @param {RetentionSettings} retentionSettings Backup retention settings\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n settingsDatastoreUuidRetentionPost: async (datastoreUuid: string, retentionSettings: RetentionSettings, options: AxiosRequestConfig = {}): Promise => {\n // verify required parameter 'datastoreUuid' is not null or undefined\n assertParamExists('settingsDatastoreUuidRetentionPost', 'datastoreUuid', datastoreUuid)\n // verify required parameter 'retentionSettings' is not null or undefined\n assertParamExists('settingsDatastoreUuidRetentionPost', 'retentionSettings', retentionSettings)\n const localVarPath = `/settings/{datastore_uuid}/retention`\n .replace(`{${\"datastore_uuid\"}}`, encodeURIComponent(String(datastoreUuid)));\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication cookieAuth required\n\n\n \n localVarHeaderParameter['Content-Type'] = 'application/json';\n\n setSearchParams(localVarUrlObj, localVarQueryParameter);\n let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n localVarRequestOptions.data = serializeDataIfNeeded(retentionSettings, localVarRequestOptions, configuration)\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n }\n};\n\n/**\n * SettingsApi - functional programming interface\n * @export\n */\nexport const SettingsApiFp = function(configuration?: Configuration) {\n const localVarAxiosParamCreator = SettingsApiAxiosParamCreator(configuration)\n return {\n /**\n * \n * @summary Backup settings of a datastore\n * @param {string} datastoreUuid \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async settingsDatastoreUuidGet(datastoreUuid: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {\n const localVarAxiosArgs = await localVarAxiosParamCreator.settingsDatastoreUuidGet(datastoreUuid, options);\n return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);\n },\n /**\n * \n * @summary Update backup settings of a datastore. At least one of \\'full\\' or \\'incremental\\' must be set.\n * @param {string} datastoreUuid \n * @param {SettingsSet} settingsSet Backup settings\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async settingsDatastoreUuidPatch(datastoreUuid: string, settingsSet: SettingsSet, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {\n const localVarAxiosArgs = await localVarAxiosParamCreator.settingsDatastoreUuidPatch(datastoreUuid, settingsSet, options);\n return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);\n },\n /**\n * \n * @summary Backup settings of a datastore\n * @param {string} datastoreUuid \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async settingsDatastoreUuidRetentionGet(datastoreUuid: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {\n const localVarAxiosArgs = await localVarAxiosParamCreator.settingsDatastoreUuidRetentionGet(datastoreUuid, options);\n return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);\n },\n /**\n * \n * @summary Update backup retention settings of a datastore\n * @param {string} datastoreUuid \n * @param {RetentionSettings} retentionSettings Backup retention settings\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async settingsDatastoreUuidRetentionPost(datastoreUuid: string, retentionSettings: RetentionSettings, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {\n const localVarAxiosArgs = await localVarAxiosParamCreator.settingsDatastoreUuidRetentionPost(datastoreUuid, retentionSettings, options);\n return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);\n },\n }\n};\n\n/**\n * SettingsApi - factory interface\n * @export\n */\nexport const SettingsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n const localVarFp = SettingsApiFp(configuration)\n return {\n /**\n * \n * @summary Backup settings of a datastore\n * @param {string} datastoreUuid \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n settingsDatastoreUuidGet(datastoreUuid: string, options?: any): AxiosPromise {\n return localVarFp.settingsDatastoreUuidGet(datastoreUuid, options).then((request) => request(axios, basePath));\n },\n /**\n * \n * @summary Update backup settings of a datastore. At least one of \\'full\\' or \\'incremental\\' must be set.\n * @param {string} datastoreUuid \n * @param {SettingsSet} settingsSet Backup settings\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n settingsDatastoreUuidPatch(datastoreUuid: string, settingsSet: SettingsSet, options?: any): AxiosPromise {\n return localVarFp.settingsDatastoreUuidPatch(datastoreUuid, settingsSet, options).then((request) => request(axios, basePath));\n },\n /**\n * \n * @summary Backup settings of a datastore\n * @param {string} datastoreUuid \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n settingsDatastoreUuidRetentionGet(datastoreUuid: string, options?: any): AxiosPromise {\n return localVarFp.settingsDatastoreUuidRetentionGet(datastoreUuid, options).then((request) => request(axios, basePath));\n },\n /**\n * \n * @summary Update backup retention settings of a datastore\n * @param {string} datastoreUuid \n * @param {RetentionSettings} retentionSettings Backup retention settings\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n settingsDatastoreUuidRetentionPost(datastoreUuid: string, retentionSettings: RetentionSettings, options?: any): AxiosPromise {\n return localVarFp.settingsDatastoreUuidRetentionPost(datastoreUuid, retentionSettings, options).then((request) => request(axios, basePath));\n },\n };\n};\n\n/**\n * SettingsApi - object-oriented interface\n * @export\n * @class SettingsApi\n * @extends {BaseAPI}\n */\nexport class SettingsApi extends BaseAPI {\n /**\n * \n * @summary Backup settings of a datastore\n * @param {string} datastoreUuid \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof SettingsApi\n */\n public settingsDatastoreUuidGet(datastoreUuid: string, options?: AxiosRequestConfig) {\n return SettingsApiFp(this.configuration).settingsDatastoreUuidGet(datastoreUuid, options).then((request) => request(this.axios, this.basePath));\n }\n\n /**\n * \n * @summary Update backup settings of a datastore. At least one of \\'full\\' or \\'incremental\\' must be set.\n * @param {string} datastoreUuid \n * @param {SettingsSet} settingsSet Backup settings\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof SettingsApi\n */\n public settingsDatastoreUuidPatch(datastoreUuid: string, settingsSet: SettingsSet, options?: AxiosRequestConfig) {\n return SettingsApiFp(this.configuration).settingsDatastoreUuidPatch(datastoreUuid, settingsSet, options).then((request) => request(this.axios, this.basePath));\n }\n\n /**\n * \n * @summary Backup settings of a datastore\n * @param {string} datastoreUuid \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof SettingsApi\n */\n public settingsDatastoreUuidRetentionGet(datastoreUuid: string, options?: AxiosRequestConfig) {\n return SettingsApiFp(this.configuration).settingsDatastoreUuidRetentionGet(datastoreUuid, options).then((request) => request(this.axios, this.basePath));\n }\n\n /**\n * \n * @summary Update backup retention settings of a datastore\n * @param {string} datastoreUuid \n * @param {RetentionSettings} retentionSettings Backup retention settings\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof SettingsApi\n */\n public settingsDatastoreUuidRetentionPost(datastoreUuid: string, retentionSettings: RetentionSettings, options?: AxiosRequestConfig) {\n return SettingsApiFp(this.configuration).settingsDatastoreUuidRetentionPost(datastoreUuid, retentionSettings, options).then((request) => request(this.axios, this.basePath));\n }\n}\n\n\n","import { API_BACKUP } from '../core/CcxEnv';\nimport {\n Backup,\n BackupApi,\n Configuration,\n Restore,\n RestoreApi,\n Schedule,\n Settings,\n SettingsApi,\n SettingsSet,\n} from './backups/typescript-axios';\nimport { SDK_AXIOS_DEFAULT_BASE_OPTIONS } from './config';\n\nconst configuration = new Configuration({\n basePath: API_BACKUP,\n baseOptions: SDK_AXIOS_DEFAULT_BASE_OPTIONS,\n});\nexport const backupSettingsApiInterface = new SettingsApi(configuration);\nexport const backupRestoreApiInterface = new RestoreApi(configuration);\nexport const backupApiInterface = new BackupApi(configuration);\n\nexport interface BackupDTO extends Backup {}\n\nexport interface BackupScheduleDTO extends Schedule {}\n\nexport interface BackupSettingsDTO extends Settings {}\n\nexport interface BackupSettingsPatchDTO extends SettingsSet {}\n\nexport interface BackupRestoreDTO extends Restore {}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * CCX Backup Service\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\n *\n * The version of the OpenAPI document: v1.0.0\n * Contact: support@severalnines.com\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nexport interface ConfigurationParameters {\n apiKey?: string | Promise | ((name: string) => string) | ((name: string) => Promise);\n username?: string;\n password?: string;\n accessToken?: string | Promise | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise);\n basePath?: string;\n baseOptions?: any;\n formDataCtor?: new () => any;\n}\n\nexport class Configuration {\n /**\n * parameter for apiKey security\n * @param name security name\n * @memberof Configuration\n */\n apiKey?: string | Promise | ((name: string) => string) | ((name: string) => Promise);\n /**\n * parameter for basic security\n *\n * @type {string}\n * @memberof Configuration\n */\n username?: string;\n /**\n * parameter for basic security\n *\n * @type {string}\n * @memberof Configuration\n */\n password?: string;\n /**\n * parameter for oauth2 security\n * @param name security name\n * @param scopes oauth2 scope\n * @memberof Configuration\n */\n accessToken?: string | Promise | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise);\n /**\n * override base path\n *\n * @type {string}\n * @memberof Configuration\n */\n basePath?: string;\n /**\n * base options for axios calls\n *\n * @type {any}\n * @memberof Configuration\n */\n baseOptions?: any;\n /**\n * The FormData constructor that will be used to create multipart form data\n * requests. You can inject this here so that execution environments that\n * do not support the FormData class can still run the generated client.\n *\n * @type {new () => FormData}\n */\n formDataCtor?: new () => any;\n\n constructor(param: ConfigurationParameters = {}) {\n this.apiKey = param.apiKey;\n this.username = param.username;\n this.password = param.password;\n this.accessToken = param.accessToken;\n this.basePath = param.basePath;\n this.baseOptions = param.baseOptions;\n this.formDataCtor = param.formDataCtor;\n }\n\n /**\n * Check if the given MIME is a JSON MIME.\n * JSON MIME examples:\n * application/json\n * application/json; charset=UTF8\n * APPLICATION/JSON\n * application/vnd.company+json\n * @param mime - MIME (Multipurpose Internet Mail Extensions)\n * @return True if the given MIME is JSON, false otherwise.\n */\n public isJsonMime(mime: string): boolean {\n const jsonMime: RegExp = new RegExp('^(application\\/json|[^;/ \\t]+\\/[^;/ \\t]+[+]json)[ \\t]*(;.*)?$', 'i');\n return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');\n }\n}\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport BackupSettings from '../../types/BackupSettings';\nimport {\n backupSettingsApiInterface,\n BackupSettingsDTO,\n BackupSettingsPatchDTO,\n} from '../../sdk/BackupsApi';\nimport { notification } from 'antd';\nimport CcxIconCloseCircleTwoTone from '../../components/ccx/icons/CcxIconCloseCircleTwoTone';\n\nexport default function useBackupSettings(uuid: string | undefined) {\n const settingsDTO = useRef({});\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n const [backupSettings, setBackupSettings] = useState<\n BackupSettings | undefined\n >(undefined);\n\n const refresh = useCallback(async () => {\n if (uuid) {\n setLoading(true);\n\n try {\n const { data } =\n await backupSettingsApiInterface.settingsDatastoreUuidGet(\n uuid\n );\n settingsDTO.current = data;\n const details = new BackupSettings(data);\n setBackupSettings(details);\n setLoading(false);\n setError(null);\n } catch (e: any) {\n setLoading(false);\n setError(e);\n }\n\n setLoading(false);\n }\n }, [uuid]);\n\n const update: (settings: BackupSettingsPatchDTO) => void = useCallback(\n async (settings: BackupSettingsPatchDTO) => {\n try {\n if (!uuid) {\n throw new Error('No datastore uuid provided');\n }\n setLoading(true);\n\n const { data } =\n await backupSettingsApiInterface.settingsDatastoreUuidPatch(\n uuid || '',\n settings\n );\n settingsDTO.current = data;\n const details = new BackupSettings(data);\n setBackupSettings(details);\n } catch (e: any) {\n notification.open({\n message: 'Update backup settings failed',\n description: e.response?.data?.err || e.message,\n icon: ,\n });\n throw e;\n } finally {\n setLoading(false);\n }\n },\n [uuid]\n );\n\n useEffect(() => {\n (async () => {\n await refresh();\n })();\n }, [uuid]);\n\n return { backupSettings, refresh, update, loading, error };\n}\n","export type BackupClassProps = {\n backup_id: number;\n backup_method: string;\n backup_type: string;\n chain_up: number;\n children: number;\n ended_at: string;\n has_children: boolean;\n parent_id: number;\n size: number;\n started_at: string;\n status: string;\n};\n\nexport interface BackupInterface {\n backupId: number;\n parentId: number;\n // children: number;\n hasChildren: boolean;\n backupMethod: string;\n backupType: string;\n status: string;\n startedAt: string;\n endedAt: string;\n size: number;\n duration: string;\n isStatusError: Function;\n isStatusOk: Function;\n isStatusWarning: Function;\n}\n\nexport const BACKUP_STATUS_ERROR = 'Failed';\nexport const BACKUP_STATUS_OK = 'Completed';\nexport const BACKUP_STATUS_WARNING = 'Warning';\n\nexport default class Backup implements BackupInterface {\n readonly backupId: number;\n readonly parentId: number;\n // readonly children: number;\n readonly hasChildren: boolean;\n readonly backupMethod: string;\n readonly backupType: string;\n readonly status: string;\n readonly startedAt: string;\n readonly endedAt: string;\n readonly size: number;\n readonly duration: string;\n\n constructor(props: BackupClassProps) {\n this.backupId = props.backup_id;\n this.parentId = props.parent_id;\n // this.children = props.children;\n this.hasChildren = props.has_children;\n this.backupMethod = props.backup_method;\n this.backupType = props.backup_type;\n this.status = props.status;\n this.startedAt = props.started_at;\n this.endedAt = props.ended_at;\n this.size = props.size;\n this.duration = '';\n }\n\n isStatusOk(): boolean {\n return this.status === BACKUP_STATUS_OK;\n }\n\n isStatusWarning(): boolean {\n return this.status === BACKUP_STATUS_WARNING;\n }\n\n isStatusError(): boolean {\n return this.status === BACKUP_STATUS_ERROR;\n }\n}\n","import { BackupScheduleDTO } from '../sdk/BackupsApi';\n\nexport enum BackupScheduleStatus {\n SCHEDULED = 'SCHEDULED',\n PAUSED = 'PAUSED',\n}\n\nexport enum BackupScheduleType {\n FULL = 'full',\n INCREMENTAL = 'incremental',\n}\n\nexport type BackupScheduleClassProps = BackupScheduleDTO & {};\nexport interface BackupScheduleInterface {\n backupMethod?: string;\n backupType?: BackupScheduleType;\n status?: string;\n recurrence?: string;\n createdAt?: string;\n}\n\nexport default class BackupSchedule implements BackupScheduleInterface {\n readonly backupMethod?: string;\n readonly backupType?: BackupScheduleType;\n readonly status?: string;\n readonly recurrence?: string;\n readonly createdAt?: string;\n readonly hostName?: string;\n\n constructor(props: BackupScheduleClassProps) {\n this.backupMethod = props.backup_method;\n this.backupType = props.backup_type as BackupScheduleType;\n this.status = props.status;\n this.recurrence = props.recurrence;\n this.createdAt = props.created_at;\n this.hostName = props.host;\n }\n\n getCronString() {\n return this.recurrence?.replace('TZ=UTC ', '');\n }\n\n isActive() {\n return this.status === 'SCHEDULED';\n }\n}\n","import dayjs from 'dayjs';\nimport Backup from './Backup';\n\nexport type RestoreClassProps = {\n cmon_backup_id: number;\n progress: number;\n status: number;\n status_text: string;\n created_at: any;\n started_at: any;\n updated_at: any;\n ended_at: any;\n backup: any;\n};\n\nexport interface RestoreInterface {\n backupId: number;\n progress: number;\n status: number;\n statusText: string;\n createdAt: string;\n startedAt: string;\n updatedAt: string;\n endedAt: string;\n backupType: string;\n backupSize: any;\n}\n\nexport const RESTORE_STATUS_DEFINED = 0;\nexport const RESTORE_STATUS_DEQUEUED = 1;\nexport const RESTORE_STATUS_RUNNING = 2;\nexport const RESTORE_STATUS_RUNNING2 = 3;\nexport const RESTORE_STATUS_RUNNING3 = 4;\nexport const RESTORE_STATUS_RUNNING_EXT = 5;\nexport const RESTORE_STATUS_ABORTED = 6;\nexport const RESTORE_STATUS_FINISHED = 7;\nexport const RESTORE_STATUS_FAILED = 8;\n\nexport default class Restore implements RestoreInterface {\n readonly backupId: number;\n readonly progress: number;\n readonly status: number;\n readonly statusText: string;\n readonly createdAt: string;\n readonly startedAt: string;\n readonly updatedAt: string;\n readonly endedAt: string;\n readonly backupType: string;\n readonly backupSize: any;\n\n constructor(props: RestoreClassProps) {\n this.backupId = props.cmon_backup_id;\n this.progress = props.progress || 0;\n this.status = props.status || 0;\n this.statusText = props.status_text;\n this.createdAt = props.created_at ? props.created_at.seconds : '';\n this.startedAt = props.started_at ? props.started_at.seconds : '';\n this.updatedAt = props.updated_at ? props.updated_at.seconds : '';\n this.endedAt = props.ended_at ? props.ended_at.seconds : '';\n this.backupType = props?.backup?.backup_type;\n this.backupSize = props?.backup?.size;\n }\n\n isStatusOk(): boolean {\n return (\n this.status === RESTORE_STATUS_DEFINED ||\n this.status === RESTORE_STATUS_RUNNING ||\n this.status === RESTORE_STATUS_RUNNING2 ||\n this.status === RESTORE_STATUS_RUNNING3 ||\n this.status === RESTORE_STATUS_RUNNING_EXT\n );\n }\n\n isStatusError(): boolean {\n return (\n this.status === RESTORE_STATUS_ABORTED ||\n this.status === RESTORE_STATUS_FAILED ||\n this.status === RESTORE_STATUS_DEQUEUED\n );\n }\n\n isStatusCompleted(): boolean {\n return this.status === RESTORE_STATUS_FINISHED;\n }\n\n getStatusText(): string {\n switch (this.status) {\n case RESTORE_STATUS_DEFINED:\n return 'Defined';\n case RESTORE_STATUS_DEQUEUED:\n return 'Dequeued';\n case RESTORE_STATUS_RUNNING:\n return 'Running';\n case RESTORE_STATUS_RUNNING2:\n return 'Running';\n case RESTORE_STATUS_RUNNING3:\n return 'Running';\n case RESTORE_STATUS_RUNNING_EXT:\n return 'Running';\n case RESTORE_STATUS_ABORTED:\n return 'Aborted';\n case RESTORE_STATUS_FINISHED:\n return 'Finished';\n case RESTORE_STATUS_FAILED:\n return 'Failed';\n\n default:\n return 'Unknown';\n }\n }\n\n isClosed(): boolean {\n const endDate = dayjs.unix(parseInt(this.endedAt, 10));\n\n const minutesAgo = dayjs().diff(endDate, 'm');\n\n if (this.isStatusCompleted() && this.endedAt) {\n return minutesAgo >= 5;\n } else if (this.isStatusError() && this.endedAt) {\n return minutesAgo >= 5;\n }\n\n return false;\n }\n}\n","import ApiService from './ApiService';\nimport Backup from '../types/Backup';\nimport BackupSchedule from '../types/BackupSchedule';\nimport { API_BACKUP } from '../core/CcxEnv';\nimport BackupSettings from '../types/BackupSettings';\nimport Restore from '../types/Restore';\nimport {\n backupApiInterface,\n backupRestoreApiInterface,\n backupSettingsApiInterface,\n} from '../sdk/BackupsApi';\n\n// constants\nconst API_URL = API_BACKUP;\n\ntype CmonBackupsResponse = {\n backups: any[];\n total: number;\n};\n\nexport default class BackupService extends ApiService {\n /**\n * Get list of Backups.\n * @param {string} uuid\n */\n static async getAllBackups(\n uuid: string,\n page: number,\n pageSize: number\n ): Promise {\n const response = await this.request(\n 'GET',\n `backups/${uuid}?page=${page}&per_page=${pageSize}`\n );\n return {\n total: response.total,\n backups: response.backups.map((r: any) => new Backup(r)),\n };\n }\n\n /**\n * Get list of Backups.\n * @param {string} uuid\n */\n static async getFullBackups(uuid: string): Promise {\n const response = await this.request('GET', `backups/${uuid}`);\n return response.map((r: any) => new Backup(r));\n }\n\n /**\n * Get list of Backups.\n * @param {number} parentId\n * @param {string} uuid\n */\n static async getIncrementalBackups(\n uuid: string,\n parentId: number,\n page: number,\n pageSize: number\n ): Promise {\n const { data } = await backupApiInterface.backupsDatastoreUuidGet(\n uuid,\n parentId,\n page,\n pageSize\n );\n return {\n total: data.total,\n backups: data.backups.map((r: any) => new Backup(r)),\n };\n }\n\n /**\n * Get list of Backup Schedules.\n * @param {string} uuid\n */\n static async getAllBackupSchedules(\n uuid: string\n ): Promise {\n const { data } =\n await backupApiInterface.backupSchedulesDatastoreUuidGet(uuid);\n return data.map((r: any) => new BackupSchedule(r));\n }\n\n /**\n * Launches a restore backup job\n * @param {string} uuid\n * @param {string} backupId\n */\n static async restoreBackup(\n uuid: string,\n backupId: string | number,\n pitr_stop_time?: string | null\n ): Promise {\n const postData = {\n data: {\n pitr_stop_time,\n },\n };\n\n return await this.request(\n 'POST',\n `backups/${uuid}/${backupId}/restore`,\n postData\n );\n }\n\n static async getBackupRetention(uuid: string) {\n const { data }: any =\n await backupSettingsApiInterface.settingsDatastoreUuidRetentionGet(\n uuid\n );\n return data?.retention_days;\n }\n\n static async updateBackupRetention(uuid: string, retention: number) {\n return await backupSettingsApiInterface.settingsDatastoreUuidRetentionPost(\n uuid,\n {\n retention_days: retention,\n }\n );\n }\n\n /**\n * Get Backup settings.\n * @param {string} uuid\n */\n static async getBackupSettings(uuid: string): Promise {\n const { data }: any =\n await backupSettingsApiInterface.settingsDatastoreUuidGet(uuid);\n return new BackupSettings(data);\n }\n\n /**\n * Updates backup settings\n * @param {string} uuid\n * @param {any} data\n */\n static async updateBackupSettings(\n uuid: string,\n { full_frequency, full_start_hour, inc_frequency }: any\n ): Promise {\n const postData = {\n data: {\n full_frequency,\n full_start_hour,\n inc_frequency,\n },\n };\n\n return await this.request('POST', `settings/${uuid}`, postData);\n }\n\n /**\n * Get Backup restores.\n * @param {string} uuid\n */\n static async getBackupRestores(uuid: string): Promise {\n const { data } =\n await backupRestoreApiInterface.restoresDatastoreUuidGet(uuid);\n return data?.restores?.map((r: any) => new Restore(r)) || [];\n }\n\n protected static getApiUrl() {\n return API_URL;\n }\n}\n","import { useEffect, useMemo } from 'react';\nimport {\n fetchJobs,\n refreshJobs,\n setIntervals,\n clearIntervals,\n} from '../../slices/jobs.slice';\nimport { useAppDispatch, useAppSelector } from '../../redux/hooks';\n\ninterface Props {\n dataStoreUuid?: string;\n offset?: number;\n limit?: number;\n}\n\nexport default function useDataStoreJobs({\n dataStoreUuid,\n limit = 50,\n offset = 0,\n}: Props) {\n const dispatch = useAppDispatch();\n\n const { jobs, initiallyLoaded, intervals, loading, error } = useAppSelector(\n (state) => state.jobs\n );\n\n const datastoreJobs = useMemo(() => {\n return dataStoreUuid ? jobs[dataStoreUuid] : [];\n }, [jobs, dataStoreUuid]);\n\n useEffect(() => {\n if (dataStoreUuid && !initiallyLoaded[dataStoreUuid]) {\n // Dispatch the async action to fetch jobs\n dispatch(fetchJobs({ dataStoreUuid, limit, offset }));\n }\n }, [dataStoreUuid, dispatch, limit, offset, initiallyLoaded]);\n\n const refresh = (ignoreLoader: boolean = false) => {\n if (dataStoreUuid) {\n if (ignoreLoader) {\n dispatch(refreshJobs({ dataStoreUuid, limit, offset }));\n } else {\n // Dispatch the async action to fetch jobs\n dispatch(fetchJobs({ dataStoreUuid, limit, offset }));\n }\n }\n };\n\n useEffect(() => {\n if (dataStoreUuid && !intervals[dataStoreUuid]) {\n const intervalId = setInterval(() => {\n refresh(true);\n }, 20000);\n\n dispatch(setIntervals({ dataStoreUuid, intervalId }));\n\n return () => {\n clearIntervals({ dataStoreUuid });\n };\n }\n }, []);\n\n return { jobs: datastoreJobs, refresh, error, loading };\n}\n","import ApiService from './ApiService';\nimport { API_V2_DEPLOYMENT } from '../core/CcxEnv';\n\n// constants\nconst API_URL = API_V2_DEPLOYMENT;\n\nexport default class DownloadingAuthCertificatesService extends ApiService {\n /**\n * @param {string} certificateType\n */\n static async getDatastoreCertificate(\n certificateType: string\n ): Promise {\n const response = await fetch(\n `${API_URL}/data-stores/certificates/${certificateType}`,\n {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/x-x509-ca-cert',\n },\n }\n );\n\n if (!response.ok) {\n throw new Error();\n }\n\n return response;\n }\n}\n","import React, { useState } from 'react';\nimport { DownloadOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport { Button, Col, message, Row, Table, Typography } from 'antd';\nimport DownloadAuthCertificatesService from '../../../../services/DownloadingAuthService';\n\ninterface DatastoreSettingsAuthenticationTableProps {}\n\nfunction DatastoreSettingsAuthenticationTable({}: DatastoreSettingsAuthenticationTableProps) {\n const [isLoading, setIsLoading] = useState(false);\n\n const authColumns = [\n {\n title: Credentials,\n dataIndex: 'credentials',\n key: 'credentials',\n width: 500,\n },\n {\n title: Download,\n dataIndex: 'download',\n key: 'download',\n width: 100,\n },\n ];\n\n const downloadCertificate = async (reportFile: any, fileName: string) => {\n const url = window.URL.createObjectURL(reportFile);\n const reportFileLink = document.createElement('a');\n reportFileLink.href = url;\n document.body.appendChild(reportFileLink);\n reportFileLink.download = fileName;\n reportFileLink.click();\n window.URL.revokeObjectURL(url);\n setIsLoading(false);\n };\n\n const onClickDownloadCertificate = async (certificateType: string) => {\n setIsLoading(true);\n try {\n const response =\n await DownloadAuthCertificatesService.getDatastoreCertificate(\n certificateType\n );\n const report = await response.blob();\n let filename = certificateType;\n const contentDisposition = response.headers.get(\n 'Content-Disposition'\n );\n\n if (contentDisposition) {\n const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n let matches = filenameRegex.exec(contentDisposition);\n if (matches != null && matches[1]) {\n filename = matches[1].replace(/['\"]/g, '');\n }\n }\n await downloadCertificate(report, filename);\n } catch (e) {\n let errorMessage = e instanceof Error ? e.toString() : String(e);\n message.error(\n `Error: Downloading datastore access key failed. ${errorMessage}`\n );\n setIsLoading(false);\n }\n };\n\n const authDownloads = [\n {\n key: '1',\n credentials: 'CA Certificate',\n download: (\n onClickDownloadCertificate('ca-certificate')}\n icon={}\n >\n Download\n \n ),\n },\n ];\n return (\n <>\n {' '}\n \n \n \n Authentication\n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default DatastoreSettingsAuthenticationTable;\n","import React from 'react';\nimport styles from './AppFormEmailTag.module.less';\nimport { Tag } from 'antd';\nimport CcxComponentProps from '../../../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {\n label: string;\n value: string;\n closable: boolean;\n onClose: (e: React.MouseEvent) => void;\n}\n\nconst AppFormEmailTag = ({ label, value, closable, onClose }: Props) => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n const isValidEmail = emailRegex.test(value);\n\n const onPreventMouseDown = (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n return (\n \n {label}\n \n );\n};\n\nexport default AppFormEmailTag;\n","import { Form, Select } from 'antd';\nimport AppFormEmailTag from '../AppFormEmailTag';\nimport { useRBAC } from '../../../../core/hooks/useRBAC';\nimport { CAN_MODIFY_DATASTORE_SETTINGS } from '../../../../core/PermissionRoles';\n\ninterface AppEmailsNotificationProps {\n readonly label: string;\n readonly testId?: string;\n readonly emailsList: string[] | undefined;\n readonly saveEmailNotifications: Function;\n}\n\nconst AppEmailsNotification = ({\n label,\n testId = 'AppEmailsNotification',\n emailsList,\n saveEmailNotifications,\n}: AppEmailsNotificationProps) => {\n const { hasPermission } = useRBAC();\n\n return (\n ({\n validator(_, value) {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n const isValidEmail = value.every((email: string) => {\n return emailRegex.test(email);\n });\n if (!isValidEmail) {\n return Promise.reject(\n new Error(\n 'All entries must be valid email addresses'\n )\n );\n }\n return Promise.resolve();\n },\n }),\n ]}\n wrapperCol={{ span: 24 }}\n extra={\n 'Use semicolon (;) to separate email addresses, remove all addresses to disable'\n }\n >\n }\n value={emailsList}\n tokenSeparators={[';']}\n disabled={!hasPermission(CAN_MODIFY_DATASTORE_SETTINGS)}\n maxTagCount={5}\n onChange={(value: string[]) => saveEmailNotifications(value)}\n />\n \n );\n};\n\nexport default AppEmailsNotification;\n","import styles from './DatastoreEmailNotification.module.less';\nimport { Form } from 'antd';\nimport AppEmailsNotification from '../../../ccx/common/Form/AppEmailsNotification';\n\ninterface DatastoreEmailNotificationProps {\n readonly form: any;\n readonly testId?: string;\n readonly emailsList: string[];\n readonly saveEmailNotifications: Function;\n}\n\nfunction DatastoreEmailNotification({\n form,\n emailsList,\n saveEmailNotifications,\n testId = 'DatastoreEmailNotification',\n}: DatastoreEmailNotificationProps) {\n return (\n \n

\n \n Notifications\n \n

\n
\n \n \n \n );\n}\n\nexport default DatastoreEmailNotification;\n","import { Alert, Switch } from 'antd';\nimport { Form, Row, Col } from 'antd';\nimport { ReactElement } from 'react';\nimport CcxComponentProps from '../../../../core/CcxComponent';\nimport styles from './DataStoreSettingsAutoScale.module.less';\nimport './DatastoreSettingsDbParameters.less';\nimport {\n AUTOSCALE_STORAGE_PERCENTAGE,\n AUTOSCALE_STORAGE_THRESHOLD,\n} from '../../../../core/CcxEnv';\nimport { useRBAC } from '../../../../core/hooks/useRBAC';\nimport { CAN_MODIFY_DATASTORE_SETTINGS } from '../../../../core/PermissionRoles';\n\ninterface Props extends CcxComponentProps {\n form: any;\n onChange: Function;\n autoscaleStorage: boolean | undefined;\n}\n\nfunction DataStoreSettingsAutoScale({\n form,\n onChange,\n autoscaleStorage,\n testId = 'DataStoreSettingsAutoScale',\n}: Props): ReactElement {\n const { hasPermission } = useRBAC();\n\n const handleOnChange = (value: boolean) => {\n if (autoscaleStorage !== value) {\n onChange(value);\n }\n };\n\n return (\n
\n

\n \n Auto scaling storage size\n \n

\n\n
\n \n Auto scale\n \n \n \n \n \n \n \n \n
\n\n {autoscaleStorage && (\n \n )}\n
\n );\n}\n\nexport default DataStoreSettingsAutoScale;\n","import { ReactElement, useCallback, useEffect, useState } from 'react';\nimport { Button, Col, Divider, Form, message, Row } from 'antd';\nimport { useParams } from 'react-router';\nimport CcxComponentProps from '../../../../core/CcxComponent';\nimport ProvisionService from '../../../../services/ProvisionService';\nimport styles from './DataStoreSettings.module.less';\nimport DataStoreSettingsMaintenance from './DataStoreSettingsMaintenance';\nimport DataStoreSettingsNameChange from './DataStoreSettingsNameChange';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\nimport useBackupSettings from '../../../../core/hooks/useBackupSettings';\nimport BackupService from '../../../../services/BackupService';\nimport useDataStoreJobs from '../../../../core/hooks/useDataStoreJobs';\nimport { getNonErroredJobs } from '../../../../core/helpers';\nimport LazyLoader from '../../../LazyLoader';\nimport DatastoreSettingsAuthenticationTable from './DatastoreSettingsAuthenticationTable';\nimport DatastoreEmailNotification from './DatastoreEmailNotification';\nimport DataStoreSettingsAutoScale from './DataStoreSettingsAutoScale';\nimport {\n AUTOSCALE_STORAGE_PERCENTAGE,\n AUTOSCALE_STORAGE_THRESHOLD,\n} from '../../../../core/CcxEnv';\nimport debounce from 'debounce';\n\ninterface UrlProps {\n dataStoreUuid: string;\n}\n\ninterface Props extends CcxComponentProps {\n currentDeployment?: DeploymentsItem | null | undefined;\n}\n\nfunction DataStoreSettingsGeneral({\n currentDeployment,\n testId = 'DataStoreSettingsGeneral',\n}: Props): ReactElement {\n const [form] = Form.useForm();\n const { dataStoreUuid } = useParams();\n const [dataStoreName, setDataStoreName] = useState(\n undefined\n );\n const [maintenanceDayOfWeek, setMaintenanceDayOfWeek] = useState<\n number | undefined\n >(undefined);\n const [maintenanceStartHour, setMaintenanceStartHour] = useState<\n number | undefined\n >(undefined);\n\n const [newDataStoreName, setNewDataStoreName] = useState<\n string | undefined\n >(undefined);\n\n const [autoscaleStorage, setAutoscaleStorage] = useState<\n boolean | undefined\n >(undefined);\n\n const [newDayOfWeek, setNewDayOfWeek] = useState(\n undefined\n );\n const [newStartHour, setNewStartHour] = useState(\n undefined\n );\n const [newEndHour, setNewEndHour] = useState(undefined);\n const [newPassword, setNewPassword] = useState(\n undefined\n );\n const [newPasswordConfirm, setNewPasswordConfirm] = useState<\n string | undefined\n >(undefined);\n\n const [saving, setSaving] = useState(false);\n const [canSave, setCanSave] = useState(false);\n const [canSaveBackup, setCanSaveBackup] = useState(false);\n const [emailsList, setEmailsList] = useState([]);\n const [full, setFull] = useState();\n const [incremental, setIncremental] = useState();\n const [frequency, setFrequency] = useState();\n const [time, setTime] = useState();\n\n const {\n jobs,\n refresh: refreshJobs,\n loading: jobsLoading,\n } = useDataStoreJobs({\n dataStoreUuid,\n });\n\n const { backupSettings, refresh: refreshBackupSettings } =\n useBackupSettings(dataStoreUuid);\n\n useEffect(() => {\n if (backupSettings) {\n setIncremental((backupSettings.incFrequency || 0) > 0);\n\n setFull((backupSettings.fullFrequency || 0) > 0);\n\n if (backupSettings.fullFrequency === 1) {\n setFrequency(backupSettings.fullFrequency);\n } else if (backupSettings.fullFrequency === 2) {\n setFrequency(backupSettings.fullFrequency);\n setTime(backupSettings.fullStartHour);\n }\n }\n }, [backupSettings]);\n\n useEffect(() => {\n if (currentDeployment) {\n setDataStoreName(currentDeployment.getName());\n setAutoscaleStorage(currentDeployment.getAutoscaleStorage());\n setMaintenanceDayOfWeek(\n currentDeployment.getMaintenanceDayOfWeek()\n );\n setMaintenanceStartHour(\n currentDeployment.getMaintenanceStartHour()\n );\n setEmailsList(currentDeployment.getNotificationsEmailList());\n\n form.setFieldsValue({\n maintenanceStartHour:\n currentDeployment.getMaintenanceStartHour(),\n maintenanceDayOfWeek:\n currentDeployment.getMaintenanceDayOfWeek(),\n notificationRecipients:\n currentDeployment.getNotificationsEmailList(),\n autoscaleStorage: currentDeployment.getAutoscaleStorage(),\n });\n }\n }, []);\n\n const saveDataStoreName = (name: string) => {\n if (name && name !== dataStoreName) {\n setNewDataStoreName(name);\n saveDataStoreSettings();\n }\n };\n\n const saveDataStoreSettings = useCallback(\n debounce(() => {\n setCanSave(true);\n }, 1000),\n []\n );\n\n const saveDayOfWeek = (dayOfWeek: number) => {\n if (dayOfWeek) setNewDayOfWeek(dayOfWeek);\n saveDataStoreSettings();\n };\n\n const saveTimeWindow = (startHour: number, endHour: number) => {\n if (startHour >= 0) {\n setNewStartHour(startHour);\n setNewEndHour(endHour);\n }\n saveDataStoreSettings();\n };\n\n const saveAutoscaleStorage = (value: boolean) => {\n if (value !== autoscaleStorage) setAutoscaleStorage(value);\n saveDataStoreSettings();\n };\n\n const saveEmailNotifications = (emails: string[]) => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n const isValidEmail = emails.every((email: string) => {\n return emailRegex.test(email);\n });\n setEmailsList(emails);\n if (!isValidEmail) {\n setCanSave(false);\n } else {\n saveDataStoreSettings();\n }\n };\n\n const handleSettingsChanged = async () => {\n try {\n if (newDataStoreName) await form.validateFields(['dataStoreName']);\n if (newDayOfWeek)\n await form.validateFields(['maintenanceDayOfWeek']);\n if (newStartHour || newEndHour)\n await form.validateFields(['maintenanceStartHour']);\n if (newPassword || newPasswordConfirm)\n await form.validateFields(['password', 'confirmPassword']);\n } catch (e) {\n message.error(\n 'One or more settings are invalid. Please double check and try again.'\n );\n return;\n }\n\n setSaving(true);\n\n if (canSave) {\n try {\n await ProvisionService.updateDeployment({\n dataStoreUuid,\n dataStoreName: newDataStoreName?.trim(),\n dayOfWeek:\n newDayOfWeek ||\n form.getFieldValue('maintenanceDayOfWeek'),\n startHour:\n newStartHour ||\n form.getFieldValue('maintenanceStartHour'),\n endHour:\n newEndHour ||\n (form.getFieldValue('maintenanceStartHour') + 2) % 24,\n proxySqlAdminPassword:\n newPassword === newPasswordConfirm\n ? newPassword\n : undefined,\n autoscaleStorage:\n autoscaleStorage ||\n form.getFieldValue('autoscaleStorage'),\n notifications: {\n enabled: emailsList ? emailsList.length > 0 : false,\n emails: emailsList || [],\n },\n });\n message.success('Your datastore settings have been updated.');\n setCanSave(false);\n setSaving(false);\n setNewDataStoreName(undefined);\n setNewDayOfWeek(undefined);\n setNewStartHour(undefined);\n setNewEndHour(undefined);\n setNewPassword(undefined);\n setNewPasswordConfirm(undefined);\n } catch (e) {\n message.error(\n 'There was an error updating your datastore settings. Please try again.'\n );\n setSaving(false);\n return;\n }\n }\n\n if (canSaveBackup) {\n try {\n const settingsObj = {\n full_frequency: full ? frequency : 0,\n full_start_hour: frequency === 2 ? time : undefined,\n inc_frequency: incremental ? 1 : 0,\n };\n\n await BackupService.updateBackupSettings(\n dataStoreUuid,\n settingsObj\n );\n refreshBackupSettings && (await refreshBackupSettings());\n message.success('Your backup settings have been updated.');\n setCanSaveBackup(false);\n setSaving(false);\n } catch (e) {\n message.error(\n 'There was an error updating your backup settings. Please try again.'\n );\n setSaving(false);\n return;\n }\n }\n };\n\n useEffect(() => {\n if (canSave) {\n handleSettingsChanged();\n }\n }, [canSave]);\n\n const handleUpgradeTo = async () => {\n if (currentDeployment?.can_upgrade_to) {\n try {\n await ProvisionService.upgradeDatastore({\n dataStoreUuid,\n canUpgradeTo: currentDeployment?.can_upgrade_to,\n });\n\n refreshJobs();\n\n message.info('Your datastore is being upgraded.');\n } catch (error) {\n message.error(\n 'There was an error upgrading your datastore. Please try again.'\n );\n return;\n }\n }\n };\n\n return jobsLoading && !currentDeployment ? (\n \n ) : (\n
\n \n\n \n\n \n\n \n\n {!currentDeployment?.isRedis() &&\n !currentDeployment?.isEphemeral() &&\n AUTOSCALE_STORAGE_THRESHOLD != 0 &&\n AUTOSCALE_STORAGE_PERCENTAGE != 0 ? (\n <>\n \n\n \n \n ) : (\n <>\n )}\n\n \n\n {currentDeployment?.isCAAvailable && (\n <>\n \n \n \n )}\n
\n );\n}\n\nexport default DataStoreSettingsGeneral;\n","import React, { useEffect } from 'react';\nimport { Row, Col, Alert, Button } from 'antd';\nimport {\n EditOutlined,\n FileTextOutlined,\n LinkOutlined,\n} from '@ant-design/icons';\nimport styles from './DatastoreSettingsDbParameters.module.less';\nimport DotLabelStatus from '../../../ccx/common/DotLabelStatus';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\nimport { CAN_ADD_DB_PARAMS } from '../../../../core/PermissionRoles';\nimport Can from '../../../../core/providers/Can';\n\ninterface ParameterGroupDisplayProps {\n readonly selectedGroup: any;\n readonly isSyncing: boolean;\n readonly createLegacyGroup: Function;\n readonly setVisible: (visible: boolean) => void;\n readonly syncGroup: (groupId: string) => void;\n readonly mapDbParametersGroup: () => any;\n readonly dataStore: DeploymentsItem | undefined;\n readonly loading?: boolean;\n readonly openParameterEditModal: () => void;\n}\n\nconst ParameterGroupDisplay: React.FC = ({\n createLegacyGroup,\n selectedGroup,\n setVisible,\n isSyncing,\n syncGroup,\n mapDbParametersGroup,\n dataStore,\n loading,\n openParameterEditModal,\n}) => {\n const [isSynced, setIsSynced] = React.useState();\n\n useEffect(() => {\n if (dataStore) {\n setIsSynced(dataStore?.isDbParameterGroupSyncd());\n }\n }, [dataStore]);\n\n useEffect(() => {\n if (!isSyncing && dataStore) {\n setIsSynced(dataStore?.isDbParameterGroupSyncd());\n }\n }, [dataStore, isSyncing]);\n\n return selectedGroup ? (\n \n \n \n \n \n \n \n

\n {selectedGroup.name}{' '}\n openParameterEditModal()}\n >\n \n \n

\n \n {selectedGroup.databaseVersion}{' '}\n {selectedGroup.databaseVendor}\n \n \n \n \n \n
\n \n \n syncGroup(selectedGroup.uuid)}\n >\n Re-sync group\n \n {mapDbParametersGroup().length > 0 && (\n \n )}\n \n
\n ) : (\n \n \n You have no parameter group for this data store\n \n }\n showIcon={true}\n className={styles.ParameterGroupAlert}\n description=\"To edit the default database parameter values, first create a parameter group and assign it to the data store, or select an existing one.\"\n type=\"info\"\n action={\n \n {mapDbParametersGroup().length > 0 && (\n \n \n \n )}\n \n createLegacyGroup()}\n >\n Create a group\n \n \n \n }\n closable\n />\n \n );\n};\n\nexport default ParameterGroupDisplay;\n","import {\n Modal,\n Form,\n Select,\n Row,\n Col,\n Button,\n Typography,\n FormInstance,\n Spin,\n} from 'antd';\nimport CcxLogo from '../../../ccx/common/CcxLogo';\nimport styles from './DatastoreSettingsDbParameters.module.less';\nimport { useState } from 'react';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\nimport { DbParameterGroup } from '../../../../types/DbParameterGroup';\nimport { replaceIfRedis } from '../../../../core/helpers';\n\ninterface AssignGroupModalProps {\n readonly visible: boolean;\n readonly form: FormInstance;\n readonly setVisible: (visible: boolean) => void;\n readonly dataStore: DeploymentsItem | undefined;\n readonly dbParametersList: DbParameterGroup[];\n readonly mapDbParametersGroup: () => any;\n readonly onSubmit: (\n groupSelected: DbParameterGroup,\n dataStoreUUID: string\n ) => void;\n}\n\nconst AssignGroupModal: React.FC = ({\n visible,\n setVisible,\n form,\n dataStore,\n onSubmit,\n dbParametersList,\n mapDbParametersGroup,\n}) => {\n const [selectedGroup, setSelectedGroup] = useState<\n DbParameterGroup | undefined\n >(undefined);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const handleSubmit = () => {\n if (!dataStore || !selectedGroup) return;\n\n try {\n setIsSubmitting(true);\n onSubmit(selectedGroup, dataStore.dataStoreUuid);\n } catch (error) {\n console.error('Failed to submit:', error);\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const onSelectDbParametersGroup = (value: string) => {\n if (!dbParametersList) return;\n\n const selectedGroup = dbParametersList.find(\n (group: DbParameterGroup) => group.uuid === value\n );\n\n setSelectedGroup(selectedGroup);\n form.setFieldValue(\n 'dbParametersGroup',\n selectedGroup ? value : undefined\n );\n };\n\n const modalContent = (\n <>\n
\n \n \n \n \n {selectedGroup && dataStore && (\n <>\n \n The group will be assigned to:\n \n \n \n \n \n \n \n {selectedGroup.name}\n \n \n Vendor and version:{' '}\n {replaceIfRedis(selectedGroup.databaseVendor) +\n ' ' +\n selectedGroup.databaseVersion}\n \n \n \n \n )}\n \n );\n\n return (\n setVisible(false)}\n footer={\n \n \n *\n Required\n \n \n \n Save\n \n \n \n }\n closable={!isSubmitting}\n maskClosable={!isSubmitting}\n >\n {modalContent}\n \n );\n};\n\nexport default AssignGroupModal;\n","import { DbParameterGroup } from '../types/DbParameterGroup';\n\ninterface ParameterGroup {\n databaseVendor: string;\n databaseVersion: string;\n name: string;\n uuid: string;\n}\n\nexport interface DbParameterGroups {\n parameterGroups: ParameterGroup[];\n}\n\nexport const mapDbParameterGroupsToOptions = (\n dbParameterGroups: DbParameterGroup[] | undefined,\n databaseVendor?: string,\n databaseVersion?: string,\n dataStoreParameterGroupId?: string\n): { label: string; value: string }[] => {\n if (!dbParameterGroups) return [];\n return (\n dbParameterGroups\n ?.filter((group: ParameterGroup) => {\n if (!databaseVendor || !databaseVersion) return true;\n return (\n group.databaseVendor === databaseVendor &&\n group.databaseVersion === databaseVersion\n );\n })\n ?.map((group: ParameterGroup) => ({\n label: group.name,\n value: group.uuid,\n })) || []\n ).filter((group) => group.value !== dataStoreParameterGroupId);\n};\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { Checkbox, Select, Form, Input, Button, notification } from 'antd';\nimport styles from './DatastoreSettingsDbParameters.module.less';\nimport './DatastoreSettingsDbParameters.less';\nimport AppTable from '../../../AppTable';\nimport AppLoading from '../../../AppLoading';\nimport { Type } from '../../../../types/DbParameter';\nimport { EditOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport InfoIcon from '@severalnines/bar-frontend-components/build/lib/General/InfoIcon';\nimport DbParameters from '../../../../types/DbParameters';\nimport { useAppSelector } from '../../../../redux/hooks';\nimport ParameterGroupDisplay from './ParameterGroupDisplay';\nimport AssignGroupModal from './AssignGroupModal';\nimport DbParameterGroupService from '../../../../services/DbParameterGroupService';\nimport CcxIconCheckCircleTwoTone from '../../../ccx/icons/CcxIconCheckCircleTwoTone';\nimport CcxIconCloseCircleTwoTone from '../../../ccx/icons/CcxIconCloseCircleTwoTone';\nimport DbParametersModal from '../../../dbParameters/DbParametersModal';\nimport {\n DbParameter,\n DbParameterGroup,\n} from '../../../../types/DbParameterGroup';\nimport useDataStoreJobs from '../../../../core/hooks/useDataStoreJobs';\nimport {\n isSyncingParameters,\n wrapDbParameterValues,\n} from '../../../../core/helpers';\nimport { mapDbParameterGroupsToOptions } from '../../../../utils/dbParameterGroups';\nimport { RootState } from '../../../../redux/store';\n\ninterface Props {\n isEditMode: boolean;\n onChange: (name: any, value: string | boolean) => void;\n dbParameters: DbParameters | undefined;\n loading: boolean;\n}\n\nconst PER_PAGE = 100;\nconst PAGE = 1;\n\nfunction DatastoreSettingDbParameters({\n isEditMode,\n onChange,\n loading,\n dbParameters,\n}: Props): ReactElement {\n const { Option } = Select;\n const [editableFields, setEditableFields] = useState([]);\n const { dataStore, isLoading: isDataStoreLoading } = useAppSelector(\n (state: RootState) => state.dataStore\n );\n const [form] = Form.useForm();\n const [tableForm] = Form.useForm();\n const [selectedGroup, setSelectedGroup] = useState(undefined);\n const [isLoading, setIsLoading] = useState(loading);\n const [isAssignGroupModalVisible, setIsAssignGroupModalVisible] =\n useState(false);\n const [isDbParametersModalVisible, setIsDbParametersModalVisible] =\n useState(false);\n const [isDbParameterEditable, setIsDbParameterEditable] =\n useState(false);\n const [dbParametersTableData, setDbParametersTableData] = useState<\n DbParameter[]\n >([]);\n const [record, setRecord] = useState();\n const { jobs, refresh: refreshJobs } = useDataStoreJobs({\n dataStoreUuid: dataStore?.dataStoreUuid,\n });\n const [isSyncing, setIsSyncing] = useState(false);\n const [dbParameterForm] = Form.useForm();\n const [dbParametersList, setDbParametersList] = useState<\n DbParameterGroup[]\n >([]);\n\n useEffect(() => {\n if (!isDataStoreLoading === isSyncingParameters(jobs))\n setIsSyncing(isSyncingParameters(jobs) && !isDataStoreLoading);\n }, [jobs, isDataStoreLoading]);\n\n const getFormattedValues = (value: any, isDefault: boolean) => {\n const formattedValue = value\n .split(',')\n .reduce((result: any, item: any, index: number) => {\n const commaCount = result.split(',').length - 1;\n if (result === '' && isDefault) {\n return `Default: ${item}`;\n } else if (result === '' && !isDefault) {\n return `${item}`;\n } else if (commaCount % 2 === 1) {\n return `${result},\\n${item}`;\n } else {\n return `${result},${item}`;\n }\n }, '');\n\n return formattedValue;\n };\n\n useEffect(() => {\n if (!isEditMode) {\n setEditableFields([]);\n }\n }, [isEditMode]);\n\n useEffect(() => {\n setIsLoading(loading);\n }, [loading]);\n\n const openParameterEditModal = () => {\n setIsDbParameterEditable(true);\n editableParameter();\n };\n\n const editableParameter = async () => {\n if (!dataStore || !selectedGroup) return;\n const defaultDbParameters =\n await DbParameterGroupService.getDefaultDbParameterGroup(\n dataStore.getDatabaseVendor()\n );\n\n setRecord({\n databaseVendor: selectedGroup.databaseVendor,\n databaseVersion: selectedGroup.databaseVersion,\n databaseType: selectedGroup.databaseType,\n dbParameters: wrapDbParameterValues(\n selectedGroup.dbParameters,\n defaultDbParameters.getAllParameters()\n ),\n description: selectedGroup.description,\n dataStores: selectedGroup.dataStores,\n name: selectedGroup.name,\n });\n setIsDbParametersModalVisible(true);\n };\n\n useEffect(() => {\n if (isDbParametersModalVisible && dataStore && !selectedGroup) {\n const defaultDbParameters = getDefaultDbParameters();\n if (!defaultDbParameters) return;\n }\n }, [isDbParametersModalVisible]);\n\n const getDefaultDbParameters = async () => {\n if (!dataStore) return;\n const defaultDbParameters =\n await DbParameterGroupService.getDefaultDbParameterGroup(\n dataStore?.getDatabaseVendor()\n );\n\n const formattedRecord = {\n databaseVendor: dataStore.getDatabaseVendor(),\n databaseVersion: dataStore.getDatabaseVersion(),\n databaseType: dataStore.getClusterType(),\n dbParameters: wrapDbParameterValues(\n dataStore.parameterGroupSync.parameters,\n defaultDbParameters?.parameters\n ),\n };\n setRecord(formattedRecord);\n };\n\n useEffect(() => {\n if (dataStore && dataStore.parameterGroupId) {\n getAttachedDbParameterGroup(dataStore.getParameterGroupId());\n }\n }, [dataStore]);\n\n const getAttachedDbParameterGroup = async (groupId: string) => {\n try {\n const attachedGroup =\n await DbParameterGroupService.getSingleDbParameterGroup(\n groupId\n );\n if (attachedGroup) {\n setSelectedGroup(attachedGroup);\n }\n } catch (error) {\n showNotifications(false, 'Error', 'Failed to get details');\n }\n };\n\n const getMinMaxDefaultValues = (record: any) => {\n return (\n
\n {record?.type === Type.NUMBER && (\n <>\n {`Max: ${record?.max} | `}\n {`Min: ${record?.min} | `}\n \n )}\n {record?.defaultValue && (\n \n {getFormattedValues(record?.defaultValue, true)}\n \n )}\n
\n );\n };\n\n function renderInputField(record: any) {\n switch (record?.type) {\n case Type.BOOLEAN:\n return (\n onChange(record?.name, e.target.checked)}\n />\n );\n case Type.SELECT:\n return (\n \n onChange(record?.name, value)\n }\n onKeyDown={(e: {\n key: string;\n preventDefault: () => any;\n }) => {\n e.key === 'Enter' && e.preventDefault();\n }}\n >\n {record?.options?.map((item: any, index: number) => {\n return (\n \n );\n })}\n \n );\n case Type.NUMBER:\n return (\n \n any;\n }) => {\n e.key === 'Enter' && e.preventDefault();\n }}\n onChange={(e: {\n target: { value: string | boolean };\n }) => onChange(record?.name, e.target.value)}\n />\n \n );\n case Type.TEXT:\n return (\n \n any;\n }) => {\n e.key === 'Enter' && e.preventDefault();\n }}\n onChange={(e: {\n target: { value: string | boolean };\n }) => onChange(record?.name, e.target.value)}\n />\n \n );\n\n default:\n return null;\n }\n }\n\n const toggleEditableField = (fieldName: any) => {\n if (editableFields.includes(fieldName)) {\n setEditableFields(\n editableFields.filter((field: any) => field !== fieldName)\n );\n } else {\n setEditableFields([...editableFields, fieldName]);\n }\n };\n\n const databasesColumns = [\n {\n title: 'Parameter Name',\n key: 'name',\n width: 450,\n render: (text: string, record: any) => {\n return (\n record && (\n
\n \n \n {record?.name}\n \n {record.description}}\n />\n \n
\n {getMinMaxDefaultValues(record)}\n
\n )\n );\n },\n },\n {\n title: 'Current Value',\n width: 650,\n key: 'value',\n render: (text: string, record: any) => {\n if (editableFields.includes(record?.name) && isEditMode) {\n return renderInputField(record);\n } else {\n return (\n \n \n {getFormattedValues(\n record?.value || record?.defaultValue,\n false\n )}\n \n {!editableFields.includes(record?.name) &&\n isEditMode && (\n \n }\n onClick={() =>\n toggleEditableField(record.name)\n }\n />\n \n )}\n \n );\n }\n },\n },\n ];\n\n const checkIsLegacyDataStore = async () => {\n if (dataStore?.dataStoreUuid === undefined) {\n return false;\n }\n try {\n setIsLoading(true);\n const isLegacy =\n await DbParameterGroupService.verifyLegacyDatastore(\n dataStore?.dataStoreUuid\n );\n if (isLegacy.hasLegacyParameters()) {\n createLegacyGroup();\n } else {\n setIsDbParametersModalVisible(true);\n }\n setIsLoading(false);\n } catch (error) {\n showNotifications(\n false,\n 'Error',\n 'Failed to verify legacy datastore'\n );\n setIsLoading(false);\n return false;\n }\n return true;\n };\n\n const assignParameterGroup = async (\n groupSelected: any,\n dataStoreUUID: string\n ) => {\n try {\n await DbParameterGroupService.applyDbParameterGroup(\n groupSelected.uuid,\n dataStoreUUID\n );\n showNotifications(\n true,\n 'Success',\n 'Parameter group assigned successfully'\n );\n refreshJobs();\n } catch (error) {\n showNotifications(\n false,\n 'Error',\n 'Failed to assign parameter group'\n );\n } finally {\n setIsSyncing(true);\n setIsLoading(false);\n setIsAssignGroupModalVisible(false);\n setSelectedGroup(groupSelected);\n }\n };\n\n const syncGroup = async (groupId: string) => {\n setIsLoading(true);\n try {\n await DbParameterGroupService.syncDbParameterGroup(\n groupId,\n true,\n selectedGroup?.dbParameters\n );\n showNotifications(\n true,\n 'Success',\n 'Parameter group syncing job started'\n );\n refreshJobs();\n } catch (error) {\n showNotifications(false, 'Error', 'Failed to sync parameter group');\n } finally {\n setIsLoading(false);\n setIsSyncing(true);\n }\n };\n\n const createLegacyGroup = async () => {\n if (!dataStore?.dataStoreUuid) {\n return;\n }\n await DbParameterGroupService.createLegacyDbParameterGroup(\n dataStore.dataStoreUuid\n );\n setSelectedGroup({\n uuid: dataStore.getUUID(),\n name: dataStore.getUUID(),\n database_vendor: dataStore.getDatabaseVendor(),\n database_version: dataStore.getDatabaseVersion(),\n database_type: dataStore.getClusterType(),\n });\n };\n\n const handleCancel = () => {\n dbParameterForm.resetFields();\n setIsDbParametersModalVisible(false);\n };\n\n const updateDbParametersWithGroupValues = (\n dbParameters: DbParameter[]\n ): DbParameter[] => {\n const { parameters } = dataStore?.parameterGroupSync || {};\n if (!dbParameters || !parameters) return [];\n\n return dbParameters.map((param) => {\n return {\n ...param,\n value: parameters[param.name],\n };\n });\n };\n\n useEffect(() => {\n const parameters = dbParameters?.parameters;\n const groupDbParams = selectedGroup?.dbParameters;\n\n if (parameters && (groupDbParams || dataStore)) {\n setDbParametersTableData(\n updateDbParametersWithGroupValues(parameters)\n );\n }\n }, [dbParameters?.parameters, selectedGroup?.dbParameters, dataStore]);\n\n const onSubmit = async (formData: any) => {\n const data = {\n name: formData.name,\n database_vendor: formData.databaseVendor,\n database_version: formData.databaseVersion,\n database_type: formData.configuration,\n description: formData.description,\n parameters: formData.dbParameters,\n data_stores: [dataStore?.dataStoreUuid],\n };\n\n try {\n await DbParameterGroupService.createDbParameterGroup(data);\n showNotifications(\n true,\n 'Success',\n 'Parameter group created successfully'\n );\n\n fetchDbParameters();\n setIsDbParametersModalVisible(false);\n } catch (error: any) {\n const errorMessage =\n error instanceof Error || error.message\n ? error.message\n : String(error);\n validateFields(errorMessage, error);\n showNotifications(\n false,\n 'Error',\n `Failed to create parameter group: ${errorMessage}`\n );\n }\n };\n\n const updateDbParameters = async (formData: any) => {\n const data = {\n name: formData.name,\n database_vendor: formData.databaseVendor,\n database_version: formData.databaseVersion,\n database_type: formData.configuration,\n description: formData.description,\n parameters: formData.dbParameters,\n data_stores: [dataStore?.dataStoreUuid],\n };\n\n try {\n await DbParameterGroupService.updateDbParameterGroup(\n selectedGroup?.uuid,\n data\n );\n showNotifications(\n true,\n 'Success',\n 'Parameter group updated successfully'\n );\n refreshJobs();\n fetchDbParameters();\n setIsDbParametersModalVisible(false);\n setIsDbParameterEditable(false);\n } catch (error: any) {\n const errorMessage =\n error instanceof Error || error.message\n ? error.message\n : String(error);\n validateFields(errorMessage, error);\n showNotifications(\n false,\n 'Error',\n `Failed to update parameter group: ${errorMessage}`\n );\n } finally {\n setIsLoading(false);\n setIsDbParametersModalVisible(false);\n setIsDbParameterEditable(false);\n }\n };\n\n const validateFields = (errorMessage: string, error: any) => {\n const isNameUnique = errorMessage.includes(\n dbParameterForm.getFieldValue('groupName')\n );\n\n if (isNameUnique) {\n dbParameterForm.setFields([\n {\n name: 'groupName',\n errors: ['Parameter group with this name already exists'],\n },\n ]);\n }\n\n if (error?.errorFields?.length > 0) {\n error.errorFields.forEach(\n (field: { name: string; description: string }) => {\n tableForm.setFields([\n {\n name: field.name,\n errors: ['Enter valid parameters'],\n },\n ]);\n }\n );\n }\n };\n\n const showNotifications = (\n type: boolean,\n message: string,\n description: string\n ) => {\n notification.open({\n message: message,\n description: description,\n icon: type ? (\n \n ) : (\n \n ),\n duration: 4.5,\n });\n };\n\n useEffect(() => {\n fetchDbParameters();\n }, []);\n\n const fetchDbParameters = async () => {\n try {\n setIsLoading(true);\n const fetchDbParameters =\n await DbParameterGroupService.getDbParameterGroups(\n PER_PAGE,\n PAGE\n );\n setDbParametersList(fetchDbParameters.parameterGroups);\n } catch (e) {\n console.error(e);\n } finally {\n setIsLoading(false);\n }\n };\n\n const mapDbParametersGroup = () => {\n if (!dataStore || !dbParametersList) return [];\n return mapDbParameterGroupsToOptions(\n dbParametersList,\n dataStore.getDatabaseVendor(),\n dataStore.getDatabaseVersion(),\n dataStore?.parameterGroupId\n );\n };\n\n return isLoading ? (\n \n ) : (\n <>\n \n \n \n \n \n );\n}\n\nexport default DatastoreSettingDbParameters;\n","import { useEffect, useState } from 'react';\nimport DatabaseConfigurationService from '../../services/DatabaseConfigurationService';\nimport DbParameters from '../../types/DbParameters';\n\nexport default function useDbParameters(dataStoreUuid?: string) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [dbParameters, setDbParameters] = useState(\n undefined\n );\n\n const load = async () => {\n if (dataStoreUuid) {\n setLoading(true);\n\n try {\n const result =\n await DatabaseConfigurationService.getDatabaseParameters(\n dataStoreUuid\n );\n setDbParameters(result);\n setLoading(false);\n setError(null);\n } catch (e: any) {\n setLoading(false);\n setError(e);\n }\n\n setLoading(false);\n }\n };\n\n const refresh = () => {\n const update = async () => {\n setUpdating(true);\n await load();\n setUpdating(false);\n };\n update();\n };\n\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n if (!dbParameters) {\n init();\n } else {\n refresh();\n }\n }, [dataStoreUuid]);\n\n return { dbParameters, refresh, loading, error, updating };\n}\n","import { ReactElement, useEffect, useRef, useState } from 'react';\nimport { Button, Popconfirm, Tabs, notification } from 'antd';\nimport { useHistory, useParams } from 'react-router';\nimport CcxComponentProps from '../../../../core/CcxComponent';\nimport styles from './DataStoreSettings.module.less';\nimport CcxIconCheckCircle from '../../../ccx/icons/CcxIconCheckCircle';\nimport CcxIconCloseCircleTwoTone from '../../../ccx/icons/CcxIconCloseCircleTwoTone';\nimport DatabaseConfigurationService, {\n UpdateDatabaseParametersPayload,\n} from '../../../../services/DatabaseConfigurationService';\nimport DataStoreSettingsGeneral from './DatastoreSettingsGeneral';\nimport DatastoreSettingDbParameters from './DatastoreSettingsDbParamters';\nimport useDbParameters from '../../../../core/hooks/useDbParameters';\nimport AppLoading from '../../../AppLoading';\nimport useDataStoreJobs from '../../../../core/hooks/useDataStoreJobs';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\nimport DbParameters from '../../../../types/DbParameters';\nimport { Parameter } from '../../../../types/DbParameter';\n\ninterface UrlProps {\n dataStoreUuid: string;\n projectUuid: string;\n tab: string;\n}\n\ninterface Props extends CcxComponentProps {\n currentDeployment?: DeploymentsItem | null | undefined;\n}\n\nfunction DataStoreSettings({\n currentDeployment,\n testId = 'DataStoreSettings',\n}: Props): ReactElement {\n const { dataStoreUuid, projectUuid, tab } = useParams();\n const history = useHistory();\n const [isEditMode, setIsEditMode] = useState(false);\n const { refresh, dbParameters, loading } = useDbParameters(dataStoreUuid);\n const [dbParametersData, setDbParametersData] = useState();\n\n useEffect(() => {\n if (dbParameters) setDbParametersData(dbParameters);\n }, [dbParameters]);\n\n const { refresh: refreshJobs } = useDataStoreJobs({\n dataStoreUuid,\n });\n\n const handleSubmit = async (event: React.FormEvent) => {\n event.preventDefault();\n\n const valid = formRef.current?.reportValidity();\n\n if (valid && dbParametersData) {\n try {\n const payload: UpdateDatabaseParametersPayload = {\n parameters: {},\n };\n\n dbParametersData.parameters.forEach((param: Parameter) => {\n payload.parameters[param.name] = {\n value:\n typeof param.value === 'boolean'\n ? String(param.value)\n : param.value,\n };\n });\n\n await DatabaseConfigurationService.updateDatabaseParameters(\n dataStoreUuid,\n payload\n );\n\n refresh && refresh();\n setDbParametersData(undefined);\n setIsEditMode(false);\n\n refreshJobs();\n\n notification.open({\n message: 'Changes are saved successfully',\n icon: ,\n });\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Unknown error occurred';\n\n notification.open({\n message: 'Error',\n description: `An error occurred while processing the request: ${errorMessage}`,\n icon: ,\n });\n }\n }\n };\n\n const onChange = (name: string, value: string | boolean) => {\n if (dbParametersData) {\n let tempDbParametersData = JSON.parse(\n JSON.stringify(dbParametersData)\n );\n\n // Find the index of the parameter with the matching name\n const key = tempDbParametersData?.parameters?.findIndex(\n (param: Parameter) => param.name === name\n );\n\n if (key !== -1) {\n // If a parameter with the matching name is found, update its value\n tempDbParametersData.parameters[key].value = value;\n }\n\n setDbParametersData(tempDbParametersData);\n }\n };\n\n const handleCancel = () => {\n setIsEditMode(false);\n setDbParametersData(undefined);\n };\n\n const formRef = useRef(null);\n\n return !currentDeployment ? (\n \n ) : (\n
\n {\n const tab = tabKey === 'general' ? '' : `/${tabKey}`;\n history.push(\n `/projects/${projectUuid}/data-stores/${dataStoreUuid}/settings${tab}`\n );\n }}\n >\n \n \n \n\n {dbParameters && dbParameters.parameters?.length > 0 && (\n \n \n \n )}\n \n \n );\n}\n\nexport default DataStoreSettings;\n","import { Tooltip } from 'antd';\nimport React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../../core/CcxComponent';\nimport DotLabelStatus from '../../../ccx/common/DotLabelStatus';\nimport SmallContainer from '../../../ccx/common/SmallContainer';\nimport Service from '../../../../types/Service';\n\ninterface Props extends CcxComponentProps {\n service?: Service;\n updating?: boolean;\n}\n\nfunction ServiceStatus({\n service,\n testId = 'ServiceStatus',\n updating = false,\n}: Props): ReactElement {\n let StatusComponent = null;\n\n if (service?.isStatusOk()) {\n StatusComponent = (\n \n );\n } else if (service?.isStatusError()) {\n StatusComponent = (\n \n );\n } else if (service?.isStatusWarning()) {\n StatusComponent = (\n \n );\n } else {\n StatusComponent = (\n \n );\n }\n\n const tooltipTitle =\n service?.isStatusError() || service?.isStatusWarning()\n ? null\n : `${service?.getStatusText()}`;\n\n const top = (\n \n {StatusComponent}{' '}\n \n );\n\n return ;\n}\n\nexport default ServiceStatus;\n","import { ReactElement } from 'react';\nimport CcxComponentProps from '../../../../core/CcxComponent';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\nimport Service from '../../../../types/Service';\nimport CopyToClipboardText from '../../../CopyToClipboardText';\nimport styles from './ServiceInformation.module.less';\nimport useDatastoreServiceDsn from './useDatastoreServiceDsn';\nimport ServiceStatus from './ServiceStatus';\nimport { getHostnameOrIP } from '../../../../core/helpers';\nimport { Tag, Tooltip } from 'antd';\n\ninterface Props extends CcxComponentProps {\n dataStore?: DeploymentsItem;\n service?: Service;\n type?: string;\n deploying?: boolean;\n copyButton?: boolean;\n copyDsn?: boolean;\n replicaLag?: number;\n}\n\nfunction ServiceInformation({\n dataStore,\n service,\n type = 'db',\n testId = 'ServiceInformation',\n deploying = false,\n copyButton = true,\n copyDsn = false,\n replicaLag = undefined,\n}: Props): ReactElement {\n const { dsn } = useDatastoreServiceDsn({ dataStore, service, type });\n\n const fqdn = type === 'db' ? service?.getFQDN() : service?.getHostname();\n\n const ipSection = service && (\n <>\n {deploying ? (\n
\n ---.---.---.---\n
\n ) : (\n
\n {fqdn &&\n (copyButton ? (\n \n ) : (\n getHostnameOrIP(fqdn)\n ))}\n
\n )}\n \n );\n\n const copyDsnSection = copyDsn && dsn && (\n Copy DSN,\n size: 'small',\n className: styles.ServiceInformationDsnBottom,\n }}\n hoverable={false}\n nowrap={true}\n showPreview={false}\n successMessage={'DSN copied to clipboard'}\n />\n );\n\n const serviceStatus = (\n
\n \n {replicaLag !== undefined && !dataStore?.isPostgreSql() && (\n \n 0.2 ? 'warning' : 'success'}\n className={styles.BadgeIcon}\n >{`Replica Lag: ${replicaLag}s`}\n \n )}\n
\n );\n\n return (\n
\n
\n {ipSection}\n {serviceStatus}\n
\n {copyDsnSection}\n
\n );\n}\n\nexport default ServiceInformation;\n","import AppConfirmDialog from '../../../AppConfirmDialog';\nimport ProvisionService from '../../../../services/ProvisionService';\nimport Service from '../../../../types/Service';\nimport { PromoteOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport useDataStoreJobs from '../../../../core/hooks/useDataStoreJobs';\n\nexport default PromoteReplicaButton;\n\nexport type PromoteReplicaButtonProps = {\n service: Service;\n};\n\nfunction PromoteReplicaButton({ service }: PromoteReplicaButtonProps) {\n const { refresh: refreshJobs } = useDataStoreJobs({\n dataStoreUuid: service.getClusterUuid(),\n });\n\n const handleOk = async () => {\n try {\n await ProvisionService.promoteReplica(\n service.getClusterUuid(),\n service.getServiceUuid()\n );\n\n refreshJobs();\n } catch (e: any) {}\n };\n return (\n }\n />\n );\n}\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgCpu(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 15,\n height: 15,\n viewBox: \"0 0 15 15\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M3.85039 0.150391V1.15039H4.65039V0.150391H5.35039V1.15039H6.15039V0.150391H6.85039V1.15039H7.65039V0.150391H8.35039V1.15039H9.15039V0.150391H9.85039V1.15039H10.6504V0.150391H11.3504V1.15039H12.1454L13.3504 2.35542V3.15039H14.3504V3.85039H13.3504V4.65039H14.3504V5.35039H13.3504V6.15039H14.3504V6.85039H13.3504V7.65039H14.3504V8.35039H13.3504V9.15039H14.3504V9.85039H13.3504V10.6504H14.3504V11.3504H13.3504V12.1454L12.1454 13.3504H11.3504V14.3504H10.6504V13.3504H9.85039V14.3504H9.15039V13.3504H8.35039V14.3504H7.65039V13.3504H6.85039V14.3504H6.15039V13.3504H5.35039V14.3504H4.65039V13.3504H3.85039V14.3504H3.15039V13.3504H2.35542L1.15039 12.1454V11.3504H0.150391V10.6504H1.15039V9.85039H0.150391V9.15039H1.15039V8.35039H0.150391V7.65039H1.15039V6.85039H0.150391V6.15039H1.15039V5.35039H0.150391V4.65039H1.15039V3.85039H0.150391V3.15039H1.15039V2.35542L2.35542 1.15039H3.15039V0.150391H3.85039ZM2.64537 1.85039L1.85039 2.64537V11.8554L2.64536 12.6504H11.8554L12.6504 11.8554V2.64536L11.8554 1.85039H2.64537ZM3.15039 3.15039H11.3504V11.3504H3.15039V3.15039ZM3.85039 3.85039V10.6504H10.6504V3.85039H3.85039ZM4.65039 6.15039H9.85039V6.85039H4.65039V6.15039ZM5.65039 7.65039H8.85039V8.35039H5.65039V7.65039Z\",\n fill: \"currentColor\",\n fillOpacity: 0.45\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgCpu);\nexport default __webpack_public_path__ + \"static/media/cpu.7238d761.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgDisk(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 11,\n height: 15,\n viewBox: \"0 0 11 15\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M1.50039 1.35039C1.41755 1.35039 1.35039 1.41755 1.35039 1.50039V14.0004C1.35039 14.0832 1.41755 14.1504 1.50039 14.1504H10.0004C10.0832 14.1504 10.1504 14.0832 10.1504 14.0004V1.50039C10.1504 1.41755 10.0832 1.35039 10.0004 1.35039H1.50039ZM0.650391 1.50039C0.650391 1.03095 1.03095 0.650391 1.50039 0.650391H10.0004C10.4698 0.650391 10.8504 1.03095 10.8504 1.50039V14.0004C10.8504 14.4698 10.4698 14.8504 10.0004 14.8504H1.50039C1.03095 14.8504 0.650391 14.4698 0.650391 14.0004V1.50039ZM6.15039 2.15039H9.35039V4.35039H6.15039V2.15039ZM6.85039 2.85039V3.65039H8.65039V2.85039H6.85039ZM3.58495 4.8503C3.48817 4.84971 3.39218 4.86798 3.30236 4.90411C3.21079 4.94095 3.12746 4.99561 3.05719 5.06492C2.98693 5.13424 2.93114 5.21682 2.89306 5.30788C2.85508 5.39872 2.83548 5.49618 2.83539 5.59463C2.83634 5.77266 2.89974 5.94467 3.01451 6.08069L3.49553 6.6201L3.51089 6.60708L3.96371 7.14089L3.96156 7.14271L4.75024 8.02712L4.75813 8.03742C4.78114 8.06742 4.81464 8.08763 4.85191 8.094C4.88918 8.10037 4.92749 8.09242 4.95915 8.07175C4.99082 8.05108 5.01351 8.01922 5.02269 7.98254C5.03186 7.94585 5.02684 7.90706 5.00863 7.87392L5.00076 7.85958L4.55051 6.82068L4.5156 6.83114L4.4272 6.53616L3.76579 5.01004L3.75975 4.98963C3.74822 4.95061 3.72477 4.91619 3.69269 4.89116C3.66169 4.86698 3.62413 4.85276 3.58495 4.8503ZM5.23582 6.64162L5.63088 7.55318C5.71167 7.70813 5.74244 7.88363 5.72009 8.05566C5.73017 8.05548 5.74027 8.05539 5.75039 8.05539C6.68651 8.05539 7.44539 8.81427 7.44539 9.75039C7.44539 10.6865 6.68651 11.4454 5.75039 11.4454C4.81427 11.4454 4.05539 10.6865 4.05539 9.75039C4.05539 9.34219 4.19968 8.9677 4.44005 8.67513C4.3532 8.62305 4.27567 8.55547 4.21168 8.47493L3.44095 7.61065C3.21289 7.85373 3.02493 8.13251 2.8849 8.43667C2.6955 8.84808 2.59839 9.29594 2.60039 9.74885L2.60039 9.75039C2.60039 10.3734 2.78513 10.9824 3.13126 11.5004C3.47739 12.0185 3.96935 12.4222 4.54494 12.6606C5.12052 12.899 5.75389 12.9614 6.36493 12.8399C6.97597 12.7183 7.53724 12.4183 7.97778 11.9778C8.41831 11.5372 8.71832 10.976 8.83986 10.3649C8.96141 9.75389 8.89903 9.12053 8.66061 8.54494C8.4222 7.96935 8.01845 7.47739 7.50044 7.13126C6.98242 6.78513 6.3734 6.60039 5.75039 6.60039L5.74927 6.60039C5.57704 6.59984 5.4053 6.61367 5.23582 6.64162ZM2.97355 7.08651L2.48388 6.53741C2.26029 6.27492 2.13688 5.94171 2.13539 5.5969L2.13539 5.59542C2.13537 5.40399 2.17339 5.21445 2.24725 5.03784C2.3211 4.86122 2.42931 4.70103 2.5656 4.56659C2.70188 4.43215 2.86352 4.32613 3.04113 4.25468C3.21873 4.18324 3.40877 4.1478 3.60018 4.15042L3.60993 4.15056C3.7965 4.15831 3.97597 4.22436 4.12321 4.33921C4.26416 4.44915 4.36881 4.59866 4.42395 4.76833L4.9505 5.98328C5.21334 5.92742 5.48166 5.89957 5.75095 5.90039C6.51221 5.9005 7.25636 6.12629 7.88934 6.54923C8.52247 6.97228 9.01593 7.57356 9.30733 8.27706C9.59873 8.98055 9.67497 9.75466 9.52641 10.5015C9.37786 11.2483 9.01118 11.9343 8.47275 12.4728C7.93432 13.0112 7.24832 13.3779 6.50149 13.5264C5.75466 13.675 4.98055 13.5987 4.27706 13.3073C3.57356 13.0159 2.97228 12.5225 2.54923 11.8893C2.12633 11.2564 1.90054 10.5124 1.90039 9.75116C1.89806 9.19642 2.01705 8.64786 2.24905 8.14394C2.42938 7.75222 2.67461 7.39484 2.97355 7.08651ZM5.75039 8.75539C5.20087 8.75539 4.75539 9.20087 4.75539 9.75039C4.75539 10.2999 5.20087 10.7454 5.75039 10.7454C6.29991 10.7454 6.74539 10.2999 6.74539 9.75039C6.74539 9.20087 6.29991 8.75539 5.75039 8.75539Z\",\n fill: \"currentColor\",\n fillOpacity: 0.45\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgDisk);\nexport default __webpack_public_path__ + \"static/media/disk.e9cced44.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgRam(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 9,\n height: 15,\n viewBox: \"0 0 9 15\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M0.150391 14.3496L0.150391 0.149609L4.60039 0.149609L4.60039 0.749609C4.60039 0.855695 4.64253 0.957437 4.71755 1.03245C4.79256 1.10747 4.8943 1.14961 5.00039 1.14961C5.10648 1.14961 5.20822 1.10747 5.28323 1.03245C5.35825 0.957437 5.40039 0.855695 5.40039 0.749609L5.40039 0.149609L8.35039 0.149609L8.35039 14.3496L5.40039 14.3496L5.40039 13.7496C5.40039 13.6435 5.35825 13.5418 5.28323 13.4668C5.20822 13.3918 5.10648 13.3496 5.00039 13.3496C4.8943 13.3496 4.79256 13.3918 4.71755 13.4668C4.64253 13.5418 4.60039 13.6435 4.60039 13.7496L4.60039 14.3496L0.150391 14.3496ZM7.65039 12.1496L6.15039 12.1496L6.15039 12.8496L7.65039 12.8496L7.65039 13.6496L6.09584 13.6496C6.07256 13.3945 5.96079 13.1544 5.77821 12.9718C5.57192 12.7655 5.29213 12.6496 5.00039 12.6496C4.70865 12.6496 4.42886 12.7655 4.22257 12.9718C4.03999 13.1544 3.92822 13.3945 3.90494 13.6496L0.850391 13.6496L0.850391 0.849609L3.90494 0.849609C3.92822 1.10468 4.03999 1.34484 4.22257 1.52743C4.42886 1.73372 4.70865 1.84961 5.00039 1.84961C5.29213 1.84961 5.57192 1.73372 5.77821 1.52743C5.96079 1.34484 6.07256 1.10468 6.09584 0.849609L7.65039 0.849609L7.65039 1.64961L6.15039 1.64961L6.15039 2.34961L7.65039 2.34961L7.65039 3.14961L6.15039 3.14961L6.15039 3.84961L7.65039 3.84961L7.65039 4.64961L6.15039 4.64961L6.15039 5.34961L7.65039 5.34961L7.65039 6.14961L6.15039 6.14961L6.15039 6.84961L7.65039 6.84961L7.65039 7.64961L6.15039 7.64961L6.15039 8.34961L7.65039 8.34961L7.65039 9.14961L6.15039 9.14961L6.15039 9.84961L7.65039 9.84961L7.65039 10.6496L6.15039 10.6496L6.15039 11.3496L7.65039 11.3496L7.65039 12.1496ZM1.90039 11.8496L1.90039 9.64961L4.60039 9.64961L4.60039 11.8496L1.90039 11.8496ZM2.60039 11.1496L3.90039 11.1496L3.90039 10.3496L2.60039 10.3496L2.60039 11.1496ZM1.90039 8.34961L1.90039 6.14961L4.60039 6.14961L4.60039 8.34961L1.90039 8.34961ZM2.60039 7.64961L3.90039 7.64961L3.90039 6.84961L2.60039 6.84961L2.60039 7.64961ZM1.90039 4.84961L1.90039 2.64961L4.60039 2.64961L4.60039 4.84961L1.90039 4.84961ZM2.60039 4.14961L3.90039 4.14961L3.90039 3.34961L2.60039 3.34961L2.60039 4.14961Z\",\n fill: \"currentColor\",\n fillOpacity: 0.45\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgRam);\nexport default __webpack_public_path__ + \"static/media/ram.929b00a1.svg\";\nexport { ForwardRef as ReactComponent };","import { ReactComponent as CpuIcon } from '../../../assets/icons/cpu.svg';\nimport { ReactComponent as DiskIcon } from '../../../assets/icons/disk.svg';\nimport { ReactComponent as RamIcon } from '../../../assets/icons/ram.svg';\n\nexport type IconProps = {\n className?: string;\n height?: number;\n width?: number;\n};\n\nexport function CcxIconCpu(props: IconProps) {\n return ;\n}\n\nexport function CcxIconDisk(props: IconProps) {\n return ;\n}\n\nexport function CcxIconRam(props: IconProps) {\n return ;\n}\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../../core/CcxComponent';\nimport Service from '../../../../types/Service';\nimport styles from './ServiceResources.module.less';\nimport { Col, Row, Tooltip } from 'antd';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\nimport InstanceSize from '../../../../types/InstanceSize';\nimport useContentInstanceSizes from '../../../../core/hooks/useContentInstanceSizes';\nimport LazyLoader from '../../../LazyLoader';\nimport CcxLogo from '../../../ccx/common/CcxLogo';\nimport { ApartmentOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport { CcxIconCpu, CcxIconDisk } from '../../../ccx/icons/Icons';\nimport { useAppSelector } from '../../../../redux/hooks';\ninterface Props extends CcxComponentProps {\n service?: Service;\n dataStore?: DeploymentsItem;\n type?: string;\n}\n\nfunction ServiceResources({\n dataStore,\n service,\n type = 'db',\n}: Props): ReactElement {\n const [instanceSize, setInstanceSize] = useState();\n\n const cloudProvider = service && service.getCloudProvider();\n const { instanceSizes, loading } = useContentInstanceSizes(cloudProvider);\n\n const { deploymentOptions } = useAppSelector(\n (state) => state.deploymentOptions\n );\n\n useEffect(() => {\n if (service && instanceSizes) {\n const instance = instanceSizes[0]?.production?.filter(\n (s: InstanceSize) => s.type === service?.getInstanceType()\n );\n setInstanceSize(instance);\n }\n }, [instanceSizes, service]);\n\n const dbInfo = dataStore && (\n
\n \n
{dataStore.getDbVendorName()}
\n
\n {dataStore.db.dbVersion}\n
\n
\n );\n\n const lbInfo = service && (\n
\n \n
{service.getElegantNodeType()}
\n
\n {service.getNodeVersion()}\n
\n
\n );\n\n const instance_Size =\n instanceSize && instanceSize[0] ? (\n
\n
\n \n {instanceSize[0]?.name || ''}\n
\n
\n \n {` (${instanceSize[0]?.cpu || ''} Cores, `}\n \n \n {`${instanceSize[0]?.ram || ''} GB)`}\n \n
\n
\n ) : (\n 'N/A'\n );\n\n const volumeInfo = (\n
\n
\n \n {`${service?.getDiskType() || ''}`}\n
\n {dataStore?.hasStorage() && (\n \n {`(${service?.getDiskSizeInfo(deploymentOptions) || ''}GB)`}\n \n )}\n
\n );\n\n const availabilityZone = service?.getAvailabilityZone() && (\n \n
\n AZ: {service?.getAvailabilityZone()}\n
\n
\n );\n\n return (\n <>\n {loading ? (\n \n ) : (\n instanceSize && (\n
\n \n {dbInfo && (\n \n {type === 'db' ? dbInfo : lbInfo}\n \n )}\n {instance_Size && (\n {instance_Size}\n )}\n {availabilityZone && (\n {availabilityZone}\n )}\n {volumeInfo && {volumeInfo}}\n \n
\n )\n )}\n \n );\n}\n\nexport default ServiceResources;\n","import { useEffect, useState } from 'react';\nimport ContentService, {\n InstanceSizeProps,\n} from '../../services/ContentService';\n\nexport default function useContentInstanceSizes(cloudCode?: string) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [instanceSizes, setInstanceSizes] = useState<\n InstanceSizeProps[] | undefined\n >(undefined);\n\n const load = async () => {\n if (cloudCode) {\n try {\n const resultList = await ContentService.getInstanceSize(\n cloudCode\n );\n setInstanceSizes(resultList);\n setLoading(false);\n setError(null);\n } catch (e: any) {\n setLoading(false);\n setError(e);\n }\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, [cloudCode]);\n\n return { instanceSizes, refresh, loading, updating, error };\n}\n","import styles from './DatastoreScalingStepHeader.module.less';\nimport { ReactNode } from 'react';\n\ninterface DatastoreScalingStepHeaderProps {\n readonly title: string;\n readonly subtitle?: string;\n readonly children: ReactNode;\n readonly testId?: string;\n}\n\nexport default function DatastoreScalingStepHeader({\n title,\n subtitle,\n children,\n testId = 'DatastoreScalingStepHeader',\n}: DatastoreScalingStepHeaderProps) {\n return (\n
\n

\n {title}\n

\n {subtitle}\n

\n

\n {children}\n
\n );\n}\n","import { Col, Row } from 'antd';\nimport styles from './DatastoreScalingCard.module.less';\n\ninterface DatastoreScalingCardProps {\n stepScalingTitle: string;\n stepScalingCount: string;\n}\n\nexport default function DatastoreScalingCard({\n stepScalingTitle,\n stepScalingCount,\n}: DatastoreScalingCardProps) {\n return (\n \n \n
\n {stepScalingTitle}\n \n {stepScalingCount}\n \n
\n \n
\n );\n}\n","import styles from './DatastoreScalingStep1.module.less';\nimport 'rc-slider/assets/index.css';\nimport { Alert, Col, Form, InputNumber, Row, message } from 'antd';\nimport DatastoreScalingStepHeader from './DatastoreScalingStepHeader';\nimport DeploymentsItem from '../../../types/DeploymentsItem';\nimport InstanceVolumeSize from '../../../types/InstanceVolumeSize';\nimport DatastoreScalingCard from './DatastoreScalingCard';\n\ninterface DataStoreScalingStep1Props {\n dataStore: DeploymentsItem | undefined;\n storage: number | undefined;\n handleStorage: Function;\n volume_size: InstanceVolumeSize;\n testId?: string;\n}\n\nexport default function DatastoreScalingStep1({\n dataStore,\n storage,\n handleStorage,\n volume_size,\n testId = 'DatastoreScalingStep1',\n}: DataStoreScalingStep1Props) {\n return (\n <>\n \n \n {storage! < dataStore?.volumeSize! + 10 ? (\n \n \n \n ) : null}\n \n {volume_size && (\n <>\n \n The desired value must be in the\n range of {volume_size?.min}\n GB and {volume_size?.max}GB\n \n }\n >\n \n `${value}`\n }\n onChange={(value) => {\n handleStorage?.(value || undefined);\n }}\n value={storage}\n defaultValue={\n storage\n ? storage\n : dataStore?.volumeSize\n }\n parser={\n ((value: string) =>\n value\n .replace(' ', '')\n .replace(\n volume_size.unit,\n ''\n )) as any\n }\n />\n \n \n )}\n \n \n dataStore?.volumeSize!\n ? storage\n : dataStore?.volumeSize\n } GB`}\n />\n \n \n );\n}\n","import { Col, Row } from 'antd';\nimport styles from './DatastoreScalingInfoCard.module.less';\nimport SmallContainer from '../../ccx/common/SmallContainer';\nimport { useEffect, useState } from 'react';\nimport DeploymentsItem from '../../../types/DeploymentsItem';\nimport AppFlagIcon from '../../ccx/common/AppFlagIcon';\nimport AppLogoBrandMardiaDb from '../../ccx/common/AppLogoBrandMardiaDb';\nimport AppLogoBrandPostgreSql from '../../ccx/common/AppLogoBrandPostgreSql';\nimport AppLogoBrandPercona from '../../ccx/common/AppLogoBrandPercona';\nimport AppLogoBrandRedis from '../../ccx/common/AppLogoBrandRedis';\nimport AppLogoBrandMssql from '../../ccx/common/AppLogoBrandMssql';\nimport { getCloudProviderLogo } from './DataStoreCloudProviderLogo';\nimport { useAppSelector } from '../../../redux/hooks';\n\ninterface DatastoreScalingInfoCardProps {\n readonly dataStore: DeploymentsItem | undefined;\n readonly countryCode: string | undefined;\n readonly setCountryCode: Function;\n}\n\nexport default function DatastoreScalingInfoCard({\n dataStore,\n setCountryCode,\n countryCode,\n}: DatastoreScalingInfoCardProps) {\n const [cards, setCards] = useState([]);\n const { deploymentOptions } = useAppSelector(\n (state) => state.deploymentOptions\n );\n\n const getLogo = (ds: DeploymentsItem) => {\n if (ds.isMariaDb()) {\n return (\n \n );\n }\n if (ds.isPostgreSql()) {\n return (\n \n );\n }\n if (ds.isPercona()) {\n return (\n \n );\n }\n if (ds.isRedis()) {\n return (\n \n );\n }\n if (ds.isMSSQL()) {\n return (\n \n );\n }\n return null;\n };\n\n useEffect(() => {\n if (deploymentOptions && dataStore) {\n setCountryCode(\n deploymentOptions?.getCloudRegion(\n dataStore?.getCloudProvider().code,\n dataStore.cloudRegion.code\n )\n );\n }\n }, [dataStore, deploymentOptions]);\n\n useEffect(() => {\n if (dataStore) {\n const cardData = [\n {\n content: (\n \n {getLogo(dataStore)}\n \n }\n />\n ),\n span: { xs: 4, sm: 2 },\n },\n {\n content: (\n \n {dataStore?.getName()}\n \n }\n middleChildren={\n
{dataStore?.getDbVendorName()}
\n }\n />\n ),\n span: { xs: 6, sm: 8 },\n },\n {\n content: (\n \n {getCloudProviderLogo(\n dataStore.getCloudProvider()\n )}\n
\n {dataStore.getFullCloudProviderName()}\n
\n \n }\n middleChildren={\n <>\n {countryCode && (\n \n )}\n
\n {dataStore.cloudRegion.display_code}\n
\n \n }\n />\n ),\n span: { xs: 14, sm: 12 },\n },\n ];\n\n setCards(cardData);\n }\n }, [dataStore, countryCode]);\n return (\n
\n

\n Datastore\n

\n
\n \n {cards.map((c: any, i: number) => {\n return (\n \n \n \n );\n })}\n \n
\n
\n );\n}\n","import { useEffect, useMemo, useState } from 'react';\nimport { Button, Col, Form, Modal, Row, message, notification } from 'antd';\nimport CcxComponentProps from '../../../../core/CcxComponent';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\nimport DatastoreScalingStep1 from '../DatastoreScalingStep1';\nimport ProvisionService from '../../../../services/ProvisionService';\nimport CcxIconInfoCircleTwoTone from '../../../ccx/icons/CcxIconInfoCircleTwoTone';\nimport CcxIconCloseCircleTwoTone from '../../../ccx/icons/CcxIconCloseCircleTwoTone';\nimport InfoIcon from '@severalnines/bar-frontend-components/build/lib/General/InfoIcon';\nimport PrettyNumber from '../../../ccx/common/PrettyNumber';\nimport DatastoreScalingInfoCard from '../DatastoreScalingInfoCard';\nimport { billingDisabled } from '../../../../core/CcxEnv';\nimport DeploymentOptions from '../../../../types/DeploymentOptions';\nimport useDataStoreJobs from '../../../../core/hooks/useDataStoreJobs';\nimport { useAppSelector } from '../../../../redux/hooks';\n\ninterface Props extends CcxComponentProps {\n datastore: DeploymentsItem;\n pendingJobs: any[];\n refresh: () => void;\n clearStoreInterval: () => void;\n startStoreInterval: () => void;\n setIsButtonDisabled: Function;\n isButtonDisabled: boolean;\n nodes: any[];\n}\n\nfunction ExtendNodeStorageModal({\n testId = 'extendNodeStorageModal',\n datastore,\n pendingJobs,\n nodes,\n refresh,\n startStoreInterval,\n clearStoreInterval,\n setIsButtonDisabled,\n isButtonDisabled,\n}: Props) {\n const [visible, setVisible] = useState(false);\n const [countryCode, setCountryCode] = useState(\n undefined\n );\n const [monthlyCost, setMonthlyCost] = useState(0);\n const [storage, setStorage] = useState(datastore?.volumeSize);\n\n const { refresh: refreshJobs } = useDataStoreJobs({\n dataStoreUuid: datastore?.getUUID(),\n });\n\n useEffect(() => {\n return () => {\n clearStoreInterval();\n };\n }, []);\n\n const onClose = () => {\n setVisible(false);\n clearStoreInterval();\n };\n\n const showModal = () => {\n clearStoreInterval();\n setVisible(true);\n };\n\n const handleStorage = (e: any) => {\n if (e >= datastore?.volumeSize) {\n setStorage(e);\n }\n };\n const { deploymentOptions } = useAppSelector(\n (state) => state.deploymentOptions\n );\n\n useEffect(() => {\n if (deploymentOptions && datastore) {\n setCountryCode(\n deploymentOptions?.getCloudRegion(\n datastore?.getCloudProvider().code,\n datastore.cloudRegion.code\n )\n );\n }\n }, [datastore, deploymentOptions]);\n\n const getVolumeTypePrice = (\n deploymentOptions: DeploymentOptions | undefined,\n datastore: DeploymentsItem\n ) => {\n const volumeTypes =\n deploymentOptions?.instance?.volumeTypes[\n datastore?.cloudProvider?.code\n ];\n\n const volumeTypePrice = volumeTypes?.find(\n (v: any) => v.code === datastore?.volumeType\n )?.price;\n\n return volumeTypePrice / 100;\n };\n\n useEffect(() => {\n const instanceMonthlyPrice = 0;\n const instanceNumber = datastore?.numberOfNodes || 0;\n const storageMonthlyPrice =\n getVolumeTypePrice(deploymentOptions, datastore) || 0;\n const numberOfGB = storage || 0;\n const iopsMonthlyPrice = 0;\n const numberOfIOPS = 0;\n\n const monthlyPriceEstimate =\n instanceMonthlyPrice * instanceNumber +\n storageMonthlyPrice * instanceNumber * numberOfGB +\n iopsMonthlyPrice * instanceNumber * numberOfIOPS;\n\n setMonthlyCost(parseFloat(monthlyPriceEstimate.toFixed(2)));\n }, [datastore, storage, getVolumeTypePrice]);\n\n const handleSubmit = async () => {\n if (storage >= datastore?.volumeSize + 10) {\n try {\n await ProvisionService.updateDatastoreStorage({\n dataStoreUuid: datastore?.getUUID(),\n data: {\n new_volume_size: storage,\n },\n });\n\n refreshJobs();\n\n setIsButtonDisabled(true);\n\n notification.open({\n message: 'Datastore storage',\n description: 'Your datastore storage will updated shortly.',\n icon: ,\n });\n\n setStorage(datastore?.volumeSize);\n onClose();\n startStoreInterval();\n setTimeout(() => {\n setIsButtonDisabled(false);\n }, 5000);\n } catch (e) {\n notification.open({\n message: 'Datastore storage',\n description: `There was an error trying to update the node storage. ${e}`,\n icon: ,\n });\n return;\n }\n } else {\n message.error(\n 'New storage at-least 10 GB greater than current storage'\n );\n }\n };\n\n const volume_size = useMemo(() => {\n if (deploymentOptions && datastore) {\n const code = datastore.cloudProvider.code;\n const volumeType = datastore.volumeType;\n\n return deploymentOptions.instance.volume_sizes[code][volumeType];\n }\n\n return null;\n }, [deploymentOptions, datastore]);\n\n return (\n
\n \n {!billingDisabled && (\n \n
\n Estimated total cost\n \n This amount will be added to\n your next invoice.\n \n }\n />{' '}\n
\n \n $}\n value={monthlyCost}\n sufix={' / month'}\n />\n \n \n )}\n \n \n Cancel\n \n\n \n Save\n \n \n \n }\n >\n \n \n \n \n );\n}\n\nexport default ExtendNodeStorageModal;\n","import { Typography as AntTypography } from 'antd';\nimport { TextProps } from 'antd/lib/typography/Text';\nimport classNames from 'classnames';\nimport './TypographyText.less';\n\nexport default TypographyText;\nexport type TypographyTextProps = TextProps & {\n muted?: boolean;\n primary?: boolean;\n nowrap?: boolean;\n white?: boolean;\n strong?: boolean;\n className?: string;\n children?: React.ReactNode;\n};\n\nfunction TypographyText({\n muted,\n primary,\n nowrap,\n white,\n strong,\n children,\n className,\n ...rest\n}: TypographyTextProps) {\n return (\n \n {children}\n \n );\n}\n","import { Space as AntSpace, SpaceProps as AntSpaceProps } from 'antd';\nimport { Property } from 'csstype';\n\ntype AppSpaceProps = AntSpaceProps & {\n wide?: boolean;\n justify?: Property.JustifyContent;\n};\nexport default function Space({\n wide,\n justify,\n style,\n ...rest\n}: AppSpaceProps) {\n return (\n \n );\n}\n","import { Checkbox, Col, Form, Row, Tooltip } from 'antd';\nimport styles from './DatastoreScalingNodeInfoCard.module.less';\nimport CcxIcon1NodeDeployment from '../../ccx/icons/CcxIcon1NodeDeployment';\nimport TypographyText from '../../../tmp/TypographyText';\nimport Space from '../../common/antd/Space';\nimport { CcxIconCpu, CcxIconDisk, CcxIconRam } from '../../ccx/icons/Icons';\nimport AppForm from '../../ccx/common/AppForm';\nimport { useEffect, useState, MouseEvent } from 'react';\nimport DeploymentsItem from '../../../types/DeploymentsItem';\nimport AppFlagIcon from '../../ccx/common/AppFlagIcon';\nimport InfoIcon from '@severalnines/bar-frontend-components/build/lib/General/InfoIcon';\nimport { Services } from '../../../services/ServiceService';\nimport DbService from '../../../types/DbService';\nimport { CheckboxChangeEvent } from 'antd/lib/checkbox';\nimport CloudProviderRegion from '../../../types/CloudProviderRegion';\nimport DeploymentOptions from '../../../types/DeploymentOptions';\nimport InstanceSize, {\n InstanceSizeClassProps,\n} from '../../../types/InstanceSize';\nimport LazyLoader from '../../LazyLoader';\nimport { useAppSelector } from '../../../redux/hooks';\n\ninterface DatastoreScalingNodeInfoCardProps {\n roleName: string;\n instanceType: string;\n instanceName: string;\n cpu: number;\n ram: number;\n volumeSize: number;\n numberOfNodesToRemove: number;\n countryCode?: string;\n availabilityZone: string;\n showCheckbox: boolean;\n onCheckChange?: (value: boolean) => void;\n checkedCount: number;\n setCheckedCount: (value: number) => void;\n dataStore: DeploymentsItem;\n testId?: string;\n}\n\nfunction DatastoreScalingNodeInfoCard({\n roleName,\n instanceType,\n instanceName,\n cpu,\n ram,\n volumeSize,\n countryCode,\n availabilityZone,\n showCheckbox,\n numberOfNodesToRemove,\n onCheckChange,\n checkedCount,\n setCheckedCount,\n dataStore,\n testId = 'DatastoreScalingNodeInfoCard',\n}: DatastoreScalingNodeInfoCardProps) {\n const isPrimary = roleName === 'primary' || roleName === 'master';\n\n const [isChecked, setIsChecked] = useState(false);\n\n const isGalera = dataStore?.getClusterType() === 'Galera';\n const canRemoveNode = (isPrimary && isGalera) || !isPrimary;\n\n const { deploymentOptions } = useAppSelector(\n (state: any) => state.deploymentOptions\n );\n\n const instanceSizeName = (): string => {\n const cloud = dataStore?.getCloudProvider().code;\n return (\n deploymentOptions?.instance.instanceSizes[cloud].find(\n (size: InstanceSize) => size.type === instanceType\n ).name || ''\n );\n };\n\n const handleCheckChange = (isChecked: boolean) => {\n if (!canRemoveNode) {\n return;\n }\n\n if (checkedCount === numberOfNodesToRemove && isChecked) {\n return;\n }\n\n const newCheckedCount = isChecked ? checkedCount + 1 : checkedCount - 1;\n\n setCheckedCount(newCheckedCount);\n setIsChecked(isChecked);\n\n onCheckChange && onCheckChange(isChecked);\n };\n\n const onChange = (e: CheckboxChangeEvent) => {\n const isChecked = e.target.checked;\n handleCheckChange(isChecked);\n };\n\n const onClick = (e: React.MouseEvent) => {\n if (!showCheckbox || isPrimary) {\n return;\n }\n\n handleCheckChange(!isChecked);\n };\n\n useEffect(() => {\n setIsChecked(false);\n }, [numberOfNodesToRemove]);\n\n return (\n \n \n {isPrimary ? 'primary' : 'replica'}\n \n\n
\n
\n \n \n
\n \n {showCheckbox && (\n \n )}\n \n \n {instanceName}\n \n
\n \n \n {!canRemoveNode && (\n \n Primary node cannot be\n removed.\n \n }\n />\n )}\n\n {canRemoveNode && (\n <>\n {isChecked && (\n \n \n (will be removed)\n \n \n )}\n\n \n All data on this\n node will be lost.\n This action is\n irreversible.\n \n }\n />\n \n )}\n \n \n
\n\n
\n \n Instance: {instanceSizeName()}\n \n
\n \n {cpu ? (\n \n \n \n \n {cpu}\n \n ) : null}\n\n {ram ? (\n \n \n \n \n {ram} GB\n \n ) : null}\n\n \n \n \n \n {volumeSize} GB\n \n\n {countryCode && (\n \n \n \n \n {availabilityZone}\n \n )}\n \n
\n \n \n \n \n \n );\n}\n\ninterface AddCardData {\n instance_size: string;\n availability_zone: string;\n index: number;\n}\n\ninterface Option {\n label: string;\n value: string;\n}\n\ninterface DatastoreScalingNodeAddCardProps {\n kind: string;\n azs: Option[];\n instanceSizes: Option[];\n index: number;\n onChange?: (data: AddCardData) => void;\n}\n\nfunction DatastoreScalingNodeAddCard({\n kind,\n azs,\n instanceSizes,\n index,\n onChange,\n}: DatastoreScalingNodeAddCardProps) {\n const [form] = Form.useForm();\n const [errorFields, setErrorFields] = useState([]);\n const [az, setAz] = useState('');\n const [instanceSize, setInstanceSize] = useState('');\n\n const fields = [\n {\n required: true,\n label: 'Availability Zone',\n placeholder: 'Availability Zone',\n testId: 'availability_zone',\n type: 'select',\n name: 'availability_zone',\n onChange: setAz,\n options: azs,\n },\n {\n required: true,\n label: 'Instance Size',\n placeholder: 'Instance Size',\n testId: 'instance_size',\n type: 'select',\n name: 'instance_size',\n onChange: setInstanceSize,\n options: instanceSizes,\n },\n ];\n\n const filteredFields =\n azs?.length > 1\n ? fields\n : fields?.filter(\n (field: any) => field?.name !== 'availability_zone'\n );\n\n useEffect(() => {\n onChange &&\n onChange({\n instance_size: instanceSize,\n availability_zone: az,\n index,\n });\n }, [az, instanceSize]);\n\n azs?.length === 1 && form.setFieldValue('availability_zone', azs[0]?.value);\n\n return (\n \n \n {kind} (new)\n \n
\n
\n \n \n
\n \n \n New node\n \n
\n
\n \n \n \n
\n \n
\n
\n
\n \n );\n}\n\nexport type ScalingType = 'up' | 'down' | 'none';\n\nexport interface DatastoreScalingNodeInfoCardsValues {\n node_uuids: string[];\n add_nodes: {\n instance_size: string;\n availability_zone: string;\n }[];\n scaling_type: ScalingType;\n}\n\ninterface Props {\n dataStore: DeploymentsItem;\n services: Services;\n numNodes: number;\n deploymentOptions: DeploymentOptions;\n onUpdate?: (data: DatastoreScalingNodeInfoCardsValues) => void;\n testId?: string;\n}\n\nexport default function DatastoreScalingNodeInfoCards({\n services,\n dataStore,\n numNodes,\n deploymentOptions,\n onUpdate,\n testId = 'DatastoreScalingNodeInfoCards',\n}: Props) {\n const [nodesForRemoval, setNodesForRemoval] = useState([]);\n const [checkedCount, setCheckedCount] = useState(0);\n const [newNodes, setNewNodes] = useState([]);\n const [needNodes, setNeedNodes] = useState(0);\n const [existingNodes, setExistingNodes] = useState(\n services.dbServices\n );\n\n useEffect(() => {\n setExistingNodes(services.dbServices);\n }, [services]);\n\n const numberOfNodesToRemove =\n services?.dbServices.length - numNodes\n ? services?.dbServices.length - numNodes\n : 0;\n\n const showCheckbox = needNodes < 0;\n\n useEffect(() => {\n const tempNeededNodes = numNodes - services?.dbServices.length;\n setNeedNodes(tempNeededNodes);\n if (tempNeededNodes > needNodes) {\n addNewNode(tempNeededNodes);\n } else if (needNodes > tempNeededNodes) {\n removeNodes(tempNeededNodes);\n } else if (tempNeededNodes === 0) {\n setNewNodes([]);\n }\n }, [numNodes]);\n\n const azs: CloudProviderRegion[] =\n deploymentOptions &&\n dataStore &&\n deploymentOptions.network.availability_zones[\n dataStore.getCloudProvider().code\n ]\n ? deploymentOptions.network.availability_zones[\n dataStore.getCloudProvider().code\n ][dataStore.cloudRegion.code]\n : [];\n\n const availabilityZoneOpts = azs?.map((region: CloudProviderRegion) => {\n const label = region.name;\n const value = region.code;\n return { label, value };\n });\n\n const instanceSizes: InstanceSizeClassProps[] =\n deploymentOptions &&\n deploymentOptions.instance.instanceSizes[\n dataStore.getCloudProvider().code\n ]\n ? deploymentOptions.instance.instanceSizes[\n dataStore.getCloudProvider().code\n ]\n : [];\n\n const instanceOpts = instanceSizes.map(\n (instance: InstanceSizeClassProps) => {\n const label = `${instance.name}: ${instance.cpu} Cores, ${instance.ram} GB`;\n const value = instance.type;\n\n return { label, value };\n }\n );\n\n const instanceDetails = instanceSizes.reduce((p, c) => {\n const { type, cpu, ram } = c;\n p.set(type, { cpu, ram });\n return p;\n }, new Map());\n\n const addNewNode = (nodesToAdd: number) => {\n let tempNodes: AddCardData[] = [];\n const newNodesNumber = newNodes?.length ? newNodes?.length : 0;\n const newNodesNeeded = nodesToAdd - newNodesNumber;\n if (newNodesNeeded > 0) {\n tempNodes = new Array(newNodesNeeded)\n .fill(newNodesNumber)\n .map((_, i) => {\n return {\n availability_zone: '',\n instance_size: '',\n index: newNodes.length + i,\n };\n });\n }\n setNewNodes([...newNodes, ...tempNodes]);\n };\n\n const removeNodes = (nodesToRemove: number) => {\n if (nodesToRemove < 0) {\n setNewNodes([]);\n return;\n }\n const tempNewNodes: AddCardData[] = newNodes.slice(0, nodesToRemove);\n setNewNodes(tempNewNodes);\n };\n\n const emitChanges = () => {\n if (!onUpdate) {\n return;\n }\n\n const addNodes = newNodes.map((node: AddCardData) => {\n const { instance_size, availability_zone } = node;\n return { instance_size, availability_zone };\n });\n\n let scalingType: ScalingType = 'none';\n\n if (needNodes > 0) {\n scalingType = 'up';\n } else if (needNodes < 0) {\n scalingType = 'down';\n }\n\n onUpdate({\n node_uuids: nodesForRemoval,\n add_nodes: addNodes,\n scaling_type: scalingType,\n });\n };\n\n useEffect(() => {\n emitChanges();\n }, [nodesForRemoval, numNodes]);\n\n useEffect(() => {\n setNodesForRemoval([]);\n setCheckedCount(0);\n }, [numNodes]);\n\n const onCheckChange = (uuid: string, value: boolean) => {\n if (value) {\n setNodesForRemoval([...nodesForRemoval, uuid]);\n } else {\n const updatedUuids = nodesForRemoval?.filter(\n (item: any) => item !== uuid\n );\n setNodesForRemoval(updatedUuids);\n }\n emitChanges();\n };\n\n const onChange = (data: AddCardData) => {\n const nodes = [...newNodes];\n const nodeIndex = nodes.findIndex((n) => n.index === data.index);\n if (nodeIndex < 0) {\n return;\n }\n nodes[nodeIndex].availability_zone =\n availabilityZoneOpts?.length === 1\n ? availabilityZoneOpts[0]?.value\n : data?.availability_zone;\n nodes[nodeIndex].instance_size = data?.instance_size;\n setNewNodes([...nodes]);\n emitChanges();\n };\n\n const infoCard = (db: DbService) => {\n const instance = instanceDetails.get(db.getInstanceType());\n const cpu = instance ? instance.cpu : 0;\n const ram = instance ? instance.ram : 0;\n const countryCode = db.getRegion()?.countryCode ?? '';\n const volumeSize = db.getDiskSize();\n\n return (\n \n onCheckChange(db.getServiceUuid(), value)\n }\n dataStore={dataStore}\n />\n );\n };\n\n const newKind = dataStore.getNewNodesKind();\n\n const addCard = (data: AddCardData) => {\n return (\n \n );\n };\n\n if (!deploymentOptions || !dataStore) {\n return ;\n }\n return (\n <>\n
\n {existingNodes.map(infoCard)}\n
\n
\n {newNodes.map(addCard)}\n
\n \n );\n}\n","import Slider from 'rc-slider';\nimport styles from './DatastoreScalingStep2.module.less';\nimport 'rc-slider/assets/index.css';\nimport { Alert, Col, Row } from 'antd';\nimport DatastoreScalingStepHeader from './DatastoreScalingStepHeader';\nimport DatastoreScalingCard from './DatastoreScalingCard';\nimport DatastoreScalingNodeInfoCards, {\n DatastoreScalingNodeInfoCardsValues,\n} from './DatastoreScalingNodeInfoCard';\nimport DeploymentsItem from '../../../types/DeploymentsItem';\nimport DeploymentOptions from '../../../types/DeploymentOptions';\nimport { useEffect, useState } from 'react';\nimport { Services } from '../../../services/ServiceService';\nimport { replaceIfRedis } from '../../../core/helpers';\n\ninterface DataStoreScalingStep2Props {\n dataStore: DeploymentsItem;\n services: Services;\n deploymentOptions: DeploymentOptions;\n nodeValue: number;\n setNodeValue: Function;\n onUpdate?: (data: DatastoreScalingNodeInfoCardsValues) => void;\n testId?: string;\n}\n\nfunction nodeToString(count: number): string {\n return count === 1 ? `${count} Node` : `${count} Nodes`;\n}\n\ninterface MarkItem {\n label: JSX.Element;\n value: number;\n}\n\ntype Marks = Record;\n\nfunction makeMarks(\n dataStore: DeploymentsItem,\n numberOfNodes: number\n): {\n marks: Marks;\n steps: number;\n} {\n const sizes = dataStore.getScalingSizes();\n const lastValue = sizes.at(-1);\n\n if (sizes.length <= 1) {\n return { marks: {}, steps: 0 };\n }\n\n const steps = Math.ceil(100 / (sizes.length - 1));\n const marks = sizes.reduce((p, value, i) => {\n const nodeText = nodeToString(value);\n const label =\n value === numberOfNodes ? (\n <>\n

{nodeText}

\n \n (Current Configuration)\n

\n \n ) : (\n

{nodeText}

\n );\n return {\n ...p,\n [i * steps]: { label, value },\n };\n }, {} as Marks);\n\n return { marks, steps };\n}\n\nexport default function DatastoreScalingStep2({\n dataStore,\n services,\n deploymentOptions,\n nodeValue,\n setNodeValue,\n onUpdate,\n testId = 'DatastoreScalingStep2',\n}: DataStoreScalingStep2Props) {\n const [marks, setMarks] = useState({});\n const [step, setStep] = useState(0);\n const [sliderValue, setSliderValue] = useState(0);\n const [numberOfNodes, setNumberOfNodes] = useState(\n services?.dbServices.length\n );\n const handleNodeChange = (sliderVal: number) => {\n if (typeof sliderVal !== 'number' || !marks || !marks[sliderVal]) {\n return;\n }\n\n const { value } = marks[sliderVal];\n\n setSliderValue(sliderVal);\n setNodeValue(value);\n };\n\n useEffect(() => {\n if (!dataStore) {\n return;\n }\n const { marks, steps } = makeMarks(dataStore, numberOfNodes);\n // get nodes and number of steps\n const maxNodes: any = dataStore.getScalingSizes().at(-1);\n const sliderVal = ((numberOfNodes - 1) / (maxNodes - 1)) * 100;\n const adjustedSliderVal = Math.min(100, Math.max(0, sliderVal));\n\n setMarks(marks);\n setStep(steps);\n setSliderValue(adjustedSliderVal);\n }, []);\n\n if (step === 0) {\n return (\n \n );\n }\n\n return (\n
\n {['galera', 'redis'].includes(\n dataStore?.getClusterType().toLowerCase()\n ) && (\n \n )}\n \n \n \n \n typeof e === 'number' && handleNodeChange(e)\n }\n step={step}\n min={0}\n max={100}\n />\n \n \n \n \n \n \n \n
\n );\n}\n","import { useEffect, useMemo, useState } from 'react';\nimport { Button, Col, Modal, Row, message, notification } from 'antd';\nimport CcxComponentProps from '../../../../core/CcxComponent';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\nimport ProvisionService from '../../../../services/ProvisionService';\nimport CcxIconInfoCircleTwoTone from '../../../ccx/icons/CcxIconInfoCircleTwoTone';\nimport CcxIconCloseCircleTwoTone from '../../../ccx/icons/CcxIconCloseCircleTwoTone';\nimport InfoIcon from '@severalnines/bar-frontend-components/build/lib/General/InfoIcon';\nimport PrettyNumber from '../../../ccx/common/PrettyNumber';\nimport DatastoreScalingInfoCard from '../DatastoreScalingInfoCard';\nimport DatastoreScalingStep2 from '../DatastoreScalingStep2';\nimport { Services } from '../../../../services/ServiceService';\nimport { billingDisabled } from '../../../../core/CcxEnv';\nimport DeploymentOptions from '../../../../types/DeploymentOptions';\nimport {\n DatastoreScalingNodeInfoCardsValues,\n ScalingType,\n} from '../DatastoreScalingNodeInfoCard';\nimport DbService from '../../../../types/DbService';\nimport useDataStoreJobs from '../../../../core/hooks/useDataStoreJobs';\nimport styles from './DataStoreScaleNodeModal.module.less';\nimport { useAppSelector } from '../../../../redux/hooks';\nimport usePiwikPro from '../../../../core/hooks/usePiwikPro';\nimport {\n CLICK_EVENT,\n DATASTORE_SACLING_NODES_TRIGGERED_FAILED,\n DATASTORE_SACLING_NODES_TRIGGERED_SUCCESSFULLY,\n} from '../../../../core/PiwikConstants';\n\ninterface Props extends CcxComponentProps {\n datastore: DeploymentsItem;\n pendingJobs: any[];\n services: Services;\n refresh: () => void;\n clearStoreInterval: () => void;\n startStoreInterval: () => void;\n setIsButtonDisabled: Function;\n isButtonDisabled: boolean;\n nodes: any[];\n isScalingModalVisible: boolean;\n setIsScalingModalVisible: Function;\n}\n\nfunction ScaleNodeModal({\n testId = 'ScaleNodeModal',\n datastore,\n pendingJobs,\n nodes,\n services,\n refresh,\n clearStoreInterval,\n startStoreInterval,\n setIsButtonDisabled,\n isButtonDisabled,\n isScalingModalVisible,\n setIsScalingModalVisible,\n}: Props) {\n const { trackEvent } = usePiwikPro();\n\n const [storage] = useState(datastore?.volumeSize);\n\n const [nodeValue, setNodeValue] = useState();\n\n const { refresh: refreshJobs } = useDataStoreJobs({\n dataStoreUuid: datastore?.getUUID(),\n });\n\n const [scalingType, setScalingType] = useState('none');\n\n const dataStoreUuid = datastore?.dataStoreUuid;\n const [monthlyCost, setMonthlyCost] = useState(0);\n const [countryCode, setCountryCode] = useState(\n undefined\n );\n const [checkedValues, setCheckedValues] = useState([]);\n const [newNodeData, setNewNodeData] = useState([]);\n\n const { deploymentOptions } = useAppSelector(\n (state) => state.deploymentOptions\n );\n\n useEffect(() => {\n if (!nodeValue) setNodeValue(services?.dbServices.length);\n }, [services]);\n\n const onUpdate = (data: DatastoreScalingNodeInfoCardsValues) => {\n setCheckedValues(data.node_uuids);\n setNewNodeData(data.add_nodes);\n setScalingType(data.scaling_type);\n };\n\n useEffect(() => {\n return () => {\n clearStoreInterval();\n };\n }, []);\n\n const onClose = () => {\n setIsScalingModalVisible(false);\n clearStoreInterval();\n };\n\n useEffect(() => {\n setCheckedValues([]);\n }, [nodeValue]);\n\n const handleSubmit = async () => {\n if (\n scalingType !== 'none' &&\n (checkedValues?.length !== 0 || newNodeData?.length !== 0)\n ) {\n try {\n if (scalingType === 'down' && nodeValue) {\n if (\n checkedValues.length ===\n services?.dbServices.length - nodeValue\n ) {\n await ProvisionService.scaleDownDatastoreNodes({\n dataStoreUuid,\n nodeUuids: checkedValues,\n });\n\n refreshJobs();\n } else {\n return message.error(\n 'Please select all nodes to scale down'\n );\n }\n } else if (scalingType === 'up') {\n const newArr = newNodeData?.map((obj) => {\n const { availability_zone, instance_size } = obj;\n return { availability_zone, instance_size };\n });\n\n await ProvisionService.scaleUpDatastoreNodes({\n dataStoreUuid,\n nodeData: newArr,\n });\n\n refreshJobs();\n }\n\n setNewNodeData([]);\n setCheckedValues([]);\n setIsButtonDisabled(true);\n\n notification.open({\n message: 'Datastore configuration',\n description:\n 'Your datastore configuration will updated shortly.',\n icon: ,\n });\n\n onClose();\n setTimeout(() => {\n setIsButtonDisabled(false);\n }, 5000);\n trackEvent(\n CLICK_EVENT,\n DATASTORE_SACLING_NODES_TRIGGERED_SUCCESSFULLY\n );\n } catch (error) {\n trackEvent(\n CLICK_EVENT,\n DATASTORE_SACLING_NODES_TRIGGERED_FAILED\n );\n notification.open({\n message: 'Error',\n description: `An error occurred while processing the requests. ${error}`,\n icon: ,\n });\n }\n } else {\n message.error('One or more required fields are missing');\n }\n };\n\n const getPriceByType = (t: string) => {\n const deployOption = deploymentOptions?.getInstanceSizes(\n datastore?.cloudProvider\n );\n const option = deployOption?.find((option) => option.type === t);\n return option ? option.price : null;\n };\n\n const newNodeDataWithPrices = useMemo(() => {\n if (newNodeData) {\n const updatedPrices = newNodeData.reduce((acc, node) => {\n const { instance_size, index_no } = node;\n const price = getPriceByType(instance_size);\n\n // Check if an object with the same index_no exists in acc\n const existingIndex = acc.findIndex(\n (item: { index_no: any }) => item.index_no === index_no\n );\n\n if (existingIndex !== -1) {\n // Replace the existing object with the new one\n acc[existingIndex] = { ...node, price };\n } else {\n // Add the new object to the array\n acc.push({ ...node, price });\n }\n\n return acc;\n }, []);\n\n return updatedPrices;\n }\n return undefined;\n }, [newNodeData]);\n\n const sumOfInstancesPrice = useMemo(() => {\n if (newNodeData) {\n return newNodeDataWithPrices?.reduce(\n (accumulator: any, current: { price: any }) =>\n accumulator + (current.price || 0),\n 0\n );\n }\n return undefined;\n }, [newNodeData, newNodeDataWithPrices]);\n\n const numberOfNodes =\n services?.dbServices?.length + newNodeDataWithPrices?.length;\n\n const getVolumeTypePrice = (\n deploymentOptions: DeploymentOptions | undefined,\n datastore: DeploymentsItem\n ) => {\n const volumeTypes =\n deploymentOptions?.instance?.volumeTypes[\n datastore?.cloudProvider?.code\n ];\n\n const volumeTypePrice = volumeTypes?.find(\n (v: any) => v.code === datastore?.volumeType\n )?.price;\n\n return volumeTypePrice / 100;\n };\n\n useEffect(() => {\n const instanceMonthlyPrice = (sumOfInstancesPrice / 100) * 730 || 0;\n const instanceNumber = numberOfNodes || 0;\n const storageMonthlyPrice =\n getVolumeTypePrice(deploymentOptions, datastore) || 0;\n const numberOfGB = storage || 0;\n const iopsMonthlyPrice = 0;\n const numberOfIOPS = 0;\n\n const monthlyPriceEstimate =\n instanceMonthlyPrice * instanceNumber +\n storageMonthlyPrice * instanceNumber * numberOfGB +\n iopsMonthlyPrice * instanceNumber * numberOfIOPS;\n\n setMonthlyCost(parseFloat(monthlyPriceEstimate.toFixed(2)));\n }, [getVolumeTypePrice, numberOfNodes, storage, sumOfInstancesPrice]);\n\n return (\n \n {!billingDisabled && (\n \n
\n Estimated total cost{' '}\n \n This amount will be added to your\n next invoice.\n \n }\n />{' '}\n
\n \n $}\n value={monthlyCost}\n sufix={' / month'}\n />\n \n \n )}\n \n \n Cancel\n \n\n \n Save\n \n \n \n }\n >\n \n\n \n \n );\n}\n\nexport default ScaleNodeModal;\n","import AppConfirmDialog from '../../../AppConfirmDialog';\nimport ProvisionService from '../../../../services/ProvisionService';\nimport Service from '../../../../types/Service';\nimport { ToolOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport CcxIconInfoCircleTwoTone from '../../../ccx/icons/CcxIconInfoCircleTwoTone';\nimport CcxIconCloseCircleTwoTone from '../../../ccx/icons/CcxIconCloseCircleTwoTone';\nimport { notification } from 'antd';\nimport useDataStoreJobs from '../../../../core/hooks/useDataStoreJobs';\n\nexport default RepairNodeButton;\n\nexport type RepairNodeButtonProps = {\n service: Service;\n};\n\nfunction RepairNodeButton({ service }: RepairNodeButtonProps) {\n const { refresh: refreshJobs } = useDataStoreJobs({\n dataStoreUuid: service.getClusterUuid(),\n });\n\n const handleOk = async () => {\n try {\n await ProvisionService.repairNode({\n dataStoreUuid: service.getClusterUuid(),\n hostUuid: service?.getServiceUuid(),\n });\n\n refreshJobs();\n\n notification.open({\n message: 'Repair node',\n description: 'The node will be repaired soon.',\n icon: ,\n });\n } catch (e: any) {\n notification.open({\n message: 'Repair node',\n description: `There was an error trying to repair the node. ${e}`,\n icon: ,\n });\n }\n };\n return (\n }\n />\n );\n}\n","export type DbUserClassProps = {\n grants: string;\n host_allow: string;\n user_name: string;\n uniqueGrants: string[];\n auth_plugin: string;\n};\n\nexport interface DbUserInterface {\n grants: string;\n hostAllow: string;\n username: string;\n uniqueKey: string; // this is used for the Table component, a unique key for each value\n uniqueGrants: string[];\n authPlugin: string;\n}\n\nexport const DEFAULT_DATABASE_USER = 'ccxadmin';\n\nexport default class DbUser implements DbUserInterface {\n readonly grants: string;\n readonly hostAllow: string;\n readonly username: string;\n readonly uniqueKey: string;\n readonly uniqueGrants: string[];\n readonly authPlugin: string;\n\n constructor(props: DbUserClassProps) {\n this.grants = props.grants;\n this.hostAllow = props.host_allow;\n this.username = props.user_name;\n this.uniqueKey = `${props.user_name}-${props.host_allow}`;\n this.uniqueGrants = [];\n this.authPlugin = props.auth_plugin;\n }\n\n /** Return array with a list of unique grants\n * Example:\n * From this.grants: \"CREATE USER;db1:ALL PRIVILEGES,GRANT OPTION;db2:SELECT;db3:SELECT\n * Returns: [\"CREATE USER\", \"ALL PRIVILEGES\", \"GRANT OPTION\", \"SELECT\"]\n *\n */\n getUniqueGrants() {\n if (this.grants.length > 0) {\n const regex = /^.*\\:(.*)$/;\n\n // get parsed raw data:\n // 1: split ';'\n // 2: run regex\n // 3: flatten results into a single array\n const grants = this.grants\n .split(';')\n .map((g) => g.replace(regex, '$1').split(','))\n .flat(1);\n\n // remove duplicates and return data\n // see: https://medium.com/dailyjs/how-to-remove-array-duplicates-in-es6-5daa8789641c\n return grants.filter((item, i) => grants.indexOf(item) === i);\n }\n return [];\n }\n\n isDefaultUser(): boolean {\n return this.username === DEFAULT_DATABASE_USER;\n }\n}\n","import DbUser from './DbUser';\n\nexport type DbUsersClassProps = {\n accounts: any[];\n // reply_received: string;\n // request_created: string;\n // request_id: number;\n // request_processed: string;\n // request_status: string;\n // request_user_id: number;\n // total: number;\n};\n\nexport interface DbUsersInterface {\n accounts: DbUser[];\n // replyReceived: string;\n // requestCreated: string;\n // requestId: number;\n // requestProcessed: string;\n // requestStatus: string;\n // requestUserId: number;\n // total: number;\n}\n\nexport default class DbUsers implements DbUsersInterface {\n readonly accounts: DbUser[];\n // readonly replyReceived: string;\n // readonly requestCreated: string;\n // readonly requestId: number;\n // readonly requestProcessed: string;\n // readonly requestStatus: string;\n // readonly requestUserId: number;\n // readonly total: number;\n\n constructor(props?: any[]) {\n this.accounts =\n props?.map((a) => {\n return new DbUser(a);\n }) || [];\n // this.replyReceived = props.reply_received;\n // this.requestCreated = props.request_created;\n // this.requestId = props.request_id;\n // this.requestProcessed = props.request_processed;\n // this.requestStatus = props.request_status;\n // this.requestUserId = props.request_user_id;\n // this.total = props.total;\n }\n}\n","export type DbDatabaseClassProps = {\n // acl: string;\n // class_name: string;\n // cluster_id: number;\n // data_directory: string;\n // database_id: number;\n database_name: string;\n database_size: number;\n // dirty: boolean;\n number_of_tables: number;\n // owner_group_id: number;\n // owner_group_name: string;\n // owner_user_id: number;\n // owner_user_name: string;\n // version: number;\n status: string;\n};\n\nexport interface DbDatabaseInterface {\n // acl: string;\n // className: string;\n // clusterId: number;\n // dataDirectory: string;\n // databaseId: number;\n databaseName: string;\n databaseSize: number;\n // dirty: boolean;\n numberOfTables: number;\n // ownerGroupId: number;\n // ownerGroupName: string;\n // ownerUserId: number;\n // ownerUserName: string;\n // version: number;\n uniqueKey: string; // this is used for the Table component, a unique key for each value\n status: string;\n}\n\nexport const DEFAULT_DATABASE_NAME = 'ccxdb';\nexport const DELETING_STATUS = 'deleted';\n\nexport default class DbDatabase implements DbDatabaseInterface {\n // readonly acl: string;\n // readonly className: string;\n // readonly clusterId: number;\n // readonly dataDirectory: string;\n // readonly databaseId: number;\n readonly databaseName: string;\n readonly databaseSize: number;\n // readonly dirty: boolean;\n readonly numberOfTables: number;\n // readonly ownerGroupId: number;\n // readonly ownerGroupName: string;\n // readonly ownerUserId: number;\n // readonly ownerUserName: string;\n // readonly version: number;\n readonly uniqueKey: string;\n readonly status: string;\n\n constructor(props: DbDatabaseClassProps) {\n // this.acl = props.acl;\n // this.className = props.class_name;\n // this.clusterId = props.cluster_id;\n // this.dataDirectory = props.data_directory;\n // this.databaseId = props.database_id;\n this.databaseName = props.database_name;\n this.databaseSize = props.database_size;\n // this.dirty = props.dirty;\n this.numberOfTables = props.number_of_tables;\n // this.ownerGroupId = props.owner_group_id;\n // this.ownerGroupName = props.owner_group_name;\n // this.ownerUserId = props.owner_user_id;\n // this.ownerUserName = props.owner_user_name;\n // this.version = props.version;\n this.uniqueKey = `${props.database_name}-${props.database_size}`;\n this.status = props.status;\n }\n\n isDefaultDatabase(): boolean {\n return this.databaseName === DEFAULT_DATABASE_NAME;\n }\n\n isDeleting(): boolean {\n return this.status === DELETING_STATUS;\n }\n}\n","import DbDatabase from './DbDatabase';\n\n// export type DbDatabasesClassProps = {\n// clusters: any[];\n// debug_messages: string[];\n// reply_received: string;\n// request_created: string;\n// request_id: number;\n// request_processed: string;\n// request_status: string;\n// request_user_id: number;\n// };\n\nexport interface DbDatabasesInterface {\n databases: DbDatabase[];\n // debugMessages: string[];\n // replyReceived: string;\n // requestCreated: string;\n // requestId: number;\n // requestProcessed: string;\n // requestStatus: string;\n // requestUserId: number;\n}\n\nexport default class DbDatabases implements DbDatabasesInterface {\n readonly databases: DbDatabase[];\n // readonly debugMessages: string[];\n // readonly replyReceived: string;\n // readonly requestCreated: string;\n // readonly requestId: number;\n // readonly requestProcessed: string;\n // readonly requestStatus: string;\n // readonly requestUserId: number;\n\n constructor(props?: any[]) {\n this.databases =\n props?.map((d: any) => {\n return new DbDatabase(d);\n }) || [];\n // this.clusters = props.clusters;\n // this.debugMessages = props.debug_messages;\n // this.replyReceived = props.reply_received;\n // this.requestCreated = props.request_created;\n // this.requestId = props.request_id;\n // this.requestProcessed = props.request_processed;\n // this.requestStatus = props.request_status;\n // this.requestUserId = props.request_user_id;\n }\n}\n","import ApiService from './ApiService';\nimport DbUsers from '../types/DbUsers';\nimport DbDatabases from '../types/DbDatabases';\nimport { API_USERDB } from '../core/CcxEnv';\n\n// constants\nconst API_URL = API_USERDB;\n\nexport type AddUserProps = {\n uuid: string;\n dbUsername: string;\n dbPassword: string;\n allowedHost?: string;\n dbName: string;\n dbPrivileges: string;\n dbAuthPlugin: string;\n isAdmin?: boolean;\n isSuperUser?: boolean;\n ownDatabase?: boolean;\n};\nexport type AddUserForm = {\n uuid: string;\n dbUsername: string;\n dbPassword: string;\n allowedHost?: string;\n dbName: string;\n dbUserDbCommandCategories: string;\n dbUserDbCommands: string;\n dbUserDbChannels: string;\n dbUserDbKeys: string;\n dbAuthPlugin: string;\n isAdmin?: boolean;\n isSuperUser?: boolean;\n};\n\nexport type DeleteDbUserProps = {\n uuid: string;\n dbUsername: string;\n dbHost: string;\n};\n\nexport type AddDatabaseProps = {\n uuid: string;\n dbName: string;\n dbOwner: string;\n};\n\nexport type DeleteDatabaseProps = {\n uuid: string;\n dbName: string;\n};\n\nexport default class DbUserService extends ApiService {\n /**\n * Get list of available database privileges.\n * @param {string} uuid\n */\n static async getPrivileges(uuid: string): Promise {\n return await this.request('GET', `user/available_privs/${uuid}`);\n }\n\n /**\n * Get list of DB Users.\n * @param {string} uuid\n */\n static async getAllUsers(uuid: string): Promise {\n const response = await this.request('GET', `users/${uuid}`);\n return new DbUsers(response);\n }\n\n /**\n * Add a DB User\n * @param {string} uuid\n * @param dbUsername\n * @param dbPassword\n * @param allowedHost\n * @param dbName\n * @param dbPrivileges\n * @param dbAuthPlugin\n * @param isAdmin\n */\n static async addUser({\n uuid,\n dbUsername,\n dbPassword,\n allowedHost,\n dbName,\n dbPrivileges,\n dbAuthPlugin,\n isAdmin,\n isSuperUser,\n ownDatabase,\n }: AddUserProps): Promise {\n const postData = {\n data: {\n database_username: dbUsername,\n database_password: dbPassword,\n database_name: dbName,\n database_privileges: isSuperUser\n ? 'SUPERUSER'\n : dbPrivileges.trim(),\n create_admin_user: isAdmin,\n database_host: allowedHost,\n auth_plugin: dbAuthPlugin,\n own_database: ownDatabase,\n },\n };\n return await this.request('POST', `user/${uuid}`, postData);\n }\n\n /**\n * Get list of Databases.\n * @param {string} uuid\n */\n static async getAllDatabases(uuid: string): Promise {\n const response = await this.request('GET', `databases/${uuid}`);\n return new DbDatabases(response);\n }\n\n /**\n * Add a Database\n * @param {string} uuid\n */\n static async addDatabase({\n uuid,\n dbName,\n dbOwner,\n }: AddDatabaseProps): Promise {\n const postData = {\n data: {\n database_name: dbName,\n database_owner: dbOwner,\n },\n };\n return await this.request('POST', `database/${uuid}`, postData);\n }\n\n /**\n * Delete a Database\n * @param {string} uuid\n */\n static async deleteDatabase({\n uuid,\n dbName,\n }: DeleteDatabaseProps): Promise {\n const data = {\n data: {\n database_name: dbName,\n },\n };\n return await this.request('DELETE', `database/${uuid}`, data);\n }\n\n /**\n * Delete a Db User\n * @param {DeleteDbUserProps} props\n */\n static async deleteUser({\n uuid,\n dbUsername,\n dbHost,\n }: DeleteDbUserProps): Promise {\n const requestData = {\n data: {\n database_username: dbUsername,\n database_host: dbHost,\n },\n };\n return await this.request('DELETE', `user/${uuid}`, requestData);\n }\n\n protected static getApiUrl() {\n return API_URL;\n }\n}\n","import { useEffect, useState } from 'react';\nimport DbUserService from '../../services/DbUserService';\nimport DbDatabases from '../../types/DbDatabases';\n\nexport default function useDatabases(uuid: string | undefined) {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n const [databases, setDatabases] = useState(\n undefined\n );\n\n const load = async () => {\n if (uuid) {\n setLoading(true);\n\n try {\n const details = await DbUserService.getAllDatabases(uuid);\n setDatabases(details);\n setLoading(false);\n setError(null);\n } catch (e: any) {\n setLoading(false);\n setError(e);\n }\n\n setLoading(false);\n }\n };\n\n const refresh = () => {\n load();\n };\n\n useEffect(() => {\n refresh();\n }, [uuid]);\n\n return { databases, refresh, loading, error };\n}\n","import { useEffect, useState } from 'react';\nimport DbUsers from '../../types/DbUsers';\nimport DbUserService from '../../services/DbUserService';\n\nexport default function useDbUsers(uuid: string | undefined) {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n const [dbUsers, setDbUsers] = useState(undefined);\n\n const load = async () => {\n if (uuid) {\n setLoading(true);\n\n try {\n const details = await DbUserService.getAllUsers(uuid);\n setDbUsers(details);\n setLoading(false);\n setError(null);\n } catch (e: any) {\n setLoading(false);\n setError(e);\n }\n\n setLoading(false);\n }\n };\n\n const refresh = () => {\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n refresh();\n }, [uuid]);\n\n return { dbUsers, refresh, loading, error };\n}\n","import React, { ReactElement } from 'react';\nimport AppForm from '../../components/ccx/common/AppForm';\n\ninterface Props {\n fields?: any[];\n errorFields?: any[];\n}\n\nexport default function ConnectionAssistantFormStep1({\n fields,\n errorFields,\n}: Props): ReactElement {\n return ;\n}\n","import { ReactElement, useState } from 'react';\nimport styles from './ConnectionAssistantFormStep2.module.less';\nimport DsnService from '../../services/DsnService';\nimport AppCodeCard from '../AppCodeCard';\nimport { Select } from 'antd';\nimport CcxComponentProps from '../../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {\n formData?: any;\n service?: string;\n}\n\nexport default function ConnectionAssistantFormStep2({\n formData,\n service,\n testId = 'ConnectionAssistantFormStep2',\n}: Props): ReactElement {\n const { Option } = Select;\n\n const [technology, setTechnology] = useState();\n\n const { account, database, hostPort, password } = formData;\n const [host, port] = hostPort.split(':');\n const getUsageExample = (targetLanguage: string) => {\n return DsnService.getDsnUsageExample({\n service,\n username: account,\n database,\n hostPort,\n host,\n port,\n target: targetLanguage,\n password,\n });\n };\n\n const getCodeCardContent = (targetLanguage: string) => {\n return getUsageExample(targetLanguage)?.dsnForDisplay?.map(\n (line: string) => {\n return <>{line};\n }\n );\n };\n\n let technologies: string[] = [\n 'dsn',\n 'ado.net',\n 'jdbc',\n 'node.js',\n 'odbc',\n 'php',\n 'php.pdo',\n 'php.pear.db',\n 'python',\n 'ruby',\n 'go',\n ];\n switch (service) {\n case 'redis':\n technologies = ['dsn', 'node.js', 'php', 'python', 'ruby', 'go'];\n break;\n case 'mssql':\n technologies = ['dsn'];\n break;\n }\n\n const onChange = (e: any) => {\n setTechnology(e);\n };\n\n return (\n \n

Technology

\n \n {technologies.map((o: string) => {\n return (\n \n {o.toUpperCase()}\n \n );\n })}\n \n\n {technology && (\n <>\n

{technology.toUpperCase()}

\n \n {getCodeCardContent(technology)}\n \n \n )}\n \n );\n}\n","import { ReactElement, useState, useEffect, useMemo } from 'react';\nimport styles from './ConnectionAssistantForm.module.less';\nimport { Form, Divider } from 'antd';\nimport ConnectionAssistantFormStep1 from './ConnectionAssistantFormStep1';\nimport ConnectionAssistantFormStep2 from './ConnectionAssistantFormStep2';\nimport DbDatabase from '../../types/DbDatabase';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport useDatastoreServiceDsn from '../projects/dataStores/services/useDatastoreServiceDsn';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport DbNode from '../../types/DbNode';\n\ninterface Props extends CcxComponentProps {\n databases?: DbDatabase[];\n users?: string[];\n hosts?: any;\n service?: string;\n dataStore?: DeploymentsItem | undefined;\n}\n\nfunction ConnectionAssistantForm({\n databases,\n users,\n hosts,\n service,\n testId = 'ConnectionAssistantForm',\n dataStore,\n}: Props): ReactElement {\n const type = 'db';\n const { password } = useDatastoreServiceDsn({\n dataStore,\n type,\n });\n\n const [form] = Form.useForm();\n const [errorFields] = useState([]);\n const [showConnectionString, setShowConnectionString] =\n useState(false);\n\n const getHostOptions = () => {\n // if access to services is disabled primary and replica url will be empty, in this case we fall back to our old logic of showing all hosts\n if (!dataStore?.primary_url && !dataStore?.replica_url) {\n return hosts?.dbHosts?.map((d: DbNode) => {\n return {\n label: `${d.getFqdnPort(\n false\n )} [${d.getFormattedNodeType()}]`,\n value: `${d.getFqdnPort(false)}`,\n };\n });\n }\n\n if (!hosts) return [];\n\n // if access to services is enabled, only show primary and replica hosts\n\n const allHosts = hosts.dbHosts.concat(hosts.lbHosts);\n\n let options = [];\n\n if (\n allHosts.some(\n (host: any) => host.role === 'primary' || host.role === 'master'\n )\n ) {\n options.push({\n label: 'Primary',\n value: dataStore.primary_url,\n });\n }\n\n if (\n allHosts.some(\n (host: any) =>\n host.role === 'replica' ||\n host.role === 'slave' ||\n host.role === 'SECONDARY'\n )\n ) {\n options.push({\n label: 'Replica',\n value: dataStore.replica_url,\n });\n }\n\n if (dataStore.isMSSQL()) {\n options = options.filter(\n (option: any) => !option.label.includes('Replica')\n );\n }\n\n return options;\n };\n\n const fieldsSetup = useMemo(() => {\n return {\n step1: [\n {\n name: ['dbuser'],\n testId: 'ConnectionAssistantFormDBUser',\n required: true,\n label: 'Database user',\n placeholder: 'Select a database user',\n type: 'select',\n options:\n users?.map((user) => ({\n label: user,\n value: user,\n })) || [],\n },\n {\n name: ['database'],\n testId: 'ConnectionAssistantFormDatabase',\n required: true,\n label: 'Database name',\n placeholder: 'Select a database',\n type: 'select',\n options:\n databases?.map((d) => ({\n label: d.databaseName,\n value: d.databaseName,\n })) || [],\n },\n {\n name: ['host'],\n testId: 'ConnectionAssistantFormHost',\n required: true,\n label: 'Endpoint',\n placeholder: 'Select an endpoint',\n type: 'select',\n options: getHostOptions(),\n },\n ],\n };\n }, [users, databases, hosts, dataStore]);\n\n const [fields, setFields] = useState(null);\n const [formData, setFormData] = useState();\n\n useEffect(() => {\n if (dataStore?.isRedis()) {\n setFields({\n step1: [\n fieldsSetup.step1[0],\n fieldsSetup.step1[fieldsSetup.step1.length - 1],\n ],\n });\n } else {\n setFields(fieldsSetup);\n }\n }, [dataStore, fieldsSetup]);\n\n // return boolean if form is valid\n const validateFormStep = async () => {\n const { dbuser: account, host: hostPort } = form.getFieldsValue();\n let { database } = form.getFieldsValue();\n\n if (dataStore?.isRedis()) {\n database = '0';\n }\n setFormData({ account, database, hostPort, password });\n\n account && database && hostPort\n ? setShowConnectionString(true)\n : setShowConnectionString(false);\n };\n\n return (\n
\n

Configure your connection strings for your database

\n\n Connection settings\n\n {fields && (\n <>\n \n \n \n\n \n

\n Connection string examples\n

\n\n {showConnectionString && (\n \n )}\n \n )}\n
\n );\n}\n\nexport default ConnectionAssistantForm;\n","import { ReactElement, useState } from 'react';\nimport { Button, Modal } from 'antd';\nimport styles from './ConnectionAssistant.module.less';\nimport { ApiOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport ConnectionAssistantForm from './ConnectionAssistantForm';\nimport DbDatabase from '../../types/DbDatabase';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport { Row } from 'antd';\nimport { Col } from 'antd';\nimport DeploymentsItem from '../../types/DeploymentsItem';\ninterface Props extends CcxComponentProps {\n databases?: DbDatabase[];\n users?: string[];\n hosts?: any;\n service?: string;\n disabled?: boolean;\n datastore?: DeploymentsItem | undefined;\n}\n\nfunction ConnectionAssistant({\n databases,\n users,\n hosts,\n service,\n datastore,\n disabled = false,\n testId = 'ConnectionAssistant',\n}: Props): ReactElement {\n const [connectionStringsVisible, setConnectionStringsVisible] =\n useState(false);\n\n const hide = () => {\n setConnectionStringsVisible(false);\n };\n\n const show = () => {\n if (disabled) return;\n\n setConnectionStringsVisible(true);\n };\n\n return (\n
\n \n \n \n Connection assistant\n \n \n\n \n \n \n Close\n \n \n \n }\n >\n \n \n
\n );\n}\n\nexport default ConnectionAssistant;\n","import { useEffect, useState } from 'react';\nimport useDataStore from '../../../../core/hooks/useDataStore';\nimport useDatabases from '../../../../core/hooks/useDatabases';\nimport useDbUsers from '../../../../core/hooks/useDbUsers';\nimport ConnectionAssistantWidget from '../../../dbUsers/ConnectionAssistant';\nimport DbUser from '../../../../types/DbUser';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\n\ninterface ActionMenuProps {\n dataStoreUuid: string | undefined;\n currentDeployment: DeploymentsItem | undefined;\n}\n\nfunction ConnectionAssistant({\n dataStoreUuid,\n currentDeployment,\n}: ActionMenuProps) {\n const { databases } = useDatabases(dataStoreUuid);\n const { dataStore: deployment } = useDataStore(dataStoreUuid);\n const [hosts, setHosts] = useState(undefined);\n const [dbService, setDbService] = useState('');\n const [usersHosts, setUsersHosts] = useState([]);\n const { dbUsers } = useDbUsers(dataStoreUuid);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n if (deployment) {\n setHosts(deployment.getHosts());\n }\n }, [deployment]);\n\n useEffect(() => {\n setDbService(currentDeployment?.getServiceName() || '');\n }, [currentDeployment]);\n\n useEffect(() => {\n if (dbUsers && dbUsers.accounts && dbUsers.accounts?.length) {\n setUsersHosts(\n dbUsers.accounts?.map((u: DbUser) => {\n return u.username;\n })\n );\n }\n }, [dbUsers]);\n\n useEffect(() => {\n if (hosts && dbService && currentDeployment && databases && usersHosts)\n setLoading(false);\n }, [hosts, currentDeployment, dbService, databases, usersHosts]);\n\n return !loading ? (\n \n ) : null;\n}\n\nexport default ConnectionAssistant;\n","import DatastoreScalingStepHeader from '../DatastoreScalingStepHeader';\nimport { Col, Form, InputNumber, Row, Select } from 'antd';\nimport InfoIcon from '@severalnines/bar-frontend-components/build/lib/General/InfoIcon';\nimport styles from './DatastoreVolumeCard.module.less';\nimport {\n DatastoreConfigurations,\n SelectOptions,\n} from './DataStoreNodeConfiguration';\nimport InstanceVolumeType from '../../../../types/InstanceVolumeType';\n\ninterface DatastoreVolumeCardProps {\n readonly testId?: string;\n readonly selectOptions: SelectOptions;\n readonly configuration: DatastoreConfigurations | undefined;\n readonly onChangeConfigurations: Function;\n}\n\nconst IO1: string = 'io1';\n\nfunction DatastoreVolumeCard({\n selectOptions,\n configuration,\n onChangeConfigurations,\n testId = 'DatastoreVolumeCard',\n}: DatastoreVolumeCardProps) {\n return (\n \n \n \n \n {\n onChangeConfigurations({\n ...configuration,\n storageType: value,\n });\n }}\n size=\"large\"\n data-testid={`${testId}VolumeTypeSelect`}\n >\n {selectOptions?.volumeTypes.map(\n (t: InstanceVolumeType) => (\n \n \n \n {t.name}{' '}\n {t.info && (\n \n )}\n \n \n \n )\n )}\n \n \n \n \n {configuration?.storageType === IO1 && (\n
\n

\n IOPS\n

\n \n {\n onChangeConfigurations({\n ...configuration,\n iops: value,\n });\n }}\n size=\"large\"\n data-testid={`${testId}VolumeIopsInput`}\n />\n \n
\n )}\n \n
\n
\n );\n}\n\nexport default DatastoreVolumeCard;\n","import styles from './DatastoreScalingStep1.module.less';\nimport { Alert, Col, Form, InputNumber, Row } from 'antd';\nimport DatastoreScalingStepHeader from './DatastoreScalingStepHeader';\nimport DeploymentsItem from '../../../types/DeploymentsItem';\nimport InstanceVolumeSize from '../../../types/InstanceVolumeSize';\nimport DatastoreScalingCard from './DatastoreScalingCard';\nimport { DatastoreConfigurations } from './services/DataStoreNodeConfiguration';\n\ninterface DataStoreScalingProps {\n readonly dataStore: DeploymentsItem | undefined;\n readonly volumeSize: InstanceVolumeSize;\n readonly testId?: string;\n readonly showSubtitle?: boolean;\n readonly configuration: DatastoreConfigurations | undefined;\n readonly onChangeConfigurations: Function;\n}\n\nexport default function DatastoreScaling({\n dataStore,\n volumeSize,\n showSubtitle = true,\n configuration,\n onChangeConfigurations,\n testId = 'DatastoreScalingStep1',\n}: DataStoreScalingProps) {\n const isUpgradeStorageValid =\n (configuration?.storage ?? 0) < (dataStore?.volumeSize ?? 0) + 10;\n\n const cleanValue = (value: string, unitToRemove: string): string => {\n return value.replace(' ', '').replace(unitToRemove, '');\n };\n\n const parser = (displayValue: string | undefined): number => {\n const cleanedValue = cleanValue(displayValue ?? '', volumeSize.unit);\n return Number(cleanedValue);\n };\n\n return (\n \n \n {dataStore && isUpgradeStorageValid ? (\n \n \n \n ) : null}\n \n {volumeSize && (\n \n The desired value must be in the range of{' '}\n {volumeSize?.min}\n GB and {volumeSize?.max}GB\n \n }\n >\n `${value}`}\n onChange={(value) => {\n if (value)\n onChangeConfigurations({\n ...configuration,\n storage: value,\n });\n }}\n value={configuration?.storage}\n defaultValue={configuration?.storage}\n parser={parser}\n />\n \n )}\n \n \n \n \n \n \n );\n}\n","import { useEffect, useMemo, useState } from 'react';\nimport {\n Alert,\n Button,\n Col,\n Dropdown,\n Form,\n Menu,\n Modal,\n Row,\n Tooltip,\n message,\n notification,\n} from 'antd';\nimport { billingDisabled } from '../../../../core/CcxEnv';\nimport InfoIcon from '@severalnines/bar-frontend-components/build/lib/General/InfoIcon';\nimport PrettyNumber from '../../../ccx/common/PrettyNumber';\nimport {\n CompressOutlined,\n InfoCircleOutlined,\n SaveOutlined,\n} from '@ant-design/icons';\nimport DatastoreScalingInfoCard from '../DatastoreScalingInfoCard';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\nimport styles from './DataStoreNodeConfiguration.module.less';\nimport DatastoreVolumeCard from './DatastoreVolumeCard';\nimport DatastoreScaling from '../DatastoreScaling';\nimport ProvisionService from '../../../../services/ProvisionService';\nimport CcxIconInfoCircleTwoTone from '../../../ccx/icons/CcxIconInfoCircleTwoTone';\nimport CcxIconCloseCircleTwoTone from '../../../ccx/icons/CcxIconCloseCircleTwoTone';\nimport useDataStoreJobs from '../../../../core/hooks/useDataStoreJobs';\nimport { useParams } from 'react-router';\nimport { getNonErroredJobs } from '../../../../core/helpers';\nimport InstanceVolumeSize from '../../../../types/InstanceVolumeSize';\nimport InstanceVolumeType from '../../../../types/InstanceVolumeType';\nimport { useAppSelector } from '../../../../redux/hooks';\nimport usePiwikPro from '../../../../core/hooks/usePiwikPro';\nimport {\n CLICK_EVENT,\n DATASTORE_UPGRADING_STORAGE_TRIGGERED_FAILED,\n DATASTORE_UPGRADING_STORAGE_TRIGGERED_SUCCESSFULLY,\n OPEN_DATASTORE_SCALE_NODES_MODAL,\n OPEN_DATASTORE_UPGRADE_STORAGE_MODAL,\n} from '../../../../core/PiwikConstants';\nimport { CAN_MODIFY_DATASTORE } from '../../../../core/PermissionRoles';\nimport Can from '../../../../core/providers/Can';\n\ninterface DataStoreNodeConfigurationProps {\n readonly testId?: string;\n readonly setIsScalingModalVisible: Function;\n readonly dataStore: DeploymentsItem | undefined;\n readonly services: any;\n readonly clearStoreInterval: Function;\n}\n\nexport type DatastoreConfigurations = {\n iops: number | undefined;\n storage: number | undefined;\n storageType: string | undefined;\n};\n\nexport type SelectOptions = {\n volumeTypes: InstanceVolumeType[];\n volumeSizes: InstanceVolumeSize[];\n};\n\ninterface UrlProps {\n dataStoreUuid?: string;\n}\n\nfunction DataStoreNodeConfiguration({\n services,\n dataStore,\n clearStoreInterval,\n setIsScalingModalVisible,\n testId = 'DataStoreNodeConfigurationModal',\n}: DataStoreNodeConfigurationProps) {\n let { dataStoreUuid } = useParams();\n const [form] = Form.useForm();\n const { trackEvent } = usePiwikPro();\n const [isVisible, setIsVisible] = useState(null);\n const [monthlyCost, setMonthlyCost] = useState(0);\n const [countryCode, setCountryCode] = useState(\n undefined\n );\n const [isButtonDisabled, setIsButtonDisabled] = useState(true);\n const [configuration, setConfiguration] =\n useState();\n const { jobs } = useDataStoreJobs({\n dataStoreUuid,\n });\n const pendingJobs = getNonErroredJobs(jobs);\n\n const [selectOptions, setSelectOptions] = useState({\n volumeTypes: [],\n volumeSizes: [],\n });\n const { deploymentOptions } = useAppSelector(\n (state) => state.deploymentOptions\n );\n\n const volumeSize = useMemo(() => {\n if (deploymentOptions && dataStore) {\n const code = dataStore.cloudProvider.code;\n const volumeType = dataStore.volumeType;\n return deploymentOptions.instance.volume_sizes[code][volumeType];\n }\n return null;\n }, [deploymentOptions, dataStore]);\n\n useEffect(() => {\n processOptions();\n if (dataStore) {\n setConfiguration({\n storage: dataStore.volumeSize,\n storageType: dataStore.volumeType,\n iops: dataStore.volumeIops === 0 ? 1000 : dataStore.volumeIops,\n });\n }\n }, [deploymentOptions]);\n\n const processOptions = () => {\n let volumeSizes: InstanceVolumeSize[] = [];\n let volumeTypes: InstanceVolumeType[] = [];\n if (deploymentOptions && dataStore) {\n const code = dataStore.cloudProvider.code;\n volumeTypes = deploymentOptions.instance.volumeTypes[code].filter(\n (type: any) => type.code !== ''\n );\n volumeSizes = deploymentOptions.instance.volume_sizes[code];\n }\n setSelectOptions({ volumeSizes, volumeTypes });\n };\n\n const getVolumeTypePrice = () => {\n if (!dataStore) {\n return;\n }\n const cloudProviderCode = dataStore?.cloudProvider?.code;\n const volumeTypes =\n deploymentOptions?.instance?.volumeTypes?.[cloudProviderCode];\n\n const volumeTypePrice = volumeTypes?.find(\n (volumeType: any) => volumeType.code === configuration?.storageType\n )?.price;\n\n return volumeTypePrice / 100;\n };\n\n useEffect(() => {\n const numberOfNodes = services?.dbServices?.length;\n let instanceNumber = numberOfNodes || 0;\n let storageMonthlyPrice = getVolumeTypePrice() ?? 0;\n let numberOfGB = configuration?.storage ?? 0;\n let iopsMonthlyPrice = 0;\n let numberOfIOPS = 0;\n\n let monthlyPriceEstimate =\n storageMonthlyPrice * instanceNumber * numberOfGB +\n iopsMonthlyPrice * instanceNumber * numberOfIOPS;\n setMonthlyCost(parseFloat(monthlyPriceEstimate.toFixed(2)));\n }, [getVolumeTypePrice, configuration, services?.dbServices?.length]);\n\n const onSubmitForm = async () => {\n await upgradeStorage();\n };\n\n const upgradeStorage = async () => {\n if (!dataStore) return;\n\n const isUpgradeStorageValid =\n (configuration?.storage ?? 0) < (dataStore?.volumeSize ?? 0) + 10;\n if (form.isFieldTouched('volumeSize') && isUpgradeStorageValid) {\n message.error(\n 'New storage must be at least 10 GB greater than current storage.'\n );\n return;\n }\n const data = processData();\n if (data) {\n try {\n await ProvisionService.updateDatastoreStorage({\n dataStoreUuid: dataStore?.getUUID(),\n data,\n });\n successNotification();\n trackEvent(\n CLICK_EVENT,\n DATASTORE_UPGRADING_STORAGE_TRIGGERED_SUCCESSFULLY\n );\n } catch (error) {\n trackEvent(\n CLICK_EVENT,\n DATASTORE_UPGRADING_STORAGE_TRIGGERED_FAILED\n );\n notification.open({\n message: 'Datastore storage',\n description: `There was an error trying to upgrading. ${error}`,\n icon: ,\n });\n }\n setIsVisible(null);\n }\n };\n\n const processData = () => {\n if (!dataStore) return;\n const isStorageTypeSame =\n dataStore.volumeType === configuration?.storageType;\n const isStorageIops = configuration?.storageType === 'io1';\n if (isStorageTypeSame) {\n return {\n new_volume_size: configuration.storage,\n new_volume_iops:\n configuration?.storageType === 'io1'\n ? configuration?.iops\n : undefined,\n };\n } else if (!isStorageTypeSame && isStorageIops) {\n return {\n change_volume: {\n new_volume_type: configuration?.storageType,\n new_volume_iops: configuration?.iops,\n },\n };\n } else if (\n !isStorageTypeSame &&\n !isStorageIops &&\n !form.isFieldTouched('volumeSize')\n ) {\n return {\n change_volume: {\n new_volume_type: configuration?.storageType,\n },\n };\n } else {\n return {\n change_volume: {\n new_volume_size: configuration?.storage,\n new_volume_type: configuration?.storageType,\n new_volume_iops:\n configuration?.storageType === 'io1'\n ? configuration.iops\n : undefined,\n },\n };\n }\n };\n\n const successNotification = () => {\n notification.open({\n message: 'Datastore storage',\n description: 'Your datastore storage will be updated shortly.',\n icon: ,\n });\n setIsVisible(null);\n };\n\n const onChangeConfigurations = (value: DatastoreConfigurations) => {\n form.setFieldsValue(value);\n setConfiguration(value);\n if (\n dataStore?.volumeSize !== value.storage ||\n dataStore?.volumeType !== value.storageType ||\n dataStore?.volumeIops !== value.iops\n ) {\n setIsButtonDisabled(false);\n return;\n }\n setIsButtonDisabled(true);\n };\n\n const closeModal = async () => {\n setIsVisible(null);\n form.setFieldsValue({\n volumeSize: dataStore?.volumeSize,\n volumeIops: dataStore?.volumeIops,\n });\n setConfiguration({\n storage: dataStore?.volumeSize,\n storageType: dataStore?.volumeType,\n iops: dataStore?.volumeIops,\n });\n };\n\n const openScaleModal = () => {\n trackEvent(CLICK_EVENT, OPEN_DATASTORE_SCALE_NODES_MODAL);\n clearStoreInterval();\n setIsScalingModalVisible(true);\n };\n\n const openStorageModal = (key: string) => {\n trackEvent(CLICK_EVENT, OPEN_DATASTORE_UPGRADE_STORAGE_MODAL);\n setIsVisible(key);\n };\n\n const showNodesConfiguration =\n dataStore?.canChangeVolumeType() || dataStore?.canScaleNodes();\n return (\n <>\n {showNodesConfiguration && (\n <>\n \n 0 ||\n !dataStore?.isOperable()\n }\n overlay={\n \n {dataStore?.canChangeVolumeType() && (\n setIsVisible(e.key)}\n >\n Edit Storage\n \n )}\n {dataStore?.canScaleNodes() && (\n \n Scale Nodes\n \n )}\n \n }\n placement=\"bottomRight\"\n trigger={['click']}\n >\n \n Nodes Configurations\n \n
\n \n \n {!billingDisabled && (\n \n
\n
\n Estimated total cost{' '}\n \n This amount will be\n added to your next\n invoice.\n \n }\n />{' '}\n
\n \n $}\n value={monthlyCost}\n sufix={' / month'}\n />\n
\n \n \n )}\n \n \n Cancel\n \n onSubmitForm()}\n type=\"primary\"\n >\n Save\n \n \n \n }\n >\n
\n \n \n {dataStore && !dataStore?.isEphemeral() && (\n \n )}\n \n\n \n \n The update will be performed using a\n roll-forward upgrade algorithm{' '}\n \n \n The update will be\n performed using a\n roll-forward upgrade\n algorithm with the\n following steps:\n \n
    \n
  1. \n The oldest replica\n (or primary if no\n replica exists) will\n be selected first;\n
  2. \n
  3. \n A new node will be\n added with the same\n specification as the\n oldest node and join\n the datastore;\n
  4. \n
  5. \n The oldest node will\n be removed;\n
  6. \n
  7. \n If it is a\n primary-replica\n configuration then\n the primary will be\n updated last. A new\n node will be added,\n the new node will be\n promoted to become\n the new primary, and\n the old primary will\n be removed.\n
  8. \n
\n \n }\n >\n \n \n \n }\n showIcon\n type=\"info\"\n />\n \n \n \n )}\n \n );\n}\n\nexport default DataStoreNodeConfiguration;\n","import ApiService from './ApiService';\nimport { API_DEPLOYMENT_V3 } from '../core/CcxEnv';\nimport DeploymentsItem from '../types/DeploymentsItem';\nimport DeploymentOptions from '../types/DeploymentOptions';\n\n// constants\nconst API_URL = API_DEPLOYMENT_V3;\n\nexport default class DataStoreServiceSingle extends ApiService {\n /**\n * Get Data Store.\n */\n static async getDataStore(\n dataStoreUuid: string,\n deploymentOptions: DeploymentOptions\n ): Promise {\n // @TODO: Use the projectUuid when the backend is ready\n // const response = await this.request('GET', `deployments/${projectUuid}`);\n try {\n const response = await this.request(\n 'GET',\n `data-stores/${dataStoreUuid}`\n );\n return new DeploymentsItem(response, deploymentOptions);\n } catch (e) {\n throw e;\n }\n }\n\n protected static getApiUrl() {\n return API_URL;\n }\n}\n","import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';\nimport DataStoreServiceSingle from '../services/DatastoreServiceSingle';\nimport DeploymentsItem from '../types/DeploymentsItem';\nimport { isUserDisconnected } from '../core/helpers';\n\ninterface DatastoreType {\n dataStore: DeploymentsItem | undefined;\n isLoading: boolean;\n isSuccess: boolean;\n isError: boolean;\n}\nconst initialState = {\n dataStore: undefined,\n isError: false,\n isSuccess: false,\n isLoading: false,\n} as DatastoreType;\n\nexport type GetDataStoreParams = {\n dataStoreUuid: string;\n};\n\nexport const getCurrentDataStore = createAsyncThunk(\n 'datastore/getDatastore',\n async ({ dataStoreUuid }: GetDataStoreParams, { getState }: any) => {\n if (isUserDisconnected()) {\n const { dataStore } = getState()?.dataStore;\n if (dataStore) return dataStore;\n }\n try {\n const { deploymentOptions } = getState()?.deploymentOptions;\n const response = await DataStoreServiceSingle.getDataStore(\n dataStoreUuid,\n deploymentOptions\n );\n return response;\n } catch (e) {\n throw e;\n }\n }\n);\n\nexport const datastoreSlice = createSlice({\n name: 'datastore',\n initialState,\n reducers: {\n getCurrentDataStore: (state, action) => {\n state.isLoading = false;\n state.dataStore = action.payload;\n state.isSuccess = true;\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getCurrentDataStore.pending, (state) => {\n state.isLoading = true;\n })\n .addCase(getCurrentDataStore.fulfilled, (state, action) => {\n state.isLoading = false;\n state.isSuccess = true;\n state.dataStore = action.payload;\n })\n .addCase(getCurrentDataStore.rejected, (state, action) => {\n state.isLoading = false;\n state.isError = true;\n });\n },\n});\n\nexport default datastoreSlice.reducer;\n","export type PrometheusPostgreSqlReplicaLagStatsBackendApiProps = {\n created: number;\n instance: number;\n replica_lag: number;\n};\n\nexport default class PrometheusPostgreSqlReplicaLagStats {\n readonly created: number;\n readonly instance: number;\n readonly replicaLag: number;\n\n constructor(props: PrometheusPostgreSqlReplicaLagStatsBackendApiProps) {\n this.created = props.created;\n this.instance = props.instance;\n this.replicaLag = props.replica_lag;\n }\n}\n","import PrometheusReplicaLag from './PrometheusReplicaLag';\n\nexport interface PrometheusReplicaLagDataInterface {\n PrometheusReplicaLag: PrometheusReplicaLag[];\n}\n\nexport default class PrometheusReplicaLagData\n implements PrometheusReplicaLagDataInterface\n{\n readonly PrometheusReplicaLag: PrometheusReplicaLag[];\n\n constructor(props?: PrometheusReplicaLag[]) {\n this.PrometheusReplicaLag =\n props?.map((d: any) => {\n return new PrometheusReplicaLag(d);\n }) || [];\n }\n}\n","import ApiService from './ApiService';\nimport dayjs from 'dayjs';\nimport { API_STAT } from '../core/CcxEnv';\nimport PrometheusReplicaLagData from '../types/PrometheusRelicaLagData';\n\n// constants\nconst API_URL = API_STAT;\nconst DEFAULT_STEP = 60; // recommended: match prometheus scrape interval\n\ntype PrometheusQuery = {\n query: string;\n step?: number;\n};\n\nexport default class PrometheusStatService extends ApiService {\n static async getLoadAverage(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'loadAverage',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getCpuUsage(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'cpuUsage',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getRamUsage(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'ramUsage',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getDiskSpaceUsage(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'diskSpaceUsage',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getNetworkUsage(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'networkUsage',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getDiskIops(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'diskIops',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getDiskIOUtil(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'diskIOUtil',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getDiskThroughput(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'diskThroughput',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getReplicaLag(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n const response = await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'replicaLag',\n from,\n to,\n DEFAULT_STEP\n );\n return new PrometheusReplicaLagData(response);\n }\n\n static async getMySqlHandlers(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'mySqlHandlers',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getMySqlHandlerTransactions(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'mySqlHandlerTransactions',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getMySqlDbConnections(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'mySqlDbConnections',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getMySqlQueries(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'mySqlQueries',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getMySqlScanOperations(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'mySqlScanOperations',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getMySqlTableLocking(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'mySqlTableLocking',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getMySqlTemporaryTables(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'mySqlTemporaryTables',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getMySqlSorting(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'mySqlSorting',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getMySqlAbortedConnections(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'mySqlAbortedConnections',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getMySqlMemoryUtilization(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'mySqlMemoryUtilization',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getMssqlQPS(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'mssqlQPS',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getMssqlProcesses(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'mssqlProcesses',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getProxySqlQuestions(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'proxySqlQuestions',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getProxySqlSlowQueries(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'proxySqlSlowQueries',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getProxySqlQueriesHostgroupDistribution(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'proxySqlQueriesHostgroupDistribution',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getProxySqlLatencyHostgroupDistribution(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'proxySqlLatencyHostgroupDistribution',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getProxySqlDataSentHostgroupDistribution(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'proxySqlDataSentHostgroupDistribution',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getProxySqlDataReceivedHostgroupDistribution(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'proxySqlDataReceivedHostgroupDistribution',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getProxySqlActiveTransactions(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'proxySqlActiveTransactions',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getProxySqlQueriesBackend(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'proxySqlQueriesBackend',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getProxySqlClientConnections(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'proxySqlClientConnections',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getProxySqlServerConnections(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'proxySqlServerConnections',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getProxySqlQueryCacheMemory(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'proxySqlQueryCacheMemory',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getProxySqlQueryCacheGetSet(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'proxySqlQueryCacheGetSet',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getProxySqlQueryCacheInOutBytes(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'proxySqlQueryCacheInOutBytes',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getProxySqlMemoryUtilization(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'proxySqlMemoryUtilization',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getPostgreSqlSelectFetched(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'postgreSqlSelectFetched',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getPostgreSqlInsert(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'postgreSqlInsert',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getPostgreSqlUpdate(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'postgreSqlUpdate',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getPostgreSqlDelete(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'postgreSqlDelete',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getPostgreSqlSelectReturned(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'postgreSqlSelectReturned',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getPostgreSqlActiveSessions(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'postgreSqlActiveSessions',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getPostgreSqlIdleSessions(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'postgreSqlIdleSessions',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getPostgreSqlIdleSessionsInTransaction(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'postgreSqlIdleSessionsInTransaction',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getPostgreSqlIdleSessionsInTransactionAborted(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'postgreSqlIdleSessionsInTransactionAborted',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getPostgreSqlLockTables(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'postgreSqlLockTables',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getPostgreSqlCheckpointsRequestedAndTimed(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'postgreSqlCheckpointsRequestedAndTimed',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getPostgreSqlCheckpointSyncTime(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'postgreSqlCheckpointSyncTime',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getPostgreSqlCheckpointWriteTime(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'postgreSqlCheckpointWriteTime',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getPostgreSqlDiskIOUtilization(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'postgreSqlDiskIOUtilization',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getPostgreSqlDiskUsage(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'postgreSqlDiskUsage',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getPostgreSqlDiskLatency(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'postgreSqlDiskLatency',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getHaProxyBackendsUpDown(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'haProxyBackendsUpDown',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getHaProxyBackendServersUpDown(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'haProxyBackendServersUpDown',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getHaProxyTotalInOut(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'haProxyTotalInOut',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getHaProxyBackendTotalBytesIn(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'haProxyBackendTotalBytesIn',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getHaProxyBackendTotalBytesOut(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'haProxyBackendTotalBytesOut',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getHaProxyBackendServersTotalBytesIn(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'haProxyBackendServersTotalBytesIn',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getHaProxyBackendServersTotalBytesOut(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'haProxyBackendServersTotalBytesOut',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getHaProxyCurrentSessionsByBackend(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'haProxyCurrentSessionsByBackend',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getHaProxyCurrentSessionRateBackends(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'haProxyCurrentSessionRateBackends',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getHaProxyCurrentSessionsBackendServers(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'haProxyCurrentSessionsBackendServers',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getHaProxyCurrentSessionRateBackendServers(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'haProxyCurrentSessionRateBackendServers',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getHaProxyMaxSessionBackendServers(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'haProxyMaxSessionBackendServers',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getHaProxySessions(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'haProxySessions',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getHaProxyBackendTotalNumberOfConnectionErrors(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'haProxyBackendTotalNumberOfConnectionErrors',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getHaProxyBackendMaxQueuedRequests(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'haProxyBackendMaxQueuedRequests',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getHaProxyBackendCurrentQueuedRequests(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'haProxyBackendCurrentQueuedRequests',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getRedisCommandsPerSec(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'redisCommandsPerSec',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getRedisTotalKeys(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'redisTotalKeys',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getRedisConnectedClients(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'redisConnectedClients',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getRedisBlockedClients(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'redisBlockedClients',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getRedisMemoryUsed(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'redisMemoryUsed',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n static async getRedisSlaveLag(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n ) {\n return await this.queryPrometheusApi(\n uuid,\n host_uuid,\n 'redisSlaveLag',\n from,\n to,\n DEFAULT_STEP\n );\n }\n\n protected static async returnFormatted(\n response: Promise,\n metrics: string[]\n ) {\n if (!response)\n throw new Error('Empty or invalid prometheus API response');\n const result = await response;\n const data: any[] = [];\n\n result.forEach((item: any, z: number) => {\n if (item.status === 'success') {\n item.data.result[0].values.forEach((v: any[], i: number) => {\n if (!data[i]) data[i] = {};\n data[i][metrics[z]] = parseFloat(v[1]);\n data[i].created = v[0];\n });\n } else {\n throw new Error(`Invalid status ${item.status}`);\n }\n });\n\n return data;\n }\n\n protected static getPrometheusApiQueryString(\n range: boolean = false,\n from: string,\n to: string,\n step?: number\n ): string {\n if (!from || !to)\n throw new Error(\n `Missing parameters in getPrometheusApiQueryString`\n );\n\n let queryStr = `?range=${range}`;\n queryStr = `${queryStr}&from=${encodeURIComponent(from)}`;\n queryStr = `${queryStr}&to=${encodeURIComponent(to)}`;\n if (step) {\n queryStr = `${queryStr}&step=${encodeURIComponent(step)}`;\n }\n\n return queryStr;\n }\n\n protected static async queryPrometheusApi(\n uuid: string,\n host_uuid: string,\n stat: string,\n from?: string,\n to?: string,\n step?: number\n ) {\n const date = new Date();\n const minutes = 1000 * 60;\n date.setTime(date.getTime() - 30 * minutes); // default value\n const start = from ? from : dayjs(date.getTime()).format();\n const end = to ? to : dayjs(new Date().getTime()).format();\n\n const requestData = {\n data: {\n host_uuid: host_uuid === '' ? undefined : host_uuid,\n stat,\n },\n };\n\n return await this.request(\n 'POST',\n `stat/${uuid}/prometheus${this.getPrometheusApiQueryString(\n true,\n start,\n end,\n step\n )}`,\n requestData\n );\n }\n\n protected static getApiUrl() {\n return API_URL;\n }\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport moment from 'moment';\nimport PrometheusPostgreSqlReplicaLagStats from '../../types/PrometheusReplicaLag';\n\ninterface Props {\n dataStoreUuid?: string;\n offset?: number;\n limit?: number;\n}\n\ninterface ReplicaInfo {\n replicaLag: number;\n created: number;\n}\n\ninterface ReplicaData {\n [key: string]: ReplicaInfo;\n}\n\nexport default function useReplicaLag({ dataStoreUuid }: Props) {\n const [replicaLag, setReplicaLag] = useState();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(false);\n const [updating, setUpdating] = useState(false);\n\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n if (!replicaLag) {\n init();\n } else {\n refresh();\n }\n }, [dataStoreUuid]);\n\n const refresh = () => {\n const update = async () => {\n setUpdating(true);\n await load();\n setUpdating(false);\n };\n update();\n };\n\n const load = async () => {\n const from = moment()\n .subtract(5, 'minutes')\n .format('YYYY-MM-DDTHH:mm:ssZ');\n const to = moment().format('YYYY-MM-DDTHH:mm:ssZ');\n\n if (dataStoreUuid) {\n try {\n const { PrometheusReplicaLag: response } =\n await PrometheusStatService.getReplicaLag(\n dataStoreUuid,\n '',\n from,\n to\n );\n\n if (response.length) {\n return findLatest(response);\n }\n } catch (e) {\n console.error(e);\n }\n }\n };\n\n const findLatest = (lags: PrometheusPostgreSqlReplicaLagStats[]) => {\n const replicaLagObject: any = {};\n lags.forEach((lag) => {\n if (!replicaLagObject[lag.instance]) {\n replicaLagObject[lag.instance] = {\n replicaLag: (lag.replicaLag / 1000).toFixed(1),\n created: lag.created,\n };\n } else {\n if (\n new Date(lag.created) >\n new Date(replicaLagObject[lag.instance].created)\n ) {\n replicaLagObject[lag.instance] = {\n replicaLag: (lag.replicaLag / 1000).toFixed(1),\n created: lag.created,\n };\n }\n }\n });\n\n setReplicaLag(replicaLagObject);\n\n return replicaLagObject;\n };\n\n return { replicaLag, refresh, error, loading };\n}\n","import AppConfirmDialog from '../../../AppConfirmDialog';\nimport ProvisionService from '../../../../services/ProvisionService';\nimport Service from '../../../../types/Service';\nimport { ReloadOutlined } from '@ant-design/icons';\nimport useDataStoreJobs from '../../../../core/hooks/useDataStoreJobs';\nimport { notification } from 'antd';\nimport CcxIconInfoCircleTwoTone from '../../../ccx/icons/CcxIconInfoCircleTwoTone';\nimport CcxIconCloseCircleTwoTone from '../../../ccx/icons/CcxIconCloseCircleTwoTone';\n\nexport type RebootNodeButtonProps = {\n service: Service;\n};\n\nfunction RebootNodeButton({ service }: RebootNodeButtonProps) {\n const { refresh: refreshJobs } = useDataStoreJobs({\n dataStoreUuid: service.getClusterUuid(),\n });\n\n const handleOk = async () => {\n try {\n await ProvisionService.rebootNode(\n service.getClusterUuid(),\n service.getServiceUuid()\n );\n refreshJobs();\n notification.open({\n message: 'Restart Node',\n description: `Restarting node (${service.getHostnameOrIP()}) in progress; it will be ready soon.`,\n icon: ,\n });\n } catch (e: any) {\n notification.open({\n message: 'Restart Node',\n description: `Failed to restart node (${service.getHostnameOrIP()}). Please try again.`,\n icon: ,\n });\n }\n };\n return (\n }\n />\n );\n}\n\nexport default RebootNodeButton;\n","import { ReactElement, useEffect, useState } from 'react';\nimport { Alert, Col, Menu, notification, Row } from 'antd';\nimport CcxComponentProps from '../../../../core/CcxComponent';\nimport Service from '../../../../types/Service';\nimport AppGridTable from '../../../ccx/common/AppGridTable';\nimport styles from './DataStoreServices.module.less';\nimport ServiceConnectionInformation from './ServiceConnectionInformation';\nimport ServiceInformation from './ServiceInformation';\nimport ServiceStatus from './ServiceStatus';\nimport { useParams } from 'react-router';\nimport useDataStoreServices from '../../../../core/hooks/useDataStoreServices';\nimport LazyLoader from '../../../LazyLoader';\nimport DeploymentsItem from '../../../../types/DeploymentsItem';\nimport AppEmpty from '../../../AppEmpty';\nimport Helpers from '../../../../services/Helpers';\nimport { Dropdown } from 'antd';\nimport { Button } from 'antd';\nimport CcxContextualMenuIcon from '../../../ccx/icons/CcxContextualMenuIcon';\nimport useDataStoreJobs from '../../../../core/hooks/useDataStoreJobs';\nimport Job, { STATUS_RUNNING } from '../../../../types/Job';\nimport DotLabelStatus from '../../../ccx/common/DotLabelStatus';\nimport { Tooltip } from 'antd';\nimport SmallContainer from '../../../ccx/common/SmallContainer';\nimport PromoteReplicaButton from './PromoteReplicaButton';\nimport ServiceResources from './ServiceResources';\nimport ExtendNodeStorageModal from './DataStoreExtendStorageModal';\nimport ScaleNodeModal from './DataStoreScaleNodeModal';\nimport { getNonErroredJobs, sortNodesByRole } from '../../../../core/helpers';\nimport { useAppDispatch } from '../../../../redux/hooks';\nimport DataStoreOverviewAccessToServices from '../overview/DataStoreOverviewAccessToServices';\nimport RepairNodeButton from './RepairNodeButton';\nimport ConnectionAssistant from './ConnectionAssistant';\nimport DataStoreNodeConfiguration from './DataStoreNodeConfiguration';\nimport { getCurrentDataStore } from '../../../../slices/datastore.slice';\nimport useReplicaLag from '../../../../core/hooks/useReplicaLag';\nimport RebootNodeButton from './RebootNodeButton';\nimport { CAN_MODIFY_DATASTORE } from '../../../../core/PermissionRoles';\nimport Can from '../../../../core/providers/Can';\n\ninterface UrlProps {\n dataStoreUuid?: string;\n projectUuid: string;\n}\n\ninterface Props extends CcxComponentProps {\n dataStore?: DeploymentsItem;\n setDbCount: Function;\n switchTab: Function;\n}\n\ninterface ActionMenuProps {\n service: Service;\n onClick: (e: any) => void;\n showPromote: boolean;\n showRepair: boolean | undefined;\n disabled: boolean;\n}\n\nfunction ActionMenu({\n service,\n onClick,\n showPromote,\n showRepair,\n disabled,\n}: ActionMenuProps) {\n return (\n \n {showPromote && (\n \n \n \n )}\n {showRepair && (\n \n \n \n )}\n {!showRepair && (\n \n \n \n )}{' '}\n \n );\n}\n\nfunction DataStoreServices({\n switchTab,\n dataStore,\n setDbCount,\n testId = 'DataStoreServices',\n}: Props): ReactElement {\n const { dataStoreUuid, projectUuid } = useParams();\n const currentPath = `/projects/${projectUuid}/data-stores/${dataStoreUuid}/services`;\n const dispatch = useAppDispatch();\n const [isScalingModalVisible, setIsScalingModalVisible] =\n useState(false);\n const { services, refresh, loading, updating } = useDataStoreServices({\n dataStoreUuid,\n });\n const [isNodesAvailable, setIsNodesAvailable] = useState(false);\n\n const { jobs, refresh: refreshJobs } = useDataStoreJobs({\n dataStoreUuid,\n });\n const { replicaLag, refresh: refreshReplicaLag } = useReplicaLag({\n dataStoreUuid,\n });\n const [intervalId, setIntervalId] = useState([]);\n\n const [isButtonDisabled, setIsButtonDisabled] = useState(false);\n const [dbRows, setDbRows] = useState([]);\n const [isLoading, setIsLoading] = useState(false);\n\n const dbColumns = [\n { title: 'Node information', span: 4 },\n { title: 'Role / Permissions', span: 5 },\n { title: 'Resources', span: 13 },\n ];\n\n const lbColumns = [\n { title: 'Node information', span: 5 },\n { title: 'Status', span: 3 },\n { title: 'Connection information', span: 15 },\n ];\n\n const startStoreInterval = () => {\n const id = setInterval(async () => {\n if (dataStoreUuid) {\n dispatch(getCurrentDataStore({ dataStoreUuid }));\n }\n }, 10000);\n\n setIntervalId((prevIds: any) => [...prevIds, id]);\n };\n\n const clearStoreInterval = () => {\n intervalId.forEach((id: any) => clearInterval(id));\n setIntervalId([]);\n };\n\n useEffect(() => {\n return () => {\n clearStoreInterval();\n };\n }, []);\n\n useEffect(() => {\n const hasRunningJob = jobs?.some(\n (job: Job) => job.status === STATUS_RUNNING\n );\n\n if (!hasRunningJob) {\n clearStoreInterval();\n }\n }, [jobs]);\n\n useEffect(() => {\n if (window.location.pathname !== currentPath) {\n clearStoreInterval();\n }\n }, [window.location.pathname]);\n\n useEffect(() => {\n const AUTO_REFRESH_INTERVAL = 20000;\n const interval = setInterval(async () => {\n refresh && (await refresh());\n }, AUTO_REFRESH_INTERVAL);\n\n return () => clearInterval(interval);\n }, []);\n\n useEffect(() => {\n setDbCount && setDbCount(dbRows.length);\n }, [dbRows]);\n\n useEffect(() => {\n if (dataStore) {\n refreshReplicaLag();\n }\n }, [dataStore]);\n\n useEffect(() => {\n if (services && dataStore) {\n const sortedDbServices = sortNodesByRole(services.dbServices);\n const tempDBRows = sortedDbServices?.map((s: Service) => {\n function handleMenuOptionClick(e: any) {\n if (e.key === 'settings') {\n }\n }\n\n const showPromote =\n s.isRoleReplica() &&\n !s.isStatusError() &&\n !s.isStatusWarning();\n\n const showRepair =\n !(\n dataStore?.isMSSQL() &&\n dataStore.clusterType.toLowerCase() === 'mssql_single'\n ) &&\n dataStore?.clusterStatus?.isStatusStartedOrDegraded() &&\n (s.isStatusError() ||\n s.getStatus() === Service.CMON_STATUS_UNKNOWN);\n\n const menuDisabled =\n (!(showPromote || showRepair) &&\n dataStore?.isSafespring()) ||\n pendingJobs?.length > 0 ||\n !dataStore?.isOperable();\n\n return (\n dataStore && {\n borderAlert: s.isStatusError(),\n statusOverlayText: s.getStatus(),\n columns: [\n {\n content: (\n 0\n ? replicaLag[s.getHostUuid()]\n .replicaLag\n : undefined\n }\n />\n ),\n span: 4,\n },\n {\n content: (\n
\n {`${Helpers.capitalizeFirstLetter(\n s.getRoleName()\n )} / ${Helpers.capitalizeFirstLetter(\n s.getPermission()\n )}`}\n
\n ),\n span: 5,\n },\n {\n content: (\n \n ),\n span: 13,\n },\n {\n align: 'center',\n content: (\n \n \n 0 ||\n !dataStore?.isOperable()\n }\n service={s}\n onClick={\n handleMenuOptionClick\n }\n showPromote={showPromote}\n showRepair={showRepair}\n />\n }\n placement=\"bottomRight\"\n trigger={['click']}\n disabled={menuDisabled}\n >\n \n }\n />\n \n \n ),\n span: 2,\n },\n ],\n disabled: s.isStarting(),\n }\n );\n });\n\n if (jobs) {\n const runningJobs = jobs?.filter(\n (job: Job) => job.isStatusRunning() && job.isAddNode()\n );\n\n const statusComponent = (\n \n \n \n );\n\n const runningRows = runningJobs?.map((job: Job) => {\n return (\n dataStore && {\n borderAlert: false,\n statusOverlayText: '',\n columns: [\n {\n content: (\n \n ),\n span: 4,\n },\n {\n content: (\n \n ),\n span: 5,\n },\n {\n content: ,\n span: 13,\n },\n {\n align: 'center',\n content: (\n \n \n }\n />\n \n ),\n span: 2,\n },\n ],\n disabled: true,\n }\n );\n });\n setDbRows([...runningRows, ...tempDBRows]);\n } else {\n setDbRows(tempDBRows);\n }\n\n setIsNodesAvailable(true);\n }\n }, [services, dataStore, updating, jobs, replicaLag]);\n\n const pendingJobs = getNonErroredJobs(jobs);\n\n return (\n
\n
\n {pendingJobs?.length > 0 && (\n \n Jobs are in progress. Please wait for it to\n finish before making any changes. For status\n check{' '}\n switchTab('eventViewer')}\n >\n Event Viewer\n \n \n }\n showIcon\n type=\"info\"\n />\n )}\n\n {dataStore?.replica_url ||\n dataStore?.primary_url ? undefined : (\n \n )}\n\n {dataStore && (\n \n )}\n {dataStore?.hasStorage() && (\n \n )}\n\n {(dataStore?.replica_url || dataStore?.primary_url) && (\n \n )}\n\n \n \n

Nodes

\n \n \n \n \n \n\n {loading && !isNodesAvailable && }\n\n
\n {isNodesAvailable && dbRows?.length > 0 ? (\n \n ) : (\n !loading && (\n \n )\n )}\n
\n
\n
\n );\n}\n\nexport default DataStoreServices;\n","export type PrometheusLoadAvgStatsBackendApiProps = {\n created: number;\n loadavg1: number;\n loadavg5: number;\n loadavg15: number;\n};\n\nexport default class PrometheusLoadAvgStats {\n readonly created: number;\n readonly loadAvg1: number;\n readonly loadAvg5: number;\n readonly loadAvg15: number;\n\n constructor(props: PrometheusLoadAvgStatsBackendApiProps) {\n this.created = props.created;\n this.loadAvg1 = props.loadavg1;\n this.loadAvg5 = props.loadavg5;\n this.loadAvg15 = props.loadavg15;\n }\n}\n","export type PrometheusCpuUsageStatsBackendApiProps = {\n created: number;\n idle: number;\n user: number;\n system: number;\n iowait: number;\n softirq: number;\n irq: number;\n steal: number;\n nice: number;\n};\n\nexport default class PrometheusCpuUsageStats {\n readonly created: number;\n readonly idle: number;\n readonly user: number;\n readonly system: number;\n readonly ioWait: number;\n readonly softIrq: number;\n readonly irq: number;\n readonly steal: number;\n readonly nice: number;\n\n constructor(props: PrometheusCpuUsageStatsBackendApiProps) {\n this.created = props.created;\n this.idle = props.idle;\n this.user = props.user;\n this.system = props.system;\n this.ioWait = props.iowait;\n this.softIrq = props.softirq;\n this.irq = props.irq;\n this.steal = props.steal;\n this.nice = props.nice;\n }\n}\n","export type PrometheusRamUsageStatsBackendApiProps = {\n created: number;\n total: number;\n available: number;\n free: number;\n used: number;\n};\n\nexport default class PrometheusRamUsageStats {\n readonly created: number;\n readonly total: number;\n readonly available: number;\n readonly free: number;\n readonly used: number;\n\n constructor(props: PrometheusRamUsageStatsBackendApiProps) {\n this.created = props.created;\n this.total = props.total;\n this.available = props.available;\n this.free = props.free;\n this.used = props.used;\n }\n}\n","export type PrometheusNetworkUsageStatsBackendApiProps = {\n created: number;\n transmit_bytes: number;\n receive_bytes: number;\n};\n\nexport default class PrometheusNetworkUsageStats {\n readonly created: number;\n readonly transmit: number;\n readonly receive: number;\n\n constructor(props: PrometheusNetworkUsageStatsBackendApiProps) {\n this.created = props.created;\n this.transmit = props.transmit_bytes;\n this.receive = props.receive_bytes;\n }\n}\n","export type PrometheusDiskSpaceUsageStatsBackendApiProps = {\n created: number;\n used: number;\n available: number;\n};\n\nexport default class PrometheusDiskSpaceUsageStats {\n readonly created: number;\n readonly used: number;\n readonly available: number;\n\n constructor(props: PrometheusDiskSpaceUsageStatsBackendApiProps) {\n this.created = props.created;\n this.used = props.used;\n this.available = props.available;\n }\n}\n","export type PrometheusDiskIOUtilStatsBackendApiProps = {\n created: number;\n io_time: number;\n};\n\nexport default class PrometheusDiskIOUtilStats {\n readonly created: number;\n readonly ioTime: number;\n\n constructor(props: PrometheusDiskIOUtilStatsBackendApiProps) {\n this.created = props.created;\n this.ioTime = props.io_time;\n }\n}\n","export type PrometheusDiskIopsStatsBackendApiProps = {\n created: number;\n reads: number;\n writes: number;\n};\n\nexport default class PrometheusDiskIopsStats {\n readonly created: number;\n readonly reads: number;\n readonly writes: number;\n\n constructor(props: PrometheusDiskIopsStatsBackendApiProps) {\n this.created = props.created;\n this.reads = props.reads;\n this.writes = props.writes;\n }\n}\n","export type PrometheusDiskThroughputStatsBackendApiProps = {\n created: number;\n read_bytes: number;\n written_bytes: number;\n};\n\nexport default class PrometheusDiskThroughputStats {\n readonly created: number;\n readonly readBytes: number;\n readonly writtenBytes: number;\n\n constructor(props: PrometheusDiskThroughputStatsBackendApiProps) {\n this.created = props.created;\n this.readBytes = props.read_bytes;\n this.writtenBytes = props.written_bytes;\n }\n}\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusLoadAvgStats from '../../../types/PrometheusLoadAvgStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusLoadAvgStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusLoadAvgChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusLoadAvgChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: PrometheusLoadAvgStats) => {\n return [\n {\n yValue: stat.loadAvg15,\n series: 'Load Avg 15m',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.loadAvg5,\n series: 'Load Avg 5m',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.loadAvg1,\n series: 'Load Avg 1m',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'loadAvg1',\n label: 'Load Avg 1m',\n },\n {\n value: 'loadAvg5',\n label: 'Load Avg 5m',\n },\n {\n value: 'loadAvg15',\n label: 'Load Avg 15m',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Load average',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusLoadAvgChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport PrometheusCpuUsageStats from '../../../types/PrometheusCpuUsageStats';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusCpuUsageStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusCpuUsageChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusCpuUsageChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: `${(avg[s.value] * 100).toFixed(2)}%`,\n min: `${(min[s.value] * 100).toFixed(2)}%`,\n max: `${(max[s.value] * 100).toFixed(2)}%`,\n sum: `${(sum[s.value] * 100).toFixed(2)}%`,\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: PrometheusCpuUsageStats) => {\n return [\n {\n yValue: stat.idle,\n series: 'Idle',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.user,\n series: 'User',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.system,\n series: 'System',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n\n {\n yValue: stat.ioWait,\n series: 'IO Wait',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.softIrq,\n series: 'Soft IRQ',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.irq,\n series: 'IRQ',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n\n {\n yValue: stat.steal,\n series: 'Steal',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n\n {\n yValue: stat.nice,\n series: 'Nice',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'ioWait',\n label: 'IO Wait',\n },\n {\n value: 'irq',\n label: 'IRQ',\n },\n {\n value: 'softIrq',\n label: 'Soft IRQ',\n },\n {\n value: 'steal',\n label: 'Steal',\n },\n {\n value: 'system',\n label: 'System',\n },\n {\n value: 'user',\n label: 'User',\n },\n {\n value: 'idle',\n label: 'Idle',\n },\n {\n value: 'nice',\n label: 'Nice',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'CPU usage',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return `${text}%`;\n },\n },\n },\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: `${d?.data?.yValue.toFixed(0)}%`,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusCpuUsageChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport PrometheusDiskIopsStats from '../../../types/PrometheusDiskIopsStats';\nimport AppChart from '../../AppChart';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusDiskIopsStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusDiskIopsChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusDiskIopsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(),\n min: min[s.value],\n max: max[s.value],\n sum: sum[s.value],\n };\n });\n\n setSummary(dataSummary);\n };\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: PrometheusDiskIopsStats) => {\n return [\n {\n yValue: stat.reads,\n series: `Read/s`,\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.writes,\n series: `Write/s`,\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'reads',\n label: 'Read/s',\n },\n {\n value: 'writes',\n label: 'Write/s',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Disk IOPS',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return `${text}`;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: `${d?.data?.yValue.toFixed(0)}`,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusDiskIopsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport PrometheusDiskIOUtilStats from '../../../types/PrometheusDiskIOUtilStats';\nimport AppChart from '../../AppChart';\nimport numbro from 'numbro';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusDiskIOUtilStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusDiskIOUtilizationChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusDiskIOUtilizationChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusDiskIOUtilStats) => {\n return [\n {\n yValue: parseFloat((stat.ioTime * 1000).toFixed(1)),\n series: 'io_time',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n\n setChartData(formattedData.flat());\n const summarySeries = [\n {\n value: 'ioTime',\n label: 'io_time',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const formatMilliseconds = (value: number) => {\n return `${value.toFixed(1)}ms`;\n };\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Disk IO utilization',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (value: string) => {\n const parsedValue = parseFloat(value);\n if (!isNaN(parsedValue)) {\n return formatMilliseconds(parsedValue);\n }\n return value;\n },\n },\n },\n\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: formatMilliseconds(parseFloat(d?.data?.yValue)),\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusDiskIOUtilizationChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport prettyBytes from 'pretty-bytes';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport numbro from 'numbro';\nimport PrometheusDiskSpaceUsageStats from '../../../types/PrometheusDiskSpaceUsageStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusDiskSpaceUsageStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusDiskSpaceUsageChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusDiskSpaceUsageChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusDiskSpaceUsageStats) => {\n return [\n {\n yValue: stat.available,\n series: `Available`,\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.used,\n series: `Used`,\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Disk space usage',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return numbro(parseInt(text, 10)).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 0,\n });\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: numbro(\n parseInt(d?.data?.yValue.toFixed(2), 10)\n ).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 0,\n }),\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusDiskSpaceUsageChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport PrometheusDiskThroughputStats from '../../../types/PrometheusDiskThroughputStats';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport prettyBytes from 'pretty-bytes';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusDiskThroughputStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusDiskThroughputChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusDiskThroughputChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: `${prettyBytes(avg[s.value])}/s`,\n min: `${prettyBytes(min[s.value])}/s`,\n max: `${prettyBytes(max[s.value])}/s`,\n sum: `${prettyBytes(sum[s.value])}/s`,\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusDiskThroughputStats) => {\n return [\n {\n yValue: stat.readBytes,\n series: `Bytes read/s`,\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.writtenBytes,\n series: `Bytes writen/s`,\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'readBytes',\n label: 'Bytes read/s',\n },\n {\n value: 'writtenBytes',\n label: 'Bytes writen/s',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Disk throughput',\n },\n description: {\n visible: true,\n text: '',\n },\n padding: 'auto',\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return `${prettyBytes(parseInt(text, 10), {\n maximumFractionDigits: 0,\n })}/s`;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: `${prettyBytes(parseInt(d?.data?.yValue, 10), {\n maximumFractionDigits: 0,\n })}/s`,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusDiskThroughputChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport prettyBytes from 'pretty-bytes';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusNetworkUsageStats from '../../../types/PrometheusNetworkUsageStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusNetworkUsageStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusNetworkUsageChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusNetworkUsageChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: `${prettyBytes(avg[s.value])}/s`,\n min: `${prettyBytes(min[s.value])}/s`,\n max: `${prettyBytes(max[s.value])}/s`,\n sum: `${prettyBytes(sum[s.value])}/s`,\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusNetworkUsageStats) => {\n return [\n {\n yValue: stat.receive,\n series: `Received`,\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.transmit,\n series: `Sent`,\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'receive',\n label: 'Received',\n },\n {\n value: 'transmit',\n label: 'Sent',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Network usage',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return `${prettyBytes(parseInt(text, 10), {\n maximumFractionDigits: 0,\n })}/s`;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: `${prettyBytes(\n parseInt(d?.data?.yValue.toFixed(3), 10),\n {\n maximumFractionDigits: 0,\n }\n )}/s`,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusNetworkUsageChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport prettyBytes from 'pretty-bytes';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport numbro from 'numbro';\nimport PrometheusRamUsageStats from '../../../types/PrometheusRamUsageStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusRamUsageStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusRamUsageChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusRamUsageChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: PrometheusRamUsageStats) => {\n return [\n {\n // from CC: row.ramused = row.ramtotal - row.ramfree - row.ramcached - row.rambuffers;\n yValue: stat.used,\n series: 'Used',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n {\n yValue: stat.available,\n series: 'Available',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n // {\n // yValue: stat.ramBuffers,\n // series: 'Buffers',\n // xValue: new FriendlyTimestamp(stat.created).getDate(),\n // },\n // {\n // yValue: stat.ramCached,\n // series: 'Cached',\n // xValue: new FriendlyTimestamp(stat.created).getDate(),\n // },\n ];\n });\n\n setChartData(formattedData.flat());\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'RAM usage',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return numbro(parseInt(text, 10)).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 0,\n });\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: numbro(\n parseInt(d?.data?.yValue.toFixed(2), 10)\n ).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 0,\n }),\n }));\n };\n\n const getSummary = () => {\n if (!data || data.length === 0) return [];\n const sum = data.reduce(\n (accumulator: number, d: any) =>\n accumulator + d.data.yValue,\n 0\n );\n const average = sum / data.length;\n\n return [\n {\n label: 'Total',\n value: numbro(sum).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 0,\n }),\n },\n ];\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n summary: getSummary(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusRamUsageChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport styles from './HostDashboard.module.less';\nimport { Col, Row } from 'antd';\nimport usePrometheusLoadAverageStats from '../../../core/hooks/usePrometheusLoadAverageStats';\nimport usePrometheusCpuUsageStats from '../../../core/hooks/usePrometheusCpuUsageStats';\nimport usePrometheusRamUsageStats from '../../../core/hooks/usePrometheusRamUsageStats';\nimport usePrometheusNetworkUsageStats from '../../../core/hooks/usePrometheusNetworkUsageStats';\nimport usePrometheusDiskSpaceUsageStats from '../../../core/hooks/usePrometheusDiskSpaceUsageStats';\nimport usePrometheusDiskIOUtilStats from '../../../core/hooks/usePrometheusDiskIOUtilStats';\nimport usePrometheusDiskIopsStats from '../../../core/hooks/usePrometheusDiskIopsStats';\nimport usePrometheusDiskThroughputStats from '../../../core/hooks/usePrometheusDiskThroughputStats';\nimport PrometheusLoadAvgChart from '../../ccx/charts/PrometheusLoadAvgChart';\nimport PrometheusCpuUsageChart from '../../ccx/charts/PrometheusCpuUsageChart';\nimport PrometheusDiskIopsChart from '../../ccx/charts/PrometheusDiskIopsChart';\nimport PrometheusDiskIOUtilizationChart from '../../ccx/charts/PrometheusDiskIOUtilizationChart';\nimport PrometheusDiskSpaceUsageChart from '../../ccx/charts/PrometheusDiskSpaceUsageChart';\nimport PrometheusDiskThroughputChart from '../../ccx/charts/PrometheusDiskThroughputChart';\nimport PrometheusNetworkUsageChart from '../../ccx/charts/PrometheusNetworkUsageChart';\nimport PrometheusRamUsageChart from '../../ccx/charts/PrometheusRamUsageChart';\n\ntype HostDashboardProps = {\n uuid: string;\n host_uuid: string;\n port: number;\n from?: string;\n to?: string;\n interval: number;\n hidden?: boolean;\n displaySummary?: boolean;\n onLoading?: Function;\n};\n\nfunction HostDashboard({\n uuid,\n host_uuid,\n port,\n from,\n to,\n interval,\n hidden,\n displaySummary,\n onLoading,\n}: HostDashboardProps): ReactElement {\n const {\n stats: loadAvgStats,\n refresh: loadAvgStatsRefresh,\n loading: loadAvgStatsLoading,\n } = usePrometheusLoadAverageStats(uuid, host_uuid, from, to);\n const {\n stats: cpuUsageStats,\n refresh: cpuUsageStatsRefresh,\n loading: cpuUsageStatsLoading,\n } = usePrometheusCpuUsageStats(uuid, host_uuid, from, to);\n const {\n stats: ramUsageStats,\n refresh: ramUsageStatsRefresh,\n loading: ramUsageStatsLoading,\n } = usePrometheusRamUsageStats(uuid, host_uuid, from, to);\n const {\n stats: networkUsageStats,\n refresh: networkUsageStatsRefresh,\n loading: networkUsageStatsLoading,\n } = usePrometheusNetworkUsageStats(uuid, host_uuid, from, to);\n const {\n stats: diskSpaceUsageStats,\n refresh: diskSpaceUsageStatsRefresh,\n loading: diskSpaceUsageStatsLoading,\n } = usePrometheusDiskSpaceUsageStats(uuid, host_uuid, from, to);\n const {\n stats: diskIOUtilStats,\n refresh: diskIOUtilStatsRefresh,\n loading: diskIOUtilStatsLoading,\n } = usePrometheusDiskIOUtilStats(uuid, host_uuid, from, to);\n const {\n stats: diskIopsStats,\n refresh: diskIopsStatsRefresh,\n loading: diskIopsStatsLoading,\n } = usePrometheusDiskIopsStats(uuid, host_uuid, from, to);\n const {\n stats: diskThroughputStats,\n refresh: diskThroughputStatsRefresh,\n loading: diskThroughputStatsLoading,\n } = usePrometheusDiskThroughputStats(uuid, host_uuid, from, to);\n\n const [loadAvgInterval, setLoadAvgInterval] = useState(\n undefined\n );\n const [cpuUsageInterval, setCpuUsageInterval] = useState<\n number | undefined\n >(undefined);\n const [ramUsageInterval, setRamUsageInterval] = useState<\n number | undefined\n >(undefined);\n const [networkUsageInterval, setNetworkUsageInterval] = useState<\n number | undefined\n >(undefined);\n const [diskSpaceUsageInterval, setDiskSpaceUsageInterval] = useState<\n number | undefined\n >(undefined);\n const [diskIOUtilInterval, setDiskIOUtilInterval] = useState<\n number | undefined\n >(undefined);\n const [diskIopsInterval, setDiskIopsInterval] = useState<\n number | undefined\n >(undefined);\n const [diskThroughputInterval, setDiskThroughputInterval] = useState<\n number | undefined\n >(undefined);\n const [refreshInterval, setRefreshInterval] = useState(interval);\n\n useEffect(() => {\n let interval: any;\n if (loadAvgStats && refreshInterval > 0) {\n interval = setInterval(() => {\n loadAvgStatsRefresh();\n }, refreshInterval);\n setLoadAvgInterval(interval);\n }\n return () => clearInterval(interval);\n }, [loadAvgStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (cpuUsageStats && refreshInterval > 0) {\n interval = setInterval(() => {\n cpuUsageStatsRefresh();\n }, refreshInterval);\n setLoadAvgInterval(interval);\n }\n return () => clearInterval(interval);\n }, [cpuUsageStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (ramUsageStats && refreshInterval > 0) {\n interval = setInterval(() => {\n ramUsageStatsRefresh();\n }, refreshInterval);\n setLoadAvgInterval(interval);\n }\n return () => clearInterval(interval);\n }, [ramUsageStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (networkUsageStats && refreshInterval > 0) {\n interval = setInterval(() => {\n networkUsageStatsRefresh();\n }, refreshInterval);\n setLoadAvgInterval(interval);\n }\n return () => clearInterval(interval);\n }, [networkUsageStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (diskSpaceUsageStats && refreshInterval > 0) {\n interval = setInterval(() => {\n diskSpaceUsageStatsRefresh();\n }, refreshInterval);\n setLoadAvgInterval(interval);\n }\n return () => clearInterval(interval);\n }, [diskSpaceUsageStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (diskIOUtilStats && refreshInterval > 0) {\n interval = setInterval(() => {\n diskIOUtilStatsRefresh();\n }, refreshInterval);\n setLoadAvgInterval(interval);\n }\n return () => clearInterval(interval);\n }, [diskIOUtilStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (diskIopsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n diskIopsStatsRefresh();\n }, refreshInterval);\n setLoadAvgInterval(interval);\n }\n return () => clearInterval(interval);\n }, [diskIopsStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (diskThroughputStats && refreshInterval > 0) {\n interval = setInterval(() => {\n diskThroughputStatsRefresh();\n }, refreshInterval);\n setLoadAvgInterval(interval);\n }\n return () => clearInterval(interval);\n }, [diskThroughputStats, refreshInterval]);\n\n useEffect(() => {\n if (interval === 0) {\n // when interval is 0, we must pause the refresh (clear existing intervals)\n clearInterval(loadAvgInterval);\n clearInterval(cpuUsageInterval);\n clearInterval(ramUsageInterval);\n clearInterval(networkUsageInterval);\n clearInterval(diskSpaceUsageInterval);\n clearInterval(diskIOUtilInterval);\n clearInterval(diskIopsInterval);\n clearInterval(diskThroughputInterval);\n setLoadAvgInterval(0);\n setCpuUsageInterval(0);\n setRamUsageInterval(0);\n setNetworkUsageInterval(0);\n setDiskSpaceUsageInterval(0);\n setDiskIOUtilInterval(0);\n setDiskIopsInterval(0);\n setDiskThroughputInterval(0);\n }\n setRefreshInterval(interval);\n }, [interval]);\n\n useEffect(() => {\n if (hidden) {\n // clear interval to stop updating data if the tab is not active (charts are not visible)\n clearInterval(loadAvgInterval);\n clearInterval(cpuUsageInterval);\n clearInterval(ramUsageInterval);\n clearInterval(networkUsageInterval);\n clearInterval(diskSpaceUsageInterval);\n clearInterval(diskIOUtilInterval);\n clearInterval(diskIopsInterval);\n clearInterval(diskThroughputInterval);\n setLoadAvgInterval(0);\n setCpuUsageInterval(0);\n setRamUsageInterval(0);\n setNetworkUsageInterval(0);\n setDiskSpaceUsageInterval(0);\n setDiskIOUtilInterval(0);\n setDiskIopsInterval(0);\n setDiskThroughputInterval(0);\n } else if (\n loadAvgInterval === 0 ||\n cpuUsageInterval === 0 ||\n ramUsageInterval === 0 ||\n networkUsageInterval === 0 ||\n diskSpaceUsageInterval === 0 ||\n diskIOUtilInterval === 0 ||\n diskIopsInterval === 0 ||\n diskThroughputInterval === 0\n ) {\n // force refresh if the interval is 0, otherwise, the interval will refresh data soon\n // interval is undefined on the first load\n // interval will be 0 when paused or tab is hidden\n loadAvgStatsRefresh();\n cpuUsageStatsRefresh();\n ramUsageStatsRefresh();\n networkUsageStatsRefresh();\n diskSpaceUsageStatsRefresh();\n diskIOUtilStatsRefresh();\n diskIopsStatsRefresh();\n diskThroughputStatsRefresh();\n }\n }, [hidden]);\n\n useEffect(() => {\n if (\n loadAvgStatsLoading ||\n cpuUsageStatsLoading ||\n ramUsageStatsLoading ||\n networkUsageStatsLoading ||\n diskSpaceUsageStatsLoading ||\n diskIOUtilStatsLoading ||\n diskIopsStatsLoading ||\n diskThroughputStatsLoading\n ) {\n onLoading && onLoading(true);\n } else {\n onLoading && onLoading(false);\n }\n }, [\n loadAvgStatsLoading,\n cpuUsageStatsLoading,\n ramUsageStatsLoading,\n networkUsageStatsLoading,\n diskSpaceUsageStatsLoading,\n diskIOUtilStatsLoading,\n diskIopsStatsLoading,\n diskThroughputStatsLoading,\n ]);\n\n return (\n
\n {/* CPU */}\n \n \n \n \n \n \n \n\n {/* RAM */}\n \n \n \n\n {/* NETWORK */}\n \n \n \n\n {/* DISK */}\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n
\n );\n}\n\nexport default HostDashboard;\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusLoadAvgStats from '../../types/PrometheusLoadAvgStats';\n\nexport default function usePrometheusLoadAverageStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState(\n undefined\n );\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details = await PrometheusStatService.getLoadAverage(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map((d: any) => new PrometheusLoadAvgStats(d))\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setLoading(false);\n setUpdating(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusCpuUsageStats from '../../types/PrometheusCpuUsageStats';\n\nexport default function usePrometheusCpuUsageStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState(\n undefined\n );\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details = await PrometheusStatService.getCpuUsage(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map((d: any) => new PrometheusCpuUsageStats(d))\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusRamUsageStats from '../../types/PrometheusRamUsageStats';\n\nexport default function usePrometheusRamUsageStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState(\n undefined\n );\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details = await PrometheusStatService.getRamUsage(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map((d: any) => new PrometheusRamUsageStats(d))\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusNetworkUsageStats from '../../types/PrometheusNetworkUsageStats';\n\nexport default function usePrometheusNetworkUsageStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusNetworkUsageStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details = await PrometheusStatService.getNetworkUsage(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map((d: any) => new PrometheusNetworkUsageStats(d))\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusDiskSpaceUsageStats from '../../types/PrometheusDiskSpaceUsageStats';\n\nexport default function usePrometheusDiskSpaceUsageStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusDiskSpaceUsageStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details = await PrometheusStatService.getDiskSpaceUsage(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusDiskSpaceUsageStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setLoading(false);\n setUpdating(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusDiskIOUtilStats from '../../types/PrometheusDiskIOUtilStats';\n\nexport default function usePrometheusDiskIOUtilStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState(\n undefined\n );\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details = await PrometheusStatService.getDiskIOUtil(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map((d: any) => new PrometheusDiskIOUtilStats(d))\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusDiskIopsStats from '../../types/PrometheusDiskIopsStats';\n\nexport default function usePrometheusDiskIopsStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState(\n undefined\n );\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details = await PrometheusStatService.getDiskIops(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map((d: any) => new PrometheusDiskIopsStats(d))\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusDiskThroughputStats from '../../types/PrometheusDiskThroughputStats';\n\nexport default function usePrometheusDiskThroughputStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusDiskThroughputStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details = await PrometheusStatService.getDiskThroughput(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusDiskThroughputStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setLoading(false);\n setUpdating(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","export type PrometheusMySqlQueriesStatsBackendApiProps = {\n created: number;\n queries: number;\n instance: string;\n};\n\nexport default class PrometheusMySqlQueriesStats {\n readonly created: number;\n readonly queries: number;\n readonly instance: string;\n\n constructor(props: PrometheusMySqlQueriesStatsBackendApiProps) {\n this.created = props.created;\n this.queries = props.queries;\n this.instance = props.instance;\n }\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusMySqlQueriesStats from '../../types/PrometheusMySqlQueriesStats';\n\nexport default function usePrometheusMySqlQueriesStats(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusMySqlQueriesStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid) {\n try {\n let details;\n let tempStats = [];\n details = await PrometheusStatService.getMySqlQueries(\n uuid,\n host_uuid,\n from,\n to\n );\n tempStats = details.map(\n (d: any) => new PrometheusMySqlQueriesStats(d)\n );\n setStats(tempStats);\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","export type PrometheusMySqlAbortedConnectionsStatsBackendApiProps = {\n created: number;\n instance: string;\n aborted_connects: number;\n aborted_clients: number;\n access_denied_errors: number;\n};\n\nexport default class PrometheusMySqlAbortedConnectionsStats {\n readonly created: number;\n readonly instance: string;\n readonly abortedConnects: number;\n readonly abortedClients: number;\n readonly accessDeniedErrors: number;\n\n constructor(props: PrometheusMySqlAbortedConnectionsStatsBackendApiProps) {\n this.created = props.created;\n this.instance = props.instance;\n this.abortedConnects = props.aborted_connects;\n this.abortedClients = props.aborted_clients;\n this.accessDeniedErrors = props.access_denied_errors;\n }\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusMySqlAbortedConnectionsStats from '../../types/PrometheusMySqlAbortedConnectionsStats';\n\nexport default function usePrometheusMySqlAbortedConnectionsStats(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusMySqlAbortedConnectionsStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid) {\n try {\n const details =\n await PrometheusStatService.getMySqlAbortedConnections(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusMySqlAbortedConnectionsStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","export type PrometheusMySqlDbConnectionsStatsBackendApiProps = {\n created: number;\n instance: string;\n thread_connected: number;\n max_used_connections: number;\n max_connections: number;\n aborted_clients: number;\n aborted_connects: number;\n connections: number;\n};\n\nexport default class PrometheusMySqlDbConnectionsStats {\n readonly created: number;\n readonly instance: string;\n readonly threadConnected: number;\n readonly maxUsedConnections: number;\n readonly maxConnections: number;\n readonly abortedClients: number;\n readonly abortedConnects: number;\n readonly connections: number;\n\n constructor(props: PrometheusMySqlDbConnectionsStatsBackendApiProps) {\n this.created = props.created;\n this.instance = props.instance;\n this.threadConnected = props.thread_connected;\n this.maxUsedConnections = props.max_used_connections;\n this.maxConnections = props.max_connections;\n this.abortedClients = props.aborted_clients;\n this.abortedConnects = props.aborted_connects;\n this.connections = props.connections;\n }\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusMySqlDbConnectionsStats from '../../types/PrometheusMySqlDbConnectionsStats';\n\nexport default function usePrometheusMySqlDbConnectionsStats(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusMySqlDbConnectionsStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid) {\n try {\n let details = await PrometheusStatService.getMySqlDbConnections(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusMySqlDbConnectionsStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","export type PrometheusMySqlHandlersStatsBackendApiProps = {\n created: number;\n handlers_read_rnd: number;\n handlers_read_rnd_next: number;\n handlers_read_next: number;\n handlers_read_key: number;\n handlers_read_first: number;\n handlers_read_last: number;\n handlers_delete: number;\n handlers_update: number;\n handlers_write: number;\n};\n\nexport default class PrometheusMySqlHandlersStats {\n readonly created: number;\n readonly handlersReadRnd: number;\n readonly handlersReadRndNext: number;\n readonly handlersReadNext: number;\n readonly handlersReadKey: number;\n readonly handlersReadFirst: number;\n readonly handlersReadLast: number;\n readonly handlersDelete: number;\n readonly handlersUpdate: number;\n readonly handlersWrite: number;\n\n constructor(props: PrometheusMySqlHandlersStatsBackendApiProps) {\n this.created = props.created;\n this.handlersReadRnd = props.handlers_read_rnd;\n this.handlersReadRndNext = props.handlers_read_rnd_next;\n this.handlersReadNext = props.handlers_read_next;\n this.handlersReadKey = props.handlers_read_key;\n this.handlersReadFirst = props.handlers_read_first;\n this.handlersReadLast = props.handlers_read_last;\n this.handlersDelete = props.handlers_delete;\n this.handlersUpdate = props.handlers_update;\n this.handlersWrite = props.handlers_write;\n }\n}\n","export type PrometheusMySqlHandlerTransactionsStatsBackendApiProps = {\n created: number;\n handlers_rollback: number;\n handlers_savepoint: number;\n handlers_commit: number;\n handlers_savepoint_rollback: number;\n handlers_prepare: number;\n};\n\nexport default class PrometheusMySqlHandlerTransactionsStats {\n readonly created: number;\n readonly handlersRollback: number;\n readonly handlersSavepoint: number;\n readonly handlersCommit: number;\n readonly handlersSavepointRollback: number;\n readonly handlersPrepare: number;\n\n constructor(props: PrometheusMySqlHandlerTransactionsStatsBackendApiProps) {\n this.created = props.created;\n this.handlersRollback = props.handlers_rollback;\n this.handlersSavepoint = props.handlers_savepoint;\n this.handlersCommit = props.handlers_commit;\n this.handlersSavepointRollback = props.handlers_savepoint_rollback;\n this.handlersPrepare = props.handlers_prepare;\n }\n}\n","export type PrometheusMySqlMemoryUtilizationStatsBackendApiProps = {\n created: number;\n innodb_mem_adaptive_hash: number;\n innodb_buffer_pool_size: number;\n query_cache_size: number;\n key_buffer_size: number;\n innodb_log_buffer_size: number;\n};\n\nexport default class PrometheusMySqlMemoryUtilizationStats {\n readonly created: number;\n readonly innodbMemAdaptiveHash: number;\n readonly innodbBufferPoolSize: number;\n readonly queryCacheSize: number;\n readonly keyBufferSize: number;\n readonly innodbLogBufferSize: number;\n\n constructor(props: PrometheusMySqlMemoryUtilizationStatsBackendApiProps) {\n this.created = props.created;\n this.innodbMemAdaptiveHash = props.innodb_mem_adaptive_hash;\n this.innodbBufferPoolSize = props.innodb_buffer_pool_size;\n this.queryCacheSize = props.query_cache_size;\n this.keyBufferSize = props.key_buffer_size;\n this.innodbLogBufferSize = props.innodb_log_buffer_size;\n }\n}\n","export type PrometheusMySqlScanOperationsStatsBackendApiProps = {\n created: number;\n select_scan: number;\n delete_scan: number;\n update_scan: number;\n};\n\nexport default class PrometheusMySqlScanOperationsStats {\n readonly created: number;\n readonly selectScan: number;\n readonly deleteScan: number;\n readonly updateScan: number;\n\n constructor(props: PrometheusMySqlScanOperationsStatsBackendApiProps) {\n this.created = props.created;\n this.selectScan = props.select_scan;\n this.deleteScan = props.delete_scan;\n this.updateScan = props.update_scan;\n }\n}\n","export type PrometheusMySqlSortingStatsBackendApiProps = {\n created: number;\n instance: string;\n sort_merge_passes: number;\n sort_scan: number;\n sort_range: number;\n sort_rows: number;\n};\n\nexport default class PrometheusMySqlSortingStats {\n readonly created: number;\n readonly instance: string;\n readonly sortMergePasses: number;\n readonly sortScan: number;\n readonly sortRange: number;\n readonly sortRows: number;\n\n constructor(props: PrometheusMySqlSortingStatsBackendApiProps) {\n this.created = props.created;\n this.instance = props.instance;\n this.sortMergePasses = props.sort_merge_passes;\n this.sortScan = props.sort_scan;\n this.sortRange = props.sort_range;\n this.sortRows = props.sort_rows;\n }\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusMySqlSortingStats from '../../types/PrometheusMySqlSortingStats';\n\nexport default function usePrometheusMySqlSortingStats(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusMySqlSortingStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid) {\n try {\n let details;\n let tempStats = [];\n details = await PrometheusStatService.getMySqlSorting(\n uuid,\n host_uuid,\n from,\n to\n );\n tempStats = details.map(\n (d: any) => new PrometheusMySqlSortingStats(d)\n );\n setStats(tempStats);\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","export type PrometheusMySqlTableLockingStatsBackendApiProps = {\n created: number;\n table_locks_immediate: number;\n table_locks_waited: number;\n};\n\nexport default class PrometheusMySqlTableLockingStats {\n readonly created: number;\n readonly tableLocksImmediate: number;\n readonly tableLocksWaited: number;\n\n constructor(props: PrometheusMySqlTableLockingStatsBackendApiProps) {\n this.created = props.created;\n this.tableLocksImmediate = props.table_locks_immediate;\n this.tableLocksWaited = props.table_locks_waited;\n }\n}\n","export type PrometheusMySqlTemporaryTablesStatsBackendApiProps = {\n created: number;\n instance: string;\n created_tmp_tables: number;\n created_tmp_disk_tables: number;\n};\n\nexport default class PrometheusMySqlTemporaryTablesStats {\n readonly created: number;\n readonly instance: string;\n readonly createdTmpTables: number;\n readonly createdTmpDiskTables: number;\n\n constructor(props: PrometheusMySqlTemporaryTablesStatsBackendApiProps) {\n this.created = props.created;\n this.instance = props.instance;\n this.createdTmpTables = props.created_tmp_tables;\n this.createdTmpDiskTables = props.created_tmp_disk_tables;\n }\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusMySqlTemporaryTablesStats from '../../types/PrometheusMySqlTemporaryTablesStats';\n\nexport default function usePrometheusMySqlTemporaryTablesStats(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusMySqlTemporaryTablesStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid) {\n try {\n let details;\n let tempStats = [];\n details = await PrometheusStatService.getMySqlTemporaryTables(\n uuid,\n host_uuid,\n from,\n to\n );\n tempStats = details.map(\n (d: any) => new PrometheusMySqlTemporaryTablesStats(d)\n );\n setStats(tempStats);\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusMySqlHandlersStats from '../../../types/PrometheusMySqlHandlersStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusMySqlHandlersStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusMySqlHandlersChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusMySqlHandlersChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusMySqlHandlersStats) => {\n return [\n {\n yValue: stat.handlersReadRnd,\n series: 'handlers_read_rnd',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.handlersReadRndNext,\n series: 'handlers_read_rnd_next',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.handlersReadNext,\n series: 'handlers_read_next',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.handlersReadKey,\n series: 'handlers_read_key',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.handlersReadFirst,\n series: 'handlers_read_first',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.handlersReadLast,\n series: 'handlers_read_last',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.handlersDelete,\n series: 'handlers_delete',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.handlersUpdate,\n series: 'handlers_update',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.handlersWrite,\n series: 'handlers_write',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'handlersReadRnd',\n label: 'handlers_read_rnd',\n },\n {\n value: 'handlersReadRndNext',\n label: 'handlers_read_rnd_next',\n },\n {\n value: 'handlersReadNext',\n label: 'handlers_read_next',\n },\n {\n value: 'handlersReadKey',\n label: 'handlers_read_key',\n },\n {\n value: 'handlersReadFirst',\n label: 'handlers_read_first',\n },\n {\n value: 'handlersReadLast',\n label: 'handlers_read_last',\n },\n {\n value: 'handlersDelete',\n label: 'handlers_delete',\n },\n {\n value: 'handlersUpdate',\n label: 'handlers_update',\n },\n {\n value: 'handlersWrite',\n label: 'handlers_write',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Handler stats',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusMySqlHandlersChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusMySqlHandlerTransactionsStats from '../../../types/PrometheusMySqlHandlerTransactionsStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusMySqlHandlerTransactionsStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusMySqlHandlerTransactionsChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusMySqlHandlerTransactionsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusMySqlHandlerTransactionsStats) => {\n return [\n {\n yValue: stat.handlersRollback,\n series: 'handlers_rollback',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.handlersSavepoint,\n series: 'handlers_savepoint',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.handlersCommit,\n series: 'handlers_commit',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.handlersSavepointRollback,\n series: 'handlers_savepoint_rollback',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.handlersPrepare,\n series: 'handlers_prepare',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'handlersRollback',\n label: 'handlers_rollback',\n },\n {\n value: 'handlersSavepoint',\n label: 'handlers_savepoint',\n },\n {\n value: 'handlersCommit',\n label: 'handlers_commit',\n },\n {\n value: 'handlersSavepointRollback',\n label: 'handlers_savepoint_rollback',\n },\n {\n value: 'handlersPrepare',\n label: 'handlers_prepare',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Handler transaction stats',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusMySqlHandlerTransactionsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusMySqlDbConnectionsStats from '../../../types/PrometheusMySqlDbConnectionsStats';\nimport Deployment from '../../../types/Deployment';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusMySqlDbConnectionsStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n hostUUIDs?: string[];\n deployment?: Deployment;\n}\n\nfunction PrometheusMySqlDbConnectionsChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusMySqlDbConnectionsChart',\n width,\n height = 250,\n hostUUIDs,\n deployment,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (\n data &&\n data.length > 0 &&\n (deployment || !(deployment && hostUUIDs))\n ) {\n const formattedData = data.map(\n (stat: PrometheusMySqlDbConnectionsStats) => {\n return [\n {\n yValue: stat.threadConnected,\n series: hostUUIDs\n ? deployment?.getHostName(stat.instance)\n : 'thread_connected',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n !hostUUIDs && {\n yValue: stat.maxUsedConnections,\n series: 'max_used_connections',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n !hostUUIDs && {\n yValue: stat.maxConnections,\n series: 'max_connections',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n !hostUUIDs && {\n yValue: stat.abortedClients,\n series: 'aborted_clients',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n !hostUUIDs && {\n yValue: stat.abortedConnects,\n series: 'aborted_connects',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n !hostUUIDs && {\n yValue: stat.connections,\n series: 'connections',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'threadConnected',\n label: 'thread_connected',\n },\n {\n value: 'maxUsedConnections',\n label: 'max_used_connections',\n },\n {\n value: 'maxConnections',\n label: 'max_connections',\n },\n {\n value: 'abortedClients',\n label: 'aborted_clients',\n },\n {\n value: 'abortedConnects',\n label: 'aborted_connects',\n },\n {\n value: 'connections',\n label: 'connections',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data, hostUUIDs, deployment]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Database connections',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusMySqlDbConnectionsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusMySqlQueriesStats from '../../../types/PrometheusMySqlQueriesStats';\nimport CloudInstance from '../../../types/CloudInstance';\nimport Deployment from '../../../types/Deployment';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusMySqlQueriesStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n hostUUIDs?: any[];\n node?: CloudInstance;\n deployment?: Deployment;\n}\n\nfunction PrometheusMySqlQueriesChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusMySqlQueriesChart',\n width,\n height = 250,\n hostUUIDs,\n node,\n deployment,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (\n data &&\n data.length > 0 &&\n (deployment || !(deployment && hostUUIDs))\n ) {\n const formattedData = data.map(\n (stat: PrometheusMySqlQueriesStats) => {\n return {\n yValue: stat?.queries,\n series: hostUUIDs\n ? deployment?.getHostName(stat.instance)\n : 'queries',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n };\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'queries',\n label: 'queries',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data, hostUUIDs, deployment]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Queries',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusMySqlQueriesChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusMySqlScanOperationsStats from '../../../types/PrometheusMySqlScanOperationsStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusMySqlScanOperationsStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusMySqlScanOperationsChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusMySqlScanOperationsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusMySqlScanOperationsStats) => {\n return [\n {\n yValue: stat.selectScan,\n series: 'select_scan',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.deleteScan,\n series: 'delete_scan',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.updateScan,\n series: 'update_scan',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'selectScan',\n label: 'select_scan',\n },\n {\n value: 'deleteScan',\n label: 'delete_scan',\n },\n {\n value: 'updateScan',\n label: 'update_scan',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Scan operations',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusMySqlScanOperationsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusMySqlTableLockingStats from '../../../types/PrometheusMySqlTableLockingStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusMySqlTableLockingStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusMySqlTableLockingChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusMySqlTableLockingChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusMySqlTableLockingStats) => {\n return [\n {\n yValue: stat.tableLocksImmediate,\n series: 'table_locks_immediate',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.tableLocksWaited,\n series: 'table_locks_waited',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'tableLocksImmediate',\n label: 'table_locks_immediate',\n },\n {\n value: 'tableLocksWaited',\n label: 'table_locks_waited',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Table locking',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusMySqlTableLockingChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusMySqlTemporaryTablesStats from '../../../types/PrometheusMySqlTemporaryTablesStats';\nimport Deployment from '../../../types/Deployment';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusMySqlTemporaryTablesStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n hostUUIDs?: string[];\n deployment?: Deployment;\n}\n\nfunction PrometheusMySqlTemporaryTablesChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusMySqlTemporaryTablesChart',\n width,\n height = 250,\n hostUUIDs,\n deployment,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (\n data &&\n data.length > 0 &&\n (deployment || !(deployment && hostUUIDs))\n ) {\n const formattedData = data.map(\n (stat: PrometheusMySqlTemporaryTablesStats) => {\n return [\n {\n yValue: stat.createdTmpTables,\n series: hostUUIDs\n ? deployment?.getHostName(stat.instance)\n : 'created_tmp_tables',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n !hostUUIDs && {\n yValue: stat.createdTmpDiskTables,\n series: 'created_tmp_disk_tables',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'createdTmpTables',\n label: 'created_tmp_tables',\n },\n {\n value: 'createdTmpDiskTables',\n label: 'created_tmp_disk_tables',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data, hostUUIDs, deployment]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Temporary tables',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusMySqlTemporaryTablesChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusMySqlSortingStats from '../../../types/PrometheusMySqlSortingStats';\nimport Deployment from '../../../types/Deployment';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusMySqlSortingStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n hostUUIDs?: string[];\n deployment?: Deployment;\n}\n\nfunction PrometheusMySqlSortingChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusMySqlSortingChart',\n width,\n height = 250,\n hostUUIDs,\n deployment,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (\n data &&\n data.length > 0 &&\n (deployment || !(deployment && hostUUIDs))\n ) {\n const formattedData = data.map(\n (stat: PrometheusMySqlSortingStats) => {\n return [\n {\n yValue: stat.sortMergePasses,\n series: hostUUIDs\n ? deployment?.getHostName(stat.instance)\n : 'sort_merge_passes',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n !hostUUIDs && {\n yValue: stat.sortScan,\n series: 'sort_scan',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n !hostUUIDs && {\n yValue: stat.sortRange,\n series: 'sort_range',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n !hostUUIDs && {\n yValue: stat.sortRows,\n series: 'sort_rows',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'sortMergePasses',\n label: 'sort_merge_passes',\n },\n {\n value: 'sortScan',\n label: 'sort_scan',\n },\n {\n value: 'sortRange',\n label: 'sort_range',\n },\n {\n value: 'sortRows',\n label: 'sort_rows',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data, hostUUIDs, deployment]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Sorting',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusMySqlSortingChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusMySqlAbortedConnectionsStats from '../../../types/PrometheusMySqlAbortedConnectionsStats';\nimport useDataStore from '../../../core/hooks/useDataStore';\nimport Deployment from '../../../types/Deployment';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusMySqlAbortedConnectionsStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n hostUUIDs?: string[];\n showConnections?: boolean;\n deployment?: Deployment;\n}\n\nfunction PrometheusMySqlAbortedConnectionsChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusMySqlAbortedConnectionsChart',\n width,\n height = 250,\n hostUUIDs,\n showConnections = true,\n deployment,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (\n data &&\n data.length > 0 &&\n (deployment || !(deployment && hostUUIDs))\n ) {\n const formattedData = data.map(\n (stat: PrometheusMySqlAbortedConnectionsStats) => {\n return [\n {\n yValue: stat.abortedConnects,\n series: hostUUIDs\n ? deployment?.getHostName(stat.instance)\n : 'aborted_connects',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.abortedClients,\n series: hostUUIDs\n ? deployment?.getHostName(stat.instance)\n : 'aborted_clients',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n !hostUUIDs && {\n yValue: stat.accessDeniedErrors,\n series: 'access_denied_errors',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n (hostUUIDs && showConnections) ||\n (!hostUUIDs && {\n value: 'abortedConnects',\n label: 'aborted_connects',\n }),\n (hostUUIDs && !showConnections) ||\n (!hostUUIDs && {\n value: 'abortedClients',\n label: 'aborted_clients',\n }),\n !hostUUIDs && {\n value: 'accessDeniedErrors',\n label: 'access_denied_errors',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data, hostUUIDs, deployment]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: showConnections ? 'Aborted connections' : 'Aborted clients',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusMySqlAbortedConnectionsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusMySqlMemoryUtilizationStats from '../../../types/PrometheusMySqlMemoryUtilizationStats';\nimport numbro from 'numbro';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusMySqlMemoryUtilizationStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusMySqlMemoryUtilizationChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusMySqlMemoryUtilizationChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusMySqlMemoryUtilizationStats) => {\n return [\n {\n yValue: stat.innodbMemAdaptiveHash,\n series: 'innodb_mem_adaptive_hash',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.innodbBufferPoolSize,\n series: 'innodb_buffer_pool_size',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.queryCacheSize,\n series: 'query_cache_size',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.keyBufferSize,\n series: 'key_buffer_size',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.innodbLogBufferSize,\n series: 'innodb_log_buffer_size',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'innodbMemAdaptiveHash',\n label: 'innodb_mem_adaptive_hash',\n },\n {\n value: 'innodbBufferPoolSize',\n label: 'innodb_buffer_pool_size',\n },\n {\n value: 'queryCacheSize',\n label: 'query_cache_size',\n },\n {\n value: 'keyBufferSize',\n label: 'key_buffer_size',\n },\n {\n value: 'innodbLogBufferSize',\n label: 'innodb_log_buffer_size',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Memory utilization',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return numbro(parseInt(text, 10)).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 0,\n });\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusMySqlMemoryUtilizationChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport styles from './MysqlDbDashboard.module.less';\nimport { Col, Row, Spin } from 'antd';\nimport usePrometheusMySqlQueriesStats from '../../../core/hooks/usePrometheusMySqlQueriesStats';\nimport usePrometheusMySqlAbortedConnectionsStats from '../../../core/hooks/usePrometheusMySqlAbortedConnectionsStats';\nimport usePrometheusMySqlDbConnectionsStats from '../../../core/hooks/usePrometheusMySqlDbConnectionsStats';\nimport usePrometheusMySqlHandlersStats from '../../../core/hooks/usePrometheusMySqlHandlersStats';\nimport usePrometheusMySqlHandlerTransactionsStats from '../../../core/hooks/usePrometheusMySqlHandlerTransactionsStats';\nimport usePrometheusMySqlMemoryUtilizationStats from '../../../core/hooks/usePrometheusMySqlMemoryUtilizationStats';\nimport usePrometheusMySqlScanOperationsStats from '../../../core/hooks/usePrometheusMySqlScanOperationsStats';\nimport usePrometheusMySqlSortingStats from '../../../core/hooks/usePrometheusMySqlSortingStats';\nimport usePrometheusMySqlTableLockingStats from '../../../core/hooks/usePrometheusMySqlTableLockingStats';\nimport usePrometheusMySqlTemporaryTablesStats from '../../../core/hooks/usePrometheusMySqlTemporaryTablesStats';\nimport PrometheusMySqlHandlersChart from '../../ccx/charts/PrometheusMySqlHandlersChart';\nimport PrometheusMySqlHandlerTransactionsChart from '../../ccx/charts/PrometheusMySqlHandlerTransactionsChart';\nimport PrometheusMySqlDbConnectionsChart from '../../ccx/charts/PrometheusMySqlDbConnectionsChart';\nimport PrometheusMySqlQueriesChart from '../../ccx/charts/PrometheusMySqlQueriesChart';\nimport PrometheusMySqlScanOperationsChart from '../../ccx/charts/PrometheusMySqlScanOperationsChart';\nimport PrometheusMySqlTableLockingChart from '../../ccx/charts/PrometheusMySqlTableLockingChart';\nimport PrometheusMySqlTemporaryTablesChart from '../../ccx/charts/PrometheusMySqlTemporaryTablesChart';\nimport PrometheusMySqlSortingChart from '../../ccx/charts/PrometheusMySqlSortingChart';\nimport PrometheusMySqlAbortedConnectionsChart from '../../ccx/charts/PrometheusMySqlAbortedConnectionsChart';\nimport PrometheusMySqlMemoryUtilizationChart from '../../ccx/charts/PrometheusMySqlMemoryUtilizationChart';\n\nexport type MysqlDbDashboardProps = {\n uuid: string;\n host_uuid: string;\n port: number;\n from?: string;\n to?: string;\n interval: number;\n hidden?: boolean;\n displaySummary?: boolean;\n onLoading?: Function;\n};\n\nfunction MysqlDbDashboard({\n uuid,\n host_uuid,\n port,\n from,\n to,\n interval,\n hidden,\n displaySummary,\n onLoading,\n}: MysqlDbDashboardProps): ReactElement {\n const {\n stats: queriesStats,\n refresh: queriesStatsRefresh,\n loading: queriesStatsLoading,\n } = usePrometheusMySqlQueriesStats(uuid, host_uuid, from, to);\n\n const {\n stats: abortedConnectionsStats,\n refresh: abortedConnectionsStatsRefresh,\n loading: abortedConnectionsStatsLoading,\n } = usePrometheusMySqlAbortedConnectionsStats(uuid, host_uuid, from, to);\n\n const {\n stats: connectionsStats,\n refresh: connectionsStatsRefresh,\n loading: connectionsStatsLoading,\n } = usePrometheusMySqlDbConnectionsStats(uuid, host_uuid, from, to);\n\n const {\n stats: handlersStats,\n refresh: handlersStatsRefresh,\n loading: handlersStatsLoading,\n } = usePrometheusMySqlHandlersStats(uuid, host_uuid, from, to);\n\n const {\n stats: handlerTransactionsStats,\n refresh: handlerTransactionsStatsRefresh,\n loading: handlerTransactionsStatsLoading,\n } = usePrometheusMySqlHandlerTransactionsStats(uuid, host_uuid, from, to);\n\n const {\n stats: memoryUtilizationStats,\n refresh: memoryUtilizationStatsRefresh,\n loading: memoryUtilizationStatsLoading,\n } = usePrometheusMySqlMemoryUtilizationStats(uuid, host_uuid, from, to);\n\n const {\n stats: scanOperationsStats,\n refresh: scanOperationsStatsRefresh,\n loading: scanOperationsStatsLoading,\n } = usePrometheusMySqlScanOperationsStats(uuid, host_uuid, from, to);\n\n const {\n stats: sortingStats,\n refresh: sortingStatsRefresh,\n loading: sortingStatsLoading,\n } = usePrometheusMySqlSortingStats(uuid, host_uuid, from, to);\n\n const {\n stats: tableLockingStats,\n refresh: tableLockingStatsRefresh,\n loading: tableLockingStatsLoading,\n } = usePrometheusMySqlTableLockingStats(uuid, host_uuid, from, to);\n\n const {\n stats: temporaryTablesStats,\n refresh: temporaryTablesStatsRefresh,\n loading: temporaryTablesStatsLoading,\n } = usePrometheusMySqlTemporaryTablesStats(uuid, host_uuid, from, to);\n\n const [queriesStatsInterval, setQueriesStatsInterval] = useState<\n number | undefined\n >(undefined);\n const [\n abortedConnectionsStatsInterval,\n setAbortedConnectionsStatsInterval,\n ] = useState(undefined);\n const [connectionsStatsInterval, setConnectionsStatsInterval] = useState<\n number | undefined\n >(undefined);\n const [handlersStatsInterval, setHandlersStatsInterval] = useState<\n number | undefined\n >(undefined);\n const [\n handlerTransactionsStatsInterval,\n setHandlerTransactionsStatsInterval,\n ] = useState(undefined);\n const [memoryUtilizationStatsInterval, setMemoryUtilizationStatsInterval] =\n useState(undefined);\n const [scanOperationsStatsInterval, setScanOperationsStatsInterval] =\n useState(undefined);\n const [sortingStatsInterval, setSortingStatsInterval] = useState<\n number | undefined\n >(undefined);\n const [tableLockingStatsInterval, setTableLockingStatsInterval] = useState<\n number | undefined\n >(undefined);\n const [temporaryTablesStatsInterval, setTemporaryTablesStatsInterval] =\n useState(undefined);\n\n const [refreshInterval, setRefreshInterval] = useState(interval);\n\n useEffect(() => {\n let interval: any;\n if (queriesStats && refreshInterval > 0) {\n interval = setInterval(() => {\n queriesStatsRefresh();\n }, refreshInterval);\n setQueriesStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [queriesStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (abortedConnectionsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n abortedConnectionsStatsRefresh();\n }, refreshInterval);\n setAbortedConnectionsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [abortedConnectionsStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (connectionsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n connectionsStatsRefresh();\n }, refreshInterval);\n setConnectionsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [connectionsStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (handlersStats && refreshInterval > 0) {\n interval = setInterval(() => {\n handlersStatsRefresh();\n }, refreshInterval);\n setHandlersStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [handlersStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (handlerTransactionsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n handlerTransactionsStatsRefresh();\n }, refreshInterval);\n setHandlerTransactionsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [handlerTransactionsStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (memoryUtilizationStats && refreshInterval > 0) {\n interval = setInterval(() => {\n memoryUtilizationStatsRefresh();\n }, refreshInterval);\n setMemoryUtilizationStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [memoryUtilizationStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (scanOperationsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n scanOperationsStatsRefresh();\n }, refreshInterval);\n setScanOperationsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [scanOperationsStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (sortingStats && refreshInterval > 0) {\n interval = setInterval(() => {\n sortingStatsRefresh();\n }, refreshInterval);\n setSortingStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [sortingStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (tableLockingStats && refreshInterval > 0) {\n interval = setInterval(() => {\n tableLockingStatsRefresh();\n }, refreshInterval);\n setTableLockingStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [tableLockingStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (temporaryTablesStats && refreshInterval > 0) {\n interval = setInterval(() => {\n temporaryTablesStatsRefresh();\n }, refreshInterval);\n setTemporaryTablesStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [temporaryTablesStats, refreshInterval]);\n\n useEffect(() => {\n if (interval === 0) {\n // when interval is 0, we must pause the refresh (clear existing intervals)\n clearInterval(queriesStatsInterval);\n clearInterval(abortedConnectionsStatsInterval);\n clearInterval(connectionsStatsInterval);\n clearInterval(handlersStatsInterval);\n clearInterval(handlerTransactionsStatsInterval);\n clearInterval(memoryUtilizationStatsInterval);\n clearInterval(scanOperationsStatsInterval);\n clearInterval(sortingStatsInterval);\n clearInterval(tableLockingStatsInterval);\n clearInterval(temporaryTablesStatsInterval);\n setQueriesStatsInterval(0);\n setAbortedConnectionsStatsInterval(0);\n setConnectionsStatsInterval(0);\n setHandlersStatsInterval(0);\n setHandlerTransactionsStatsInterval(0);\n setMemoryUtilizationStatsInterval(0);\n setScanOperationsStatsInterval(0);\n setSortingStatsInterval(0);\n setTableLockingStatsInterval(0);\n setTemporaryTablesStatsInterval(0);\n }\n setRefreshInterval(interval);\n }, [interval]);\n\n useEffect(() => {\n if (hidden) {\n // clear interval to stop updating data if the tab is not active (charts are not visible)\n clearInterval(queriesStatsInterval);\n clearInterval(abortedConnectionsStatsInterval);\n clearInterval(connectionsStatsInterval);\n clearInterval(handlersStatsInterval);\n clearInterval(handlerTransactionsStatsInterval);\n clearInterval(memoryUtilizationStatsInterval);\n clearInterval(scanOperationsStatsInterval);\n clearInterval(sortingStatsInterval);\n clearInterval(tableLockingStatsInterval);\n clearInterval(temporaryTablesStatsInterval);\n setQueriesStatsInterval(0);\n setAbortedConnectionsStatsInterval(0);\n setConnectionsStatsInterval(0);\n setHandlersStatsInterval(0);\n setHandlerTransactionsStatsInterval(0);\n setMemoryUtilizationStatsInterval(0);\n setScanOperationsStatsInterval(0);\n setSortingStatsInterval(0);\n setTableLockingStatsInterval(0);\n setTemporaryTablesStatsInterval(0);\n } else if (\n queriesStatsInterval === 0 ||\n abortedConnectionsStatsInterval === 0 ||\n connectionsStatsInterval === 0 ||\n handlersStatsInterval === 0 ||\n handlerTransactionsStatsInterval === 0 ||\n memoryUtilizationStatsInterval === 0 ||\n scanOperationsStatsInterval === 0 ||\n sortingStatsInterval === 0 ||\n tableLockingStatsInterval === 0 ||\n temporaryTablesStatsInterval === 0\n ) {\n // force refresh if the interval is 0, otherwise, the interval will refresh data soon\n // interval is undefined on the first load\n // interval will be 0 when paused or tab is hidden\n queriesStatsRefresh();\n abortedConnectionsStatsRefresh();\n connectionsStatsRefresh();\n handlersStatsRefresh();\n handlerTransactionsStatsRefresh();\n memoryUtilizationStatsRefresh();\n scanOperationsStatsRefresh();\n sortingStatsRefresh();\n tableLockingStatsRefresh();\n temporaryTablesStatsRefresh();\n }\n }, [hidden]);\n\n useEffect(() => {\n if (\n queriesStatsLoading ||\n abortedConnectionsStatsLoading ||\n connectionsStatsLoading ||\n handlersStatsLoading ||\n handlerTransactionsStatsLoading ||\n memoryUtilizationStatsLoading ||\n scanOperationsStatsLoading ||\n sortingStatsLoading ||\n tableLockingStatsLoading ||\n temporaryTablesStatsLoading\n ) {\n onLoading && onLoading(true);\n } else {\n onLoading && onLoading(false);\n }\n }, [\n queriesStatsLoading,\n abortedConnectionsStatsLoading,\n connectionsStatsLoading,\n handlersStatsLoading,\n handlerTransactionsStatsLoading,\n memoryUtilizationStatsLoading,\n scanOperationsStatsLoading,\n sortingStatsLoading,\n tableLockingStatsLoading,\n temporaryTablesStatsLoading,\n ]);\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n );\n}\n\nexport default MysqlDbDashboard;\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusMySqlHandlersStats from '../../types/PrometheusMySqlHandlersStats';\n\nexport default function usePrometheusMySqlHandlersStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusMySqlHandlersStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details = await PrometheusStatService.getMySqlHandlers(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map((d: any) => new PrometheusMySqlHandlersStats(d))\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusMySqlHandlerTransactionsStats from '../../types/PrometheusMySqlHandlerTransactionsStats';\n\nexport default function usePrometheusMySqlHandlerTransactionsStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusMySqlHandlerTransactionsStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getMySqlHandlerTransactions(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusMySqlHandlerTransactionsStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusMySqlMemoryUtilizationStats from '../../types/PrometheusMySqlMemoryUtilizationStats';\n\nexport default function usePrometheusMySqlMemoryUtilizationStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusMySqlMemoryUtilizationStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getMySqlMemoryUtilization(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusMySqlMemoryUtilizationStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusMySqlScanOperationsStats from '../../types/PrometheusMySqlScanOperationsStats';\n\nexport default function usePrometheusMySqlScanOperationsStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusMySqlScanOperationsStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getMySqlScanOperations(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusMySqlScanOperationsStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusMySqlTableLockingStats from '../../types/PrometheusMySqlTableLockingStats';\n\nexport default function usePrometheusMySqlTableLockingStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusMySqlTableLockingStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getMySqlTableLocking(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusMySqlTableLockingStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","export type PrometheusPostgreSqlActiveSessionsStatsBackendApiProps = {\n created: number;\n instance: string;\n active: number;\n};\n\nexport default class PrometheusPostgreSqlActiveSessionsStats {\n readonly created: number;\n readonly instance: string;\n readonly active: number;\n\n constructor(props: PrometheusPostgreSqlActiveSessionsStatsBackendApiProps) {\n this.created = props.created;\n this.instance = props.instance;\n this.active = props.active;\n }\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusPostgreSqlActiveSessionsStats from '../../types/PrometheusPostgreSqlActiveSessionsStats';\n\nexport default function usePrometheusPostgreSqlActiveSessionsStats(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusPostgreSqlActiveSessionsStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid) {\n try {\n let details =\n await PrometheusStatService.getPostgreSqlActiveSessions(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusPostgreSqlActiveSessionsStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","export type PrometheusPostgreSqlCheckpointsRequestedAndTimedStatsBackendApiProps =\n {\n created: number;\n pg_stat_bgwriter_checkpoints_req: number;\n pg_stat_bgwriter_checkpoints_timed: number;\n };\n\nexport default class PrometheusPostgreSqlCheckpointsRequestedAndTimedStats {\n readonly created: number;\n readonly pgStatBgwriterCheckpointsReq: number;\n readonly pgStatBgwriterCheckpointsTimed: number;\n\n constructor(\n props: PrometheusPostgreSqlCheckpointsRequestedAndTimedStatsBackendApiProps\n ) {\n this.created = props.created;\n this.pgStatBgwriterCheckpointsReq =\n props.pg_stat_bgwriter_checkpoints_req;\n this.pgStatBgwriterCheckpointsTimed =\n props.pg_stat_bgwriter_checkpoints_timed;\n }\n}\n","export type PrometheusPostgreSqlCheckpointSyncTimeStatsBackendApiProps = {\n created: number;\n pg_stat_bgwriter_checkpoint_sync_time: number;\n};\n\nexport default class PrometheusPostgreSqlCheckpointSyncTimeStats {\n readonly created: number;\n readonly pgStatBgwriterCheckpointSyncTime: number;\n\n constructor(\n props: PrometheusPostgreSqlCheckpointSyncTimeStatsBackendApiProps\n ) {\n this.created = props.created;\n this.pgStatBgwriterCheckpointSyncTime =\n props.pg_stat_bgwriter_checkpoint_sync_time;\n }\n}\n","export type PrometheusPostgreSqlCheckpointWriteTimeStatsBackendApiProps = {\n created: number;\n pg_stat_bgwriter_checkpoint_write_time: number;\n};\n\nexport default class PrometheusPostgreSqlCheckpointWriteTimeStats {\n readonly created: number;\n readonly pgStatBgwriterCheckpointWriteTime: number;\n\n constructor(\n props: PrometheusPostgreSqlCheckpointWriteTimeStatsBackendApiProps\n ) {\n this.created = props.created;\n this.pgStatBgwriterCheckpointWriteTime =\n props.pg_stat_bgwriter_checkpoint_write_time;\n }\n}\n","export type PrometheusPostgreSqlDeleteStatsBackendApiProps = {\n created: number;\n instance: string;\n pg_stat_database_tup_deleted: number;\n};\n\nexport default class PrometheusPostgreSqlDeleteStats {\n readonly created: number;\n readonly instance: string;\n readonly pgStatDatabaseTupDeleted: number;\n\n constructor(props: PrometheusPostgreSqlDeleteStatsBackendApiProps) {\n this.created = props.created;\n this.instance = props.instance;\n this.pgStatDatabaseTupDeleted = props.pg_stat_database_tup_deleted;\n }\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusPostgreSqlDeleteStats from '../../types/PrometheusPostgreSqlDeleteStats';\n\nexport default function usePrometheusPostgreSqlDeleteStats(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusPostgreSqlDeleteStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid) {\n try {\n let details = await PrometheusStatService.getPostgreSqlDelete(\n uuid,\n host_uuid,\n from,\n to\n );\n\n setStats(\n details.map(\n (d: any) => new PrometheusPostgreSqlDeleteStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","export type PrometheusPostgreSqlDiskIOUtilizationStatsBackendApiProps = {\n created: number;\n disk_io_time_seconds_total: number;\n};\n\nexport default class PrometheusPostgreSqlDiskIOUtilizationStats {\n readonly created: number;\n readonly diskIOTimeSecondsTotal: number;\n\n constructor(\n props: PrometheusPostgreSqlDiskIOUtilizationStatsBackendApiProps\n ) {\n this.created = props.created;\n this.diskIOTimeSecondsTotal = props.disk_io_time_seconds_total;\n }\n}\n","export type PrometheusPostgreSqlDiskLatencyStatsBackendApiProps = {\n created: number;\n read_time_seconds: number;\n write_time_seconds: number;\n};\n\nexport default class PrometheusPostgreSqlDiskLatencyStats {\n readonly created: number;\n readonly readTimeSeconds: number;\n readonly writeTimeSeconds: number;\n\n constructor(props: PrometheusPostgreSqlDiskLatencyStatsBackendApiProps) {\n this.created = props.created;\n this.readTimeSeconds = props.read_time_seconds;\n this.writeTimeSeconds = props.write_time_seconds;\n }\n}\n","export type PrometheusPostgreSqlDiskUsageStatsBackendApiProps = {\n created: number;\n disk_usage: number;\n};\n\nexport default class PrometheusPostgreSqlDiskUsageStats {\n readonly created: number;\n readonly diskUsage: number;\n\n constructor(props: PrometheusPostgreSqlDiskUsageStatsBackendApiProps) {\n this.created = props.created;\n this.diskUsage = props.disk_usage;\n }\n}\n","export type PrometheusPostgreSqlIdleSessionsInTransactionAbortedStatsBackendApiProps =\n {\n created: number;\n idle_in_transaction_aborted: number;\n };\n\nexport default class PrometheusPostgreSqlIdleSessionsInTransactionAbortedStats {\n readonly created: number;\n readonly idleInTransactionAborted: number;\n\n constructor(\n props: PrometheusPostgreSqlIdleSessionsInTransactionAbortedStatsBackendApiProps\n ) {\n this.created = props.created;\n this.idleInTransactionAborted = props.idle_in_transaction_aborted;\n }\n}\n","export type PrometheusPostgreSqlIdleSessionsInTransactionStatsBackendApiProps =\n {\n created: number;\n idle_in_transaction: number;\n };\n\nexport default class PrometheusPostgreSqlIdleSessionsInTransactionStats {\n readonly created: number;\n readonly idleInTransaction: number;\n\n constructor(\n props: PrometheusPostgreSqlIdleSessionsInTransactionStatsBackendApiProps\n ) {\n this.created = props.created;\n this.idleInTransaction = props.idle_in_transaction;\n }\n}\n","export type PrometheusPostgreSqlIdleSessionsStatsBackendApiProps = {\n created: number;\n idle: number;\n};\n\nexport default class PrometheusPostgreSqlIdleSessionsStats {\n readonly created: number;\n readonly idle: number;\n\n constructor(props: PrometheusPostgreSqlIdleSessionsStatsBackendApiProps) {\n this.created = props.created;\n this.idle = props.idle;\n }\n}\n","export type PrometheusPostgreSqlInsertStatsBackendApiProps = {\n created: number;\n instance: string;\n pg_stat_database_tup_inserted: number;\n};\n\nexport default class PrometheusPostgreSqlInsertStats {\n readonly created: number;\n readonly instance: string;\n readonly pgStatDatabaseTupInserted: number;\n\n constructor(props: PrometheusPostgreSqlInsertStatsBackendApiProps) {\n this.created = props.created;\n this.instance = props.instance;\n this.pgStatDatabaseTupInserted = props.pg_stat_database_tup_inserted;\n }\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusPostgreSqlInsertStats from '../../types/PrometheusPostgreSqlInsertStats';\n\nexport default function usePrometheusPostgreSqlInsertStats(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusPostgreSqlInsertStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid) {\n try {\n const details = await PrometheusStatService.getPostgreSqlInsert(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusPostgreSqlInsertStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","export type PrometheusPostgreSqlLockTablesStatsBackendApiProps = {\n created: number;\n pg_locks_count: number;\n};\n\nexport default class PrometheusPostgreSqlLockTablesStats {\n readonly created: number;\n readonly pgLocksCount: number;\n\n constructor(props: PrometheusPostgreSqlLockTablesStatsBackendApiProps) {\n this.created = props.created;\n this.pgLocksCount = props.pg_locks_count;\n }\n}\n","export type PrometheusPostgreSqlSelectFetchedStatsBackendApiProps = {\n created: number;\n instance: string;\n pg_stat_database_tup_fetched: number;\n};\n\nexport default class PrometheusPostgreSqlSelectFetchedStats {\n readonly created: number;\n readonly instance: string;\n readonly pgStatDatabaseTupFetched: number;\n\n constructor(props: PrometheusPostgreSqlSelectFetchedStatsBackendApiProps) {\n this.created = props.created;\n this.instance = props.instance;\n this.pgStatDatabaseTupFetched = props.pg_stat_database_tup_fetched;\n }\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusPostgreSqlSelectFetchedStats from '../../types/PrometheusPostgreSqlSelectFetchedStats';\n\nexport default function usePrometheusPostgreSqlSelectFetchedStats(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusPostgreSqlSelectFetchedStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid) {\n try {\n const details =\n await PrometheusStatService.getPostgreSqlSelectFetched(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusPostgreSqlSelectFetchedStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","export type PrometheusPostgreSqlSelectReturnedStatsBackendApiProps = {\n created: number;\n instance: string;\n pg_stat_database_tup_returned: number;\n};\n\nexport default class PrometheusPostgreSqlSelectReturnedStats {\n readonly created: number;\n readonly instance: string;\n readonly pgStatDatabaseTupReturned: number;\n\n constructor(props: PrometheusPostgreSqlSelectReturnedStatsBackendApiProps) {\n this.created = props.created;\n this.instance = props.instance;\n this.pgStatDatabaseTupReturned = props.pg_stat_database_tup_returned;\n }\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusPostgreSqlSelectReturnedStats from '../../types/PrometheusPostgreSqlSelectReturnedStats';\n\nexport default function usePrometheusPostgreSqlSelectReturnedStats(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusPostgreSqlSelectReturnedStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid) {\n try {\n const details =\n await PrometheusStatService.getPostgreSqlSelectReturned(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusPostgreSqlSelectReturnedStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","export type PrometheusPostgreSqlUpdateStatsBackendApiProps = {\n created: number;\n instance: string;\n pg_stat_database_tup_updated: number;\n};\n\nexport default class PrometheusPostgreSqlUpdateStats {\n readonly created: number;\n readonly instance: string;\n readonly pgStatDatabaseTupUpdated: number;\n\n constructor(props: PrometheusPostgreSqlUpdateStatsBackendApiProps) {\n this.created = props.created;\n this.instance = props.instance;\n this.pgStatDatabaseTupUpdated = props.pg_stat_database_tup_updated;\n }\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusPostgreSqlUpdateStats from '../../types/PrometheusPostgreSqlUpdateStats';\n\nexport default function usePrometheusPostgreSqlUpdateStats(\n uuid: string,\n host_uuid: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusPostgreSqlUpdateStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid) {\n try {\n const details = await PrometheusStatService.getPostgreSqlUpdate(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusPostgreSqlUpdateStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusPostgreSqlSelectFetchedStats from '../../../types/PrometheusPostgreSqlSelectFetchedStats';\nimport Deployment from '../../../types/Deployment';\nimport styles from './PrometheusPostgreSqlSelectFetchedChart.module.less';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusPostgreSqlSelectFetchedStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n hostUUIDs?: string[];\n deployment?: Deployment;\n}\n\nfunction PrometheusPostgreSqlSelectFetchedChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusPostgreSqlSelectFetchedChart',\n width,\n height = 250,\n hostUUIDs,\n deployment,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (\n data &&\n data.length > 0 &&\n (deployment || !(deployment && hostUUIDs))\n ) {\n let combinedData: any[] = [];\n const formattedData = data.map(\n (stat: PrometheusPostgreSqlSelectFetchedStats) => {\n return [\n {\n yValue: stat.pgStatDatabaseTupFetched,\n series: hostUUIDs?.length\n ? deployment?.getHostName(stat.instance)\n : 'pg_stat_database_tup_fetched',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'pgStatDatabaseTupFetched',\n label: 'pg_stat_database_tup_fetched',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data, hostUUIDs, deployment]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'SELECT (fetched)',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string) => `${text}`,\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: `${d?.data?.yValue}`,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusPostgreSqlSelectFetchedChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusPostgreSqlInsertStats from '../../../types/PrometheusPostgreSqlInsertStats';\nimport Deployment from '../../../types/Deployment';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusPostgreSqlInsertStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n hostUUIDs?: string[];\n deployment?: Deployment;\n}\n\nfunction PrometheusPostgreSqlInsertChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusPostgreSqlInsertChart',\n width,\n height = 250,\n hostUUIDs,\n deployment,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (\n data &&\n data.length > 0 &&\n (deployment || !(deployment && hostUUIDs))\n ) {\n let combinedData: any[] = [];\n const formattedData = data.map(\n (stat: PrometheusPostgreSqlInsertStats) => {\n return [\n {\n yValue: stat.pgStatDatabaseTupInserted,\n series: hostUUIDs?.length\n ? deployment?.getHostName(stat.instance)\n : 'pg_stat_database_tup_inserted',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n const chartDataList =\n combinedData.length > 0 ? combinedData : formattedData;\n setChartData(chartDataList.flat());\n\n const summarySeries = [\n {\n value: 'pgStatDatabaseTupInserted',\n label: 'pg_stat_database_tup_inserted',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data, hostUUIDs, deployment]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'INSERT',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string) => `${text}`,\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: `${parseInt(d?.data?.yValue)}`,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusPostgreSqlInsertChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusPostgreSqlUpdateStats from '../../../types/PrometheusPostgreSqlUpdateStats';\nimport Deployment from '../../../types/Deployment';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusPostgreSqlUpdateStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n hostUUIDs?: string[];\n deployment?: Deployment;\n}\n\nfunction PrometheusPostgreSqlUpdateChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusPostgreSqlUpdateChart',\n width,\n height = 250,\n hostUUIDs,\n deployment,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (\n data &&\n data.length > 0 &&\n (deployment || !(deployment && hostUUIDs))\n ) {\n const formattedData = data.map(\n (stat: PrometheusPostgreSqlUpdateStats) => {\n return [\n {\n yValue: stat.pgStatDatabaseTupUpdated,\n series: hostUUIDs?.length\n ? deployment?.getHostName(stat.instance)\n : 'pg_stat_database_tup_updated',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'pgStatDatabaseTupUpdated',\n label: 'pg_stat_database_tup_updated',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data, hostUUIDs, deployment]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'UPDATE',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string) => `${text}`,\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: `${d?.data?.yValue}`,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusPostgreSqlUpdateChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusPostgreSqlDeleteStats from '../../../types/PrometheusPostgreSqlDeleteStats';\nimport Deployment from '../../../types/Deployment';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusPostgreSqlDeleteStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n hostUUIDs?: string[];\n deployment?: Deployment;\n}\n\nfunction PrometheusPostgreSqlDeleteChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusPostgreSqlDeleteChart',\n width,\n height = 250,\n hostUUIDs,\n deployment,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (\n data &&\n data.length > 0 &&\n (deployment || !(deployment && hostUUIDs))\n ) {\n const formattedData = data.map(\n (stat: PrometheusPostgreSqlDeleteStats) => {\n return [\n {\n yValue: stat.pgStatDatabaseTupDeleted,\n series: hostUUIDs?.length\n ? deployment?.getHostName(stat.instance)\n : 'pg_stat_database_tup_deleted',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'pgStatDatabaseTupDeleted',\n label: 'pg_stat_database_tup_deleted',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data, hostUUIDs, deployment]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'DELETE',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string) => `${text}`,\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: `${d?.data?.yValue}`,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusPostgreSqlDeleteChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusPostgreSqlSelectReturnedStats from '../../../types/PrometheusPostgreSqlSelectReturnedStats';\nimport Deployment from '../../../types/Deployment';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusPostgreSqlSelectReturnedStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n hostUUIDs?: string[];\n deployment?: Deployment;\n}\n\nfunction PrometheusPostgreSqlSelectReturnedChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusPostgreSqlSelectReturnedChart',\n width,\n height = 250,\n hostUUIDs,\n deployment,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (\n data &&\n data.length > 0 &&\n (deployment || !(deployment && hostUUIDs))\n ) {\n const formattedData = data.map(\n (stat: PrometheusPostgreSqlSelectReturnedStats) => {\n return [\n {\n yValue: stat.pgStatDatabaseTupReturned,\n series: hostUUIDs?.length\n ? deployment?.getHostName(stat.instance)\n : 'pg_stat_database_tup_returned',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'pgStatDatabaseTupReturned',\n label: 'pg_stat_database_tup_returned',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data, hostUUIDs, deployment]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'SELECT (returned)',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string) => `${text}`,\n },\n },\n\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: `${d?.data?.yValue}`,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusPostgreSqlSelectReturnedChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusPostgreSqlActiveSessionsStats from '../../../types/PrometheusPostgreSqlActiveSessionsStats';\nimport Deployment from '../../../types/Deployment';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusPostgreSqlActiveSessionsStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n hostUUIDs?: string[];\n deployment?: Deployment;\n}\n\nfunction PrometheusPostgreSqlActiveSessionsChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusPostgreSqlActiveSessionsChart',\n width,\n height = 250,\n hostUUIDs,\n deployment,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (\n data &&\n data.length > 0 &&\n (deployment || !(deployment && hostUUIDs))\n ) {\n const formattedData = data.map(\n (stat: PrometheusPostgreSqlActiveSessionsStats) => {\n return [\n {\n yValue: stat.active,\n series: hostUUIDs?.length\n ? deployment?.getHostName(stat.instance)\n : 'active',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'active',\n label: 'active',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data, hostUUIDs, deployment]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Active sessions',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusPostgreSqlActiveSessionsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusPostgreSqlIdleSessionsStats from '../../../types/PrometheusPostgreSqlIdleSessionsStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusPostgreSqlIdleSessionsStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusPostgreSqlIdleSessionsChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusPostgreSqlIdleSessionsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusPostgreSqlIdleSessionsStats) => {\n return [\n {\n yValue: stat.idle,\n series: 'idle',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'idle',\n label: 'idle',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Idle sessions',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusPostgreSqlIdleSessionsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusPostgreSqlDiskLatencyStats from '../../../types/PrometheusPostgreSqlDiskLatencyStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusPostgreSqlDiskLatencyStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusPostgreSqlDiskLatencyChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusPostgreSqlDiskLatencyChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusPostgreSqlDiskLatencyStats) => {\n return [\n {\n yValue: stat.readTimeSeconds,\n series: 'read_time_seconds',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.writeTimeSeconds,\n series: 'write_time_seconds',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'readTimeSeconds',\n label: 'read_time_seconds',\n },\n {\n value: 'writeTimeSeconds',\n label: 'write_time_seconds',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Disk latency',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string) => `${text}s`,\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: `${d?.data?.yValue}s`,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusPostgreSqlDiskLatencyChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusPostgreSqlDiskUsageStats from '../../../types/PrometheusPostgreSqlDiskUsageStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusPostgreSqlDiskUsageStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusPostgreSqlDiskUsageChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusPostgreSqlDiskUsageChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusPostgreSqlDiskUsageStats) => {\n return [\n {\n yValue: stat.diskUsage,\n series: 'disk_usage',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'diskUsage',\n label: 'disk_usage',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Disk usage',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusPostgreSqlDiskUsageChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusPostgreSqlDiskIOUtilizationStats from '../../../types/PrometheusPostgreSqlDiskIOUtilizationStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusPostgreSqlDiskIOUtilizationStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusPostgreSqlDiskIOUtilizationChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusPostgreSqlDiskIOUtilizationChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusPostgreSqlDiskIOUtilizationStats) => {\n return [\n {\n yValue: stat.diskIOTimeSecondsTotal,\n series: 'disk_io_time_seconds_total',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'diskIOTimeSecondsTotal',\n label: 'disk_io_time_seconds_total',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Disk IO utilization',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: any) => `${text}`,\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: `${d?.data?.yValue}`,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusPostgreSqlDiskIOUtilizationChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusPostgreSqlCheckpointWriteTimeStats from '../../../types/PrometheusPostgreSqlCheckpointWriteTimeStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusPostgreSqlCheckpointWriteTimeStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusPostgreSqlCheckpointWriteTimeChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusPostgreSqlCheckpointWriteTimeChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusPostgreSqlCheckpointWriteTimeStats) => {\n return [\n {\n yValue: stat.pgStatBgwriterCheckpointWriteTime,\n series: 'pg_stat_bgwriter_checkpoint_write_time',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'pgStatBgwriterCheckpointWriteTime',\n label: 'pg_stat_bgwriter_checkpoint_write_time',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Checkpoint write time',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusPostgreSqlCheckpointWriteTimeChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusPostgreSqlCheckpointsRequestedAndTimedStats from '../../../types/PrometheusPostgreSqlCheckpointsRequestedAndTimedStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusPostgreSqlCheckpointsRequestedAndTimedStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusPostgreSqlCheckpointsRequestedAndTimedChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusPostgreSqlCheckpointsRequestedAndTimedChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (\n stat: PrometheusPostgreSqlCheckpointsRequestedAndTimedStats\n ) => {\n return [\n {\n yValue: stat.pgStatBgwriterCheckpointsReq,\n series: 'pg_stat_bgwriter_checkpoints_req',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.pgStatBgwriterCheckpointsTimed,\n series: 'pg_stat_bgwriter_checkpoints_timed',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'pgStatBgwriterCheckpointsReq',\n label: 'pg_stat_bgwriter_checkpoints_req',\n },\n {\n value: 'pgStatBgwriterCheckpointsTimed',\n label: 'pg_stat_bgwriter_checkpoints_timed',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Checkpoints requested and timed',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusPostgreSqlCheckpointsRequestedAndTimedChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusPostgreSqlCheckpointSyncTimeStats from '../../../types/PrometheusPostgreSqlCheckpointSyncTimeStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusPostgreSqlCheckpointSyncTimeStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusPostgreSqlCheckpointSyncTimeChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusPostgreSqlCheckpointSyncTimeChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusPostgreSqlCheckpointSyncTimeStats) => {\n return [\n {\n yValue: stat.pgStatBgwriterCheckpointSyncTime,\n series: 'pg_stat_bgwriter_checkpoint_sync_time',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'pgStatBgwriterCheckpointSyncTime',\n label: 'pg_stat_bgwriter_checkpoint_sync_time',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Checkpoint sync time',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusPostgreSqlCheckpointSyncTimeChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusPostgreSqlLockTablesStats from '../../../types/PrometheusPostgreSqlLockTablesStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusPostgreSqlLockTablesStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusPostgreSqlLockTablesChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusPostgreSqlLockTablesChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusPostgreSqlLockTablesStats) => {\n return [\n {\n yValue: stat.pgLocksCount,\n series: 'pg_locks_count',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'pgLocksCount',\n label: 'pg_locks_count',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Lock tables',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusPostgreSqlLockTablesChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusPostgreSqlIdleSessionsInTransactionStats from '../../../types/PrometheusPostgreSqlIdleSessionsInTransactionStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusPostgreSqlIdleSessionsInTransactionStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusPostgreSqlIdleSessionsInTransactionChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusPostgreSqlIdleSessionsInTransactionChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusPostgreSqlIdleSessionsInTransactionStats) => {\n return [\n {\n yValue: stat.idleInTransaction,\n series: 'idle_in_transaction',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'idleInTransaction',\n label: 'idle_in_transaction',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Idle sessions in transaction',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusPostgreSqlIdleSessionsInTransactionChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusPostgreSqlIdleSessionsInTransactionAbortedStats from '../../../types/PrometheusPostgreSqlIdleSessionsInTransactionAbortedStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusPostgreSqlIdleSessionsInTransactionAbortedStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusPostgreSqlIdleSessionsInTransactionAbortedChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusPostgreSqlIdleSessionsInTransactionAbortedChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (\n stat: PrometheusPostgreSqlIdleSessionsInTransactionAbortedStats\n ) => {\n return [\n {\n yValue: stat.idleInTransactionAborted,\n series: 'idle_in_transaction_aborted',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'idleInTransactionAborted',\n label: 'idle_in_transaction_aborted',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Idle sessions in transaction (aborted)',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusPostgreSqlIdleSessionsInTransactionAbortedChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport styles from './PostgreSqlDbDashboard.module.less';\nimport { Col, Row, Spin } from 'antd';\nimport usePrometheusPostgreSqlActiveSessionsStats from '../../../core/hooks/usePrometheusPostgreSqlActiveSessionsStats';\nimport usePrometheusPostgreSqlCheckpointsRequestedAndTimedStats from '../../../core/hooks/usePrometheusPostgreSqlCheckpointsRequestedAndTimedStats';\nimport usePrometheusPostgreSqlCheckpointSyncTimeStats from '../../../core/hooks/usePrometheusPostgreSqlCheckpointSyncTimeStats';\nimport usePrometheusPostgreSqlCheckpointWriteTimeStats from '../../../core/hooks/usePrometheusPostgreSqlCheckpointWriteTimeStats';\nimport usePrometheusPostgreSqlDeleteStats from '../../../core/hooks/usePrometheusPostgreSqlDeleteStats';\nimport usePrometheusPostgreSqlDiskIOUtilizationStats from '../../../core/hooks/usePrometheusPostgreSqlDiskIOUtilizationStats';\nimport usePrometheusPostgreSqlDiskLatencyStats from '../../../core/hooks/usePrometheusPostgreSqlDiskLatencyStats';\nimport usePrometheusPostgreSqlDiskUsageStats from '../../../core/hooks/usePrometheusPostgreSqlDiskUsageStats';\nimport usePrometheusPostgreSqlIdleSessionsInTransactionAbortedStats from '../../../core/hooks/usePrometheusPostgreSqlIdleSessionsInTransactionAbortedStats';\nimport usePrometheusPostgreSqlIdleSessionsInTransactionStats from '../../../core/hooks/usePrometheusPostgreSqlIdleSessionsInTransactionStats';\nimport usePrometheusPostgreSqlIdleSessionsStats from '../../../core/hooks/usePrometheusPostgreSqlIdleSessionsStats';\nimport usePrometheusPostgreSqlInsertStats from '../../../core/hooks/usePrometheusPostgreSqlInsertStats';\nimport usePrometheusPostgreSqlLockTablesStats from '../../../core/hooks/usePrometheusPostgreSqlLockTablesStats';\nimport usePrometheusPostgreSqlSelectFetchedStats from '../../../core/hooks/usePrometheusPostgreSqlSelectFetchedStats';\nimport usePrometheusPostgreSqlSelectReturnedStats from '../../../core/hooks/usePrometheusPostgreSqlSelectReturnedStats';\nimport usePrometheusPostgreSqlUpdateStats from '../../../core/hooks/usePrometheusPostgreSqlUpdateStats';\nimport PrometheusPostgreSqlSelectFetchedChart from '../../ccx/charts/PrometheusPostgreSqlSelectFetchedChart';\nimport PrometheusPostgreSqlInsertChart from '../../ccx/charts/PrometheusPostgreSqlInsertChart';\nimport PrometheusPostgreSqlUpdateChart from '../../ccx/charts/PrometheusPostgreSqlUpdateChart';\nimport PrometheusPostgreSqlDeleteChart from '../../ccx/charts/PrometheusPostgreSqlDeleteChart';\nimport PrometheusPostgreSqlSelectReturnedChart from '../../ccx/charts/PrometheusPostgreSqlSelectReturnedChart';\nimport PrometheusPostgreSqlActiveSessionsChart from '../../ccx/charts/PrometheusPostgreSqlActiveSessionsChart';\nimport PrometheusPostgreSqlIdleSessionsChart from '../../ccx/charts/PrometheusPostgreSqlIdleSessionsChart';\nimport PrometheusPostgreSqlDiskLatencyChart from '../../ccx/charts/PrometheusPostgreSqlDiskLatencyChart';\nimport PrometheusPostgreSqlDiskUsageChart from '../../ccx/charts/PrometheusPostgreSqlDiskUsageChart';\nimport PrometheusPostgreSqlDiskIOUtilizationChart from '../../ccx/charts/PrometheusPostgreSqlDiskIOUtilizationChart';\nimport PrometheusPostgreSqlCheckpointWriteTimeChart from '../../ccx/charts/PrometheusPostgreSqlCheckpointWriteTimeChart';\nimport PrometheusPostgreSqlCheckpointsRequestedAndTimedChart from '../../ccx/charts/PrometheusPostgreSqlCheckpointsRequestedAndTimedChart';\nimport PrometheusPostgreSqlCheckpointSyncTimeChart from '../../ccx/charts/PrometheusPostgreSqlCheckpointSyncTimeChart';\nimport PrometheusPostgreSqlLockTablesChart from '../../ccx/charts/PrometheusPostgreSqlLockTablesChart';\nimport PrometheusPostgreSqlIdleSessionsInTransactionChart from '../../ccx/charts/PrometheusPostgreSqlIdleSessionsInTransactionChart';\nimport PrometheusPostgreSqlIdleSessionsInTransactionAbortedChart from '../../ccx/charts/PrometheusPostgreSqlIdleSessionsInTransactionAbortedChart';\n\ntype PostgreSqlDbDashboardProps = {\n uuid: string;\n host_uuid: string;\n port: number;\n from?: string;\n to?: string;\n interval: number;\n hidden?: boolean;\n displaySummary?: boolean;\n onLoading?: Function;\n};\n\nfunction PostgreSqlDbDashboard({\n uuid,\n host_uuid,\n port,\n from,\n to,\n interval,\n hidden,\n displaySummary,\n onLoading,\n}: PostgreSqlDbDashboardProps): ReactElement {\n const {\n stats: activeSessionsStats,\n refresh: activeSessionsStatsRefresh,\n loading: activeSessionsStatsLoading,\n } = usePrometheusPostgreSqlActiveSessionsStats(uuid, host_uuid, from, to);\n\n const {\n stats: checkpointsRequestedAndTimedStats,\n refresh: checkpointsRequestedAndTimedStatsRefresh,\n loading: checkpointsRequestedAndTimedStatsLoading,\n } = usePrometheusPostgreSqlCheckpointsRequestedAndTimedStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: checkpointSyncTimeStats,\n refresh: checkpointSyncTimeStatsRefresh,\n loading: checkpointSyncTimeStatsLoading,\n } = usePrometheusPostgreSqlCheckpointSyncTimeStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: checkpointWriteTimeStats,\n refresh: checkpointWriteTimeStatsRefresh,\n loading: checkpointWriteTimeStatsLoading,\n } = usePrometheusPostgreSqlCheckpointWriteTimeStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: deleteStats,\n refresh: deleteStatsRefresh,\n loading: deleteStatsLoading,\n } = usePrometheusPostgreSqlDeleteStats(uuid, host_uuid, from, to);\n\n const {\n stats: diskIOUtilizationStats,\n refresh: diskIOUtilizationStatsRefresh,\n loading: diskIOUtilizationStatsLoading,\n } = usePrometheusPostgreSqlDiskIOUtilizationStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: diskLatencyStats,\n refresh: diskLatencyStatsRefresh,\n loading: diskLatencyStatsLoading,\n } = usePrometheusPostgreSqlDiskLatencyStats(uuid, host_uuid, from, to);\n\n const {\n stats: diskUsageStats,\n refresh: diskUsageStatsRefresh,\n loading: diskUsageStatsLoading,\n } = usePrometheusPostgreSqlDiskUsageStats(uuid, host_uuid, from, to);\n\n const {\n stats: idleSessionsInTransactionAbortedStats,\n refresh: idleSessionsInTransactionAbortedStatsRefresh,\n loading: idleSessionsInTransactionAbortedStatsLoading,\n } = usePrometheusPostgreSqlIdleSessionsInTransactionAbortedStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: idleSessionsInTransactionStats,\n refresh: idleSessionsInTransactionStatsRefresh,\n loading: idleSessionsInTransactionStatsLoading,\n } = usePrometheusPostgreSqlIdleSessionsInTransactionStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: idleSessionsStats,\n refresh: idleSessionsStatsRefresh,\n loading: idleSessionsStatsLoading,\n } = usePrometheusPostgreSqlIdleSessionsStats(uuid, host_uuid, from, to);\n\n const {\n stats: insertStats,\n refresh: insertStatsRefresh,\n loading: insertStatsLoading,\n } = usePrometheusPostgreSqlInsertStats(uuid, host_uuid, from, to);\n\n const {\n stats: lockTablesStats,\n refresh: lockTablesStatsRefresh,\n loading: lockTablesStatsLoading,\n } = usePrometheusPostgreSqlLockTablesStats(uuid, host_uuid, from, to);\n\n const {\n stats: selectFetchedStats,\n refresh: selectFetchedStatsRefresh,\n loading: selectFetchedStatsLoading,\n } = usePrometheusPostgreSqlSelectFetchedStats(uuid, host_uuid, from, to);\n\n const {\n stats: selectReturnedStats,\n refresh: selectReturnedStatsRefresh,\n loading: selectReturnedStatsLoading,\n } = usePrometheusPostgreSqlSelectReturnedStats(uuid, host_uuid, from, to);\n\n const {\n stats: updateStats,\n refresh: updateStatsRefresh,\n loading: updateStatsLoading,\n } = usePrometheusPostgreSqlUpdateStats(uuid, host_uuid, from, to);\n\n const [activeSessionsStatsInterval, setActiveSessionsStatsInterval] =\n useState(undefined);\n const [\n checkpointsRequestedAndTimedStatsInterval,\n setCheckpointsRequestedAndTimedStatsInterval,\n ] = useState(undefined);\n const [\n checkpointSyncTimeStatsInterval,\n setCheckpointSyncTimeStatsInterval,\n ] = useState(undefined);\n const [\n checkpointWriteTimeStatsInterval,\n setCheckpointWriteTimeStatsInterval,\n ] = useState(undefined);\n const [deleteStatsInterval, setDeleteStatsInterval] = useState<\n number | undefined\n >(undefined);\n const [diskIOUtilizationStatsInterval, setDiskIOUtilizationStatsInterval] =\n useState(undefined);\n const [diskLatencyStatsInterval, setDiskLatencyStatsInterval] = useState<\n number | undefined\n >(undefined);\n const [diskUsageStatsInterval, setDiskUsageStatsInterval] = useState<\n number | undefined\n >(undefined);\n const [\n idleSessionsInTransactionAbortedStatsInterval,\n setIdleSessionsInTransactionAbortedStatsInterval,\n ] = useState(undefined);\n const [\n idleSessionsInTransactionStatsInterval,\n setIdleSessionsInTransactionStatsInterval,\n ] = useState(undefined);\n const [idleSessionsStatsInterval, setIdleSessionsStatsInterval] = useState<\n number | undefined\n >(undefined);\n const [insertStatsInterval, setInsertStatsInterval] = useState<\n number | undefined\n >(undefined);\n const [lockTablesStatsInterval, setLockTablesStatsInterval] = useState<\n number | undefined\n >(undefined);\n const [selectFetchedStatsInterval, setSelectFetchedStatsInterval] =\n useState(undefined);\n const [selectReturnedStatsInterval, setSelectReturnedStatsInterval] =\n useState(undefined);\n const [updateStatsInterval, setUpdateStatsInterval] = useState<\n number | undefined\n >(undefined);\n\n const [refreshInterval, setRefreshInterval] = useState(interval);\n\n useEffect(() => {\n let interval: any;\n if (activeSessionsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n activeSessionsStatsRefresh();\n }, refreshInterval);\n setActiveSessionsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [activeSessionsStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (checkpointsRequestedAndTimedStats && refreshInterval > 0) {\n interval = setInterval(() => {\n checkpointsRequestedAndTimedStatsRefresh();\n }, refreshInterval);\n setCheckpointsRequestedAndTimedStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [checkpointsRequestedAndTimedStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (checkpointSyncTimeStats && refreshInterval > 0) {\n interval = setInterval(() => {\n checkpointSyncTimeStatsRefresh();\n }, refreshInterval);\n setCheckpointSyncTimeStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [checkpointSyncTimeStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (checkpointWriteTimeStats && refreshInterval > 0) {\n interval = setInterval(() => {\n checkpointWriteTimeStatsRefresh();\n }, refreshInterval);\n setCheckpointWriteTimeStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [checkpointWriteTimeStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (deleteStats && refreshInterval > 0) {\n interval = setInterval(() => {\n deleteStatsRefresh();\n }, refreshInterval);\n setDeleteStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [deleteStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (diskIOUtilizationStats && refreshInterval > 0) {\n interval = setInterval(() => {\n diskIOUtilizationStatsRefresh();\n }, refreshInterval);\n setDiskIOUtilizationStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [diskIOUtilizationStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (diskLatencyStats && refreshInterval > 0) {\n interval = setInterval(() => {\n diskLatencyStatsRefresh();\n }, refreshInterval);\n setDiskLatencyStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [diskLatencyStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (diskUsageStats && refreshInterval > 0) {\n interval = setInterval(() => {\n diskUsageStatsRefresh();\n }, refreshInterval);\n setDiskUsageStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [diskUsageStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (idleSessionsInTransactionAbortedStats && refreshInterval > 0) {\n interval = setInterval(() => {\n idleSessionsInTransactionAbortedStatsRefresh();\n }, refreshInterval);\n setIdleSessionsInTransactionAbortedStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [idleSessionsInTransactionAbortedStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (idleSessionsInTransactionStats && refreshInterval > 0) {\n interval = setInterval(() => {\n idleSessionsInTransactionStatsRefresh();\n }, refreshInterval);\n setIdleSessionsInTransactionStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [idleSessionsInTransactionStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (idleSessionsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n idleSessionsStatsRefresh();\n }, refreshInterval);\n setIdleSessionsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [idleSessionsStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (insertStats && refreshInterval > 0) {\n interval = setInterval(() => {\n insertStatsRefresh();\n }, refreshInterval);\n setInsertStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [insertStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (lockTablesStats && refreshInterval > 0) {\n interval = setInterval(() => {\n lockTablesStatsRefresh();\n }, refreshInterval);\n setLockTablesStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [lockTablesStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (selectFetchedStats && refreshInterval > 0) {\n interval = setInterval(() => {\n selectFetchedStatsRefresh();\n }, refreshInterval);\n setSelectFetchedStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [selectFetchedStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (selectReturnedStats && refreshInterval > 0) {\n interval = setInterval(() => {\n selectReturnedStatsRefresh();\n }, refreshInterval);\n setSelectReturnedStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [selectReturnedStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (updateStats && refreshInterval > 0) {\n interval = setInterval(() => {\n updateStatsRefresh();\n }, refreshInterval);\n setUpdateStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [updateStats, refreshInterval]);\n\n useEffect(() => {\n if (interval === 0) {\n // when interval is 0, we must pause the refresh (clear existing intervals)\n clearInterval(activeSessionsStatsInterval);\n clearInterval(checkpointsRequestedAndTimedStatsInterval);\n clearInterval(checkpointSyncTimeStatsInterval);\n clearInterval(checkpointWriteTimeStatsInterval);\n clearInterval(deleteStatsInterval);\n clearInterval(diskIOUtilizationStatsInterval);\n clearInterval(diskLatencyStatsInterval);\n clearInterval(diskUsageStatsInterval);\n clearInterval(idleSessionsInTransactionAbortedStatsInterval);\n clearInterval(idleSessionsInTransactionStatsInterval);\n clearInterval(idleSessionsStatsInterval);\n clearInterval(insertStatsInterval);\n clearInterval(lockTablesStatsInterval);\n clearInterval(selectFetchedStatsInterval);\n clearInterval(selectReturnedStatsInterval);\n clearInterval(updateStatsInterval);\n setActiveSessionsStatsInterval(0);\n setCheckpointsRequestedAndTimedStatsInterval(0);\n setCheckpointSyncTimeStatsInterval(0);\n setCheckpointWriteTimeStatsInterval(0);\n setDeleteStatsInterval(0);\n setDiskIOUtilizationStatsInterval(0);\n setDiskLatencyStatsInterval(0);\n setDiskUsageStatsInterval(0);\n setIdleSessionsInTransactionAbortedStatsInterval(0);\n setIdleSessionsInTransactionStatsInterval(0);\n setIdleSessionsStatsInterval(0);\n setInsertStatsInterval(0);\n setLockTablesStatsInterval(0);\n setSelectFetchedStatsInterval(0);\n setSelectReturnedStatsInterval(0);\n setUpdateStatsInterval(0);\n }\n setRefreshInterval(interval);\n }, [interval]);\n\n useEffect(() => {\n if (hidden) {\n // clear interval to stop updating data if the tab is not active (charts are not visible)\n clearInterval(activeSessionsStatsInterval);\n clearInterval(checkpointsRequestedAndTimedStatsInterval);\n clearInterval(checkpointSyncTimeStatsInterval);\n clearInterval(checkpointWriteTimeStatsInterval);\n clearInterval(deleteStatsInterval);\n clearInterval(diskIOUtilizationStatsInterval);\n clearInterval(diskLatencyStatsInterval);\n clearInterval(diskUsageStatsInterval);\n clearInterval(idleSessionsInTransactionAbortedStatsInterval);\n clearInterval(idleSessionsInTransactionStatsInterval);\n clearInterval(idleSessionsStatsInterval);\n clearInterval(insertStatsInterval);\n clearInterval(lockTablesStatsInterval);\n clearInterval(selectFetchedStatsInterval);\n clearInterval(selectReturnedStatsInterval);\n clearInterval(updateStatsInterval);\n setActiveSessionsStatsInterval(0);\n setCheckpointsRequestedAndTimedStatsInterval(0);\n setCheckpointSyncTimeStatsInterval(0);\n setCheckpointWriteTimeStatsInterval(0);\n setDeleteStatsInterval(0);\n setDiskIOUtilizationStatsInterval(0);\n setDiskLatencyStatsInterval(0);\n setDiskUsageStatsInterval(0);\n setIdleSessionsInTransactionAbortedStatsInterval(0);\n setIdleSessionsInTransactionStatsInterval(0);\n setIdleSessionsStatsInterval(0);\n setInsertStatsInterval(0);\n setLockTablesStatsInterval(0);\n setSelectFetchedStatsInterval(0);\n setSelectReturnedStatsInterval(0);\n setUpdateStatsInterval(0);\n } else if (\n activeSessionsStatsInterval === 0 ||\n checkpointsRequestedAndTimedStatsInterval === 0 ||\n checkpointSyncTimeStatsInterval === 0 ||\n checkpointWriteTimeStatsInterval === 0 ||\n deleteStatsInterval === 0 ||\n diskIOUtilizationStatsInterval === 0 ||\n diskLatencyStatsInterval === 0 ||\n diskUsageStatsInterval === 0 ||\n idleSessionsInTransactionAbortedStatsInterval === 0 ||\n idleSessionsInTransactionStatsInterval === 0 ||\n idleSessionsStatsInterval === 0 ||\n insertStatsInterval === 0 ||\n lockTablesStatsInterval === 0 ||\n selectFetchedStatsInterval === 0 ||\n selectReturnedStatsInterval === 0 ||\n updateStatsInterval === 0\n ) {\n // force refresh if the interval is 0, otherwise, the interval will refresh data soon\n // interval is undefined on the first load\n // interval will be 0 when paused or tab is hidden\n activeSessionsStatsRefresh();\n checkpointsRequestedAndTimedStatsRefresh();\n checkpointSyncTimeStatsRefresh();\n checkpointWriteTimeStatsRefresh();\n deleteStatsRefresh();\n diskIOUtilizationStatsRefresh();\n diskLatencyStatsRefresh();\n diskUsageStatsRefresh();\n idleSessionsInTransactionAbortedStatsRefresh();\n idleSessionsInTransactionStatsRefresh();\n idleSessionsStatsRefresh();\n insertStatsRefresh();\n lockTablesStatsRefresh();\n selectFetchedStatsRefresh();\n selectReturnedStatsRefresh();\n updateStatsRefresh();\n }\n }, [hidden]);\n\n useEffect(() => {\n if (\n activeSessionsStatsLoading ||\n checkpointsRequestedAndTimedStatsLoading ||\n checkpointSyncTimeStatsLoading ||\n checkpointWriteTimeStatsLoading ||\n deleteStatsLoading ||\n diskIOUtilizationStatsLoading ||\n diskLatencyStatsLoading ||\n diskUsageStatsLoading ||\n idleSessionsInTransactionAbortedStatsLoading ||\n idleSessionsInTransactionStatsLoading ||\n idleSessionsStatsLoading ||\n insertStatsLoading ||\n lockTablesStatsLoading ||\n selectFetchedStatsLoading ||\n selectReturnedStatsLoading ||\n updateStatsLoading\n ) {\n onLoading && onLoading(true);\n } else {\n onLoading && onLoading(false);\n }\n }, [\n activeSessionsStatsLoading,\n checkpointsRequestedAndTimedStatsLoading,\n checkpointSyncTimeStatsLoading,\n checkpointWriteTimeStatsLoading,\n deleteStatsLoading,\n diskIOUtilizationStatsLoading,\n diskLatencyStatsLoading,\n diskUsageStatsLoading,\n idleSessionsInTransactionAbortedStatsLoading,\n idleSessionsInTransactionStatsLoading,\n idleSessionsStatsLoading,\n insertStatsLoading,\n lockTablesStatsLoading,\n selectFetchedStatsLoading,\n selectReturnedStatsLoading,\n updateStatsLoading,\n ]);\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n );\n}\n\nexport default PostgreSqlDbDashboard;\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusPostgreSqlCheckpointsRequestedAndTimedStats from '../../types/PrometheusPostgreSqlCheckpointsRequestedAndTimedStats';\n\nexport default function usePrometheusPostgreSqlCheckpointsRequestedAndTimedStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusPostgreSqlCheckpointsRequestedAndTimedStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getPostgreSqlCheckpointsRequestedAndTimed(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusPostgreSqlCheckpointsRequestedAndTimedStats(\n d\n )\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusPostgreSqlCheckpointSyncTimeStats from '../../types/PrometheusPostgreSqlCheckpointSyncTimeStats';\n\nexport default function usePrometheusPostgreSqlCheckpointSyncTimeStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusPostgreSqlCheckpointSyncTimeStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getPostgreSqlCheckpointSyncTime(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusPostgreSqlCheckpointSyncTimeStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusPostgreSqlCheckpointWriteTimeStats from '../../types/PrometheusPostgreSqlCheckpointWriteTimeStats';\n\nexport default function usePrometheusPostgreSqlCheckpointWriteTimeStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusPostgreSqlCheckpointWriteTimeStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getPostgreSqlCheckpointWriteTime(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusPostgreSqlCheckpointWriteTimeStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusPostgreSqlDiskIOUtilizationStats from '../../types/PrometheusPostgreSqlDiskIOUtilizationStats';\n\nexport default function usePrometheusPostgreSqlDiskIOUtilizationStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusPostgreSqlDiskIOUtilizationStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getPostgreSqlDiskIOUtilization(\n uuid,\n host_uuid,\n from,\n to\n );\n\n setStats(\n details.map(\n (d: any) =>\n new PrometheusPostgreSqlDiskIOUtilizationStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusPostgreSqlDiskLatencyStats from '../../types/PrometheusPostgreSqlDiskLatencyStats';\n\nexport default function usePrometheusPostgreSqlDiskLatencyStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusPostgreSqlDiskLatencyStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getPostgreSqlDiskLatency(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusPostgreSqlDiskLatencyStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusPostgreSqlDiskUsageStats from '../../types/PrometheusPostgreSqlDiskUsageStats';\n\nexport default function usePrometheusPostgreSqlDiskUsageStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusPostgreSqlDiskUsageStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getPostgreSqlDiskUsage(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusPostgreSqlDiskUsageStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusPostgreSqlIdleSessionsInTransactionAbortedStats from '../../types/PrometheusPostgreSqlIdleSessionsInTransactionAbortedStats';\n\nexport default function usePrometheusPostgreSqlIdleSessionsInTransactionAbortedStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusPostgreSqlIdleSessionsInTransactionAbortedStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getPostgreSqlIdleSessionsInTransactionAborted(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusPostgreSqlIdleSessionsInTransactionAbortedStats(\n d\n )\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusPostgreSqlIdleSessionsInTransactionStats from '../../types/PrometheusPostgreSqlIdleSessionsInTransactionStats';\n\nexport default function usePrometheusPostgreSqlIdleSessionsInTransactionStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusPostgreSqlIdleSessionsInTransactionStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getPostgreSqlIdleSessionsInTransaction(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusPostgreSqlIdleSessionsInTransactionStats(\n d\n )\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusPostgreSqlIdleSessionsStats from '../../types/PrometheusPostgreSqlIdleSessionsStats';\n\nexport default function usePrometheusPostgreSqlIdleSessionsStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusPostgreSqlIdleSessionsStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getPostgreSqlIdleSessions(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusPostgreSqlIdleSessionsStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusPostgreSqlLockTablesStats from '../../types/PrometheusPostgreSqlLockTablesStats';\n\nexport default function usePrometheusPostgreSqlLockTablesStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusPostgreSqlLockTablesStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getPostgreSqlLockTables(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusPostgreSqlLockTablesStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","export type PrometheusRedisCommandsPerSecStatsBackendApiProps = {\n created: number;\n commands_per_sec: number;\n};\n\nexport default class PrometheusRedisCommandsPerSecStats {\n readonly created: number;\n readonly commandsPerSec: number;\n\n constructor(props: PrometheusRedisCommandsPerSecStatsBackendApiProps) {\n this.created = props.created;\n this.commandsPerSec = props.commands_per_sec;\n }\n}\n","export type PrometheusRedisTotalKeysStatsBackendApiProps = {\n created: number;\n db_keys: number;\n};\n\nexport default class PrometheusRedisTotalKeysStats {\n readonly created: number;\n readonly dbKeys: number;\n\n constructor(props: PrometheusRedisTotalKeysStatsBackendApiProps) {\n this.created = props.created;\n this.dbKeys = props.db_keys;\n }\n}\n","export type PrometheusRedisConnectedClientsStatsBackendApiProps = {\n created: number;\n connected_clients: number;\n};\n\nexport default class PrometheusRedisConnectedClientsStats {\n readonly created: number;\n readonly connectedClients: number;\n\n constructor(props: PrometheusRedisConnectedClientsStatsBackendApiProps) {\n this.created = props.created;\n this.connectedClients = props.connected_clients;\n }\n}\n","export type PrometheusRedisBlockedClientsStatsBackendApiProps = {\n created: number;\n blocked_clients: number;\n};\n\nexport default class PrometheusRedisBlockedClientsStats {\n readonly created: number;\n readonly blockedClients: number;\n\n constructor(props: PrometheusRedisBlockedClientsStatsBackendApiProps) {\n this.created = props.created;\n this.blockedClients = props.blocked_clients;\n }\n}\n","export type PrometheusRedisMemoryUsedStatsBackendApiProps = {\n created: number;\n memory_used: number;\n};\n\nexport default class PrometheusRedisMemoryUsedStats {\n readonly created: number;\n readonly memoryUsed: number;\n\n constructor(props: PrometheusRedisMemoryUsedStatsBackendApiProps) {\n this.created = props.created;\n this.memoryUsed = props.memory_used;\n }\n}\n","export type PrometheusRedisSlaveLagStatsBackendApiProps = {\n created: number;\n connected_slave_lag: number;\n};\n\nexport default class PrometheusRedisSlaveLagStats {\n readonly created: number;\n readonly connectedSlaveLag: number;\n\n constructor(props: PrometheusRedisSlaveLagStatsBackendApiProps) {\n this.created = props.created;\n this.connectedSlaveLag = props.connected_slave_lag;\n }\n}\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusRedisBlockedClientsStats from '../../../types/PrometheusRedisBlockedClientsStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusRedisBlockedClientsStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusRedisBlockedClientsChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusRedisBlockedClientsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusRedisBlockedClientsStats) => {\n return [\n {\n yValue: stat.blockedClients,\n series: 'blocked_clients',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'blockedClients',\n label: 'blocked_clients',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Blocked clients',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusRedisBlockedClientsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusRedisMemoryUsedStats from '../../../types/PrometheusRedisMemoryUsedStats';\nimport numbro from 'numbro';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusRedisMemoryUsedStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusRedisMemoryUsedChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusRedisMemoryUsedChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusRedisMemoryUsedStats) => {\n return [\n {\n yValue: stat.memoryUsed,\n series: 'memory_used',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'memoryUsed',\n label: 'memory_used',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Memory used',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return numbro(parseInt(text, 10)).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 0,\n });\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: numbro(\n parseInt(d?.data?.yValue.toFixed(2), 10)\n ).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 0,\n }),\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusRedisMemoryUsedChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusRedisConnectedClientsStats from '../../../types/PrometheusRedisConnectedClientsStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusRedisConnectedClientsStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusRedisConnectedClientsChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusRedisConnectedClientsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusRedisConnectedClientsStats) => {\n return [\n {\n yValue: stat.connectedClients,\n series: 'connected_clients',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'connectedClients',\n label: 'connected_clients',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Connected clients',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusRedisConnectedClientsChart;\n","import { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusRedisCommandsPerSecStats from '../../../types/PrometheusRedisCommandsPerSecStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusRedisCommandsPerSecStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusRedisCommandsPerSecChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusRedisCommandsPerSecChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusRedisCommandsPerSecStats) => {\n return [\n {\n yValue: stat.commandsPerSec.toFixed(0),\n series: 'commands_per_sec',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'commandsPerSec',\n label: 'commands_per_sec',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Cache22 commands per sec',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string) => `${text}`,\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: `${d?.data?.yValue}`,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusRedisCommandsPerSecChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusRedisTotalKeysStats from '../../../types/PrometheusRedisTotalKeysStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusRedisTotalKeysStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusRedisTotalKeysChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusRedisTotalKeysChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusRedisTotalKeysStats) => {\n return [\n {\n yValue: stat.dbKeys,\n series: 'db_keys',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'dbKeys',\n label: 'db_keys',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Total keys in Cache22',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusRedisTotalKeysChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusRedisSlaveLagStats from '../../../types/PrometheusRedisSlaveLagStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusRedisSlaveLagStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusRedisSlaveLagChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusRedisSlaveLagChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusRedisSlaveLagStats) => {\n return [\n {\n yValue: stat.connectedSlaveLag,\n series: 'connected_slave_lag',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'connectedSlaveLag',\n label: 'connected_slave_lag',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Slave lag',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string) => `${text}s`,\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: `${d?.data?.yValue}s`,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusRedisSlaveLagChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport styles from './RedisDashboard.module.less';\nimport { Col, Row, Spin } from 'antd';\nimport usePrometheusRedisCommandsPerSecStats from '../../../core/hooks/usePrometheusRedisCommandsPerSecStats';\nimport usePrometheusRedisTotalKeysStats from '../../../core/hooks/usePrometheusRedisTotalKeysStats';\nimport usePrometheusRedisConnectedClientsStats from '../../../core/hooks/usePrometheusRedisConnectedClientsStats';\nimport usePrometheusRedisBlockedClientsStats from '../../../core/hooks/usePrometheusRedisBlockedClientsStats';\nimport usePrometheusRedisMemoryUsedStats from '../../../core/hooks/usePrometheusRedisMemoryUsedStats';\nimport usePrometheusRedisSlaveLagStats from '../../../core/hooks/usePrometheusRedisSlaveLagStats';\nimport PrometheusRedisBlockedClientsChart from '../../ccx/charts/PrometheusRedisBlockedClientsChart';\nimport PrometheusRedisMemoryUsedChart from '../../ccx/charts/PrometheusRedisMemoryUsedChart';\nimport PrometheusRedisConnectedClientsChart from '../../ccx/charts/PrometheusRedisConnectedClientsChart';\nimport PrometheusRedisCommandsPerSecChart from '../../ccx/charts/PrometheusRedisCommandsPerSecChart';\nimport PrometheusRedisTotalKeysChart from '../../ccx/charts/PrometheusRedisTotalKeysChart';\nimport PrometheusRedisSlaveLagChart from '../../ccx/charts/PrometheusRedisSlaveLagChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CloudInstance from '../../../types/CloudInstance';\n\ninterface Props extends CcxComponentProps {\n uuid: string;\n host_uuid: string;\n port: number;\n from?: string;\n to?: string;\n interval: number;\n node?: CloudInstance;\n hidden?: boolean;\n displaySummary?: boolean;\n onLoading?: Function;\n}\n\nfunction RedisDashboard({\n uuid,\n host_uuid,\n port,\n from,\n to,\n interval,\n node,\n hidden,\n displaySummary,\n onLoading,\n testId = 'RedisDashboard',\n}: Props): ReactElement {\n const {\n stats: commandsPerSecStats,\n refresh: commandsPerSecStatsRefresh,\n loading: commandsPerSecStatsLoading,\n } = usePrometheusRedisCommandsPerSecStats(uuid, host_uuid, from, to);\n\n const {\n stats: totalKeysStats,\n refresh: totalKeysStatsRefresh,\n loading: totalKeysStatsLoading,\n } = usePrometheusRedisTotalKeysStats(uuid, host_uuid, from, to);\n\n const {\n stats: connectedClientsStats,\n refresh: connectedClientsStatsRefresh,\n loading: connectedClientsStatsLoading,\n } = usePrometheusRedisConnectedClientsStats(uuid, host_uuid, from, to);\n\n const {\n stats: blockedClientsStats,\n refresh: blockedClientsStatsRefresh,\n loading: blockedClientsStatsLoading,\n } = usePrometheusRedisBlockedClientsStats(uuid, host_uuid, from, to);\n\n const {\n stats: memoryUsedStats,\n refresh: memoryUsedStatsRefresh,\n loading: memoryUsedStatsLoading,\n } = usePrometheusRedisMemoryUsedStats(uuid, host_uuid, from, to);\n\n const {\n stats: slaveLagStats,\n refresh: slaveLagStatsRefresh,\n loading: slaveLagStatsLoading,\n } = usePrometheusRedisSlaveLagStats(uuid, host_uuid, from, to);\n\n const [commandsPerSecStatsInterval, setCommandsPerSecStatsInterval] =\n useState(undefined);\n const [totalKeysStatsInterval, setTotalKeysStatsInterval] = useState<\n number | undefined\n >(undefined);\n const [connectedClientsStatsInterval, setConnectedClientsStatsInterval] =\n useState(undefined);\n const [blockedClientsStatsInterval, setBlockedClientsStatsInterval] =\n useState(undefined);\n const [memoryUsedStatsInterval, setMemoryUsedStatsInterval] = useState<\n number | undefined\n >(undefined);\n const [slaveLagStatsInterval, setSlaveLagStatsInterval] = useState<\n number | undefined\n >(undefined);\n\n const [refreshInterval, setRefreshInterval] = useState(interval);\n\n useEffect(() => {\n let interval: any;\n if (commandsPerSecStats && refreshInterval > 0) {\n interval = setInterval(() => {\n commandsPerSecStatsRefresh();\n }, refreshInterval);\n setCommandsPerSecStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [commandsPerSecStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (totalKeysStats && refreshInterval > 0) {\n interval = setInterval(() => {\n totalKeysStatsRefresh();\n }, refreshInterval);\n setTotalKeysStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [totalKeysStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (connectedClientsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n connectedClientsStatsRefresh();\n }, refreshInterval);\n setConnectedClientsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [connectedClientsStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (blockedClientsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n blockedClientsStatsRefresh();\n }, refreshInterval);\n setBlockedClientsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [blockedClientsStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (memoryUsedStats && refreshInterval > 0) {\n interval = setInterval(() => {\n memoryUsedStatsRefresh();\n }, refreshInterval);\n setMemoryUsedStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [memoryUsedStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (slaveLagStats && refreshInterval > 0) {\n interval = setInterval(() => {\n slaveLagStatsRefresh();\n }, refreshInterval);\n setSlaveLagStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [slaveLagStats, refreshInterval]);\n\n useEffect(() => {\n if (interval === 0) {\n // when interval is 0, we must pause the refresh (clear existing intervals)\n clearInterval(commandsPerSecStatsInterval);\n clearInterval(totalKeysStatsInterval);\n clearInterval(connectedClientsStatsInterval);\n clearInterval(blockedClientsStatsInterval);\n clearInterval(memoryUsedStatsInterval);\n clearInterval(slaveLagStatsInterval);\n setCommandsPerSecStatsInterval(0);\n setTotalKeysStatsInterval(0);\n setConnectedClientsStatsInterval(0);\n setBlockedClientsStatsInterval(0);\n setMemoryUsedStatsInterval(0);\n setSlaveLagStatsInterval(0);\n }\n setRefreshInterval(interval);\n }, [interval]);\n\n useEffect(() => {\n if (hidden) {\n // clear interval to stop updating data if the tab is not active (charts are not visible)\n clearInterval(commandsPerSecStatsInterval);\n clearInterval(totalKeysStatsInterval);\n clearInterval(connectedClientsStatsInterval);\n clearInterval(blockedClientsStatsInterval);\n clearInterval(memoryUsedStatsInterval);\n clearInterval(slaveLagStatsInterval);\n setCommandsPerSecStatsInterval(0);\n setTotalKeysStatsInterval(0);\n setConnectedClientsStatsInterval(0);\n setBlockedClientsStatsInterval(0);\n setMemoryUsedStatsInterval(0);\n setSlaveLagStatsInterval(0);\n } else if (\n commandsPerSecStatsInterval === 0 ||\n totalKeysStatsInterval === 0 ||\n connectedClientsStatsInterval === 0 ||\n blockedClientsStatsInterval === 0 ||\n memoryUsedStatsInterval === 0 ||\n slaveLagStatsInterval === 0\n ) {\n // force refresh if the interval is 0, otherwise, the interval will refresh data soon\n // interval is undefined on the first load\n // interval will be 0 when paused or tab is hidden\n commandsPerSecStatsRefresh();\n totalKeysStatsRefresh();\n connectedClientsStatsRefresh();\n blockedClientsStatsRefresh();\n memoryUsedStatsRefresh();\n slaveLagStatsRefresh();\n }\n }, [hidden]);\n\n useEffect(() => {\n if (\n commandsPerSecStatsLoading ||\n totalKeysStatsLoading ||\n connectedClientsStatsLoading ||\n blockedClientsStatsLoading ||\n memoryUsedStatsLoading ||\n slaveLagStatsLoading\n ) {\n onLoading && onLoading(true);\n } else {\n onLoading && onLoading(false);\n }\n }, [\n commandsPerSecStatsLoading,\n totalKeysStatsLoading,\n connectedClientsStatsLoading,\n blockedClientsStatsLoading,\n memoryUsedStatsLoading,\n slaveLagStatsLoading,\n ]);\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {node?.isMaster() && (\n \n \n \n )}\n \n
\n );\n}\n\nexport default RedisDashboard;\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusRedisCommandsPerSecStats from '../../types/PrometheusRedisCommandsPerSecStats';\n\nexport default function usePrometheusRedisCommandsPerSecStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusRedisCommandsPerSecStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getRedisCommandsPerSec(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusRedisCommandsPerSecStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusRedisTotalKeysStats from '../../types/PrometheusRedisTotalKeysStats';\n\nexport default function usePrometheusRedisTotalKeysStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusRedisTotalKeysStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details = await PrometheusStatService.getRedisTotalKeys(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusRedisTotalKeysStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setLoading(false);\n setUpdating(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusRedisConnectedClientsStats from '../../types/PrometheusRedisConnectedClientsStats';\n\nexport default function usePrometheusRedisConnectedClientsStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusRedisConnectedClientsStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getRedisConnectedClients(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusRedisConnectedClientsStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusRedisBlockedClientsStats from '../../types/PrometheusRedisBlockedClientsStats';\n\nexport default function usePrometheusRedisBlockedClientsStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusRedisBlockedClientsStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getRedisBlockedClients(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusRedisBlockedClientsStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusRedisMemoryUsedStats from '../../types/PrometheusRedisMemoryUsedStats';\n\nexport default function usePrometheusRedisMemoryUsedStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusRedisMemoryUsedStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details = await PrometheusStatService.getRedisMemoryUsed(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusRedisMemoryUsedStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusRedisSlaveLagStats from '../../types/PrometheusRedisSlaveLagStats';\n\nexport default function usePrometheusRedisSlaveLagStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusRedisSlaveLagStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details = await PrometheusStatService.getRedisSlaveLag(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map((d: any) => new PrometheusRedisSlaveLagStats(d))\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusMssqlQPSStats from '../../../types/PrometheusMssqlQPSStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusMssqlQPSStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusMssqlQueriesChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusMssqlQueriesChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map((stat: PrometheusMssqlQPSStats) => {\n return [\n {\n yValue: stat.transactions,\n series: 'transactions',\n xValue: new FriendlyTimestamp(stat.created).getDate(),\n },\n ];\n });\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'transactions',\n label: 'transactions',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Transactions',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusMssqlQueriesChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusMssqlHandlerTransactionsStats from '../../../types/PrometheusMssqlHandlerTransactionsStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusMssqlHandlerTransactionsStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusMssqlHandlerTransactionsChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusMssqlHandlerTransactionsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusMssqlHandlerTransactionsStats) => {\n return [\n {\n yValue: stat.background,\n series: 'background',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.dormant,\n series: 'dormant',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.runnable,\n series: 'runnable',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.sleeping,\n series: 'sleeping',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.done,\n series: 'done',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.running,\n series: 'running',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'background',\n label: 'background',\n },\n {\n value: 'dormant',\n label: 'dormant',\n },\n {\n value: 'runnable',\n label: 'runnable',\n },\n {\n value: 'sleeping',\n label: 'sleeping',\n },\n {\n value: 'done',\n label: 'done',\n },\n {\n value: 'running',\n label: 'running',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Process stats',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusMssqlHandlerTransactionsChart;\n","export type PrometheusMssqlHandlerTransactionsStatsBackendApiProps = {\n created: number;\n background: number;\n dormant: number;\n runnable: number;\n sleeping: number;\n done: number;\n running: number;\n};\n\nexport default class PrometheusMssqlHandlerTransactionsStats {\n readonly created: number;\n readonly background: number;\n readonly dormant: number;\n readonly runnable: number;\n readonly sleeping: number;\n readonly done: number;\n readonly running: number;\n\n constructor(props: PrometheusMssqlHandlerTransactionsStatsBackendApiProps) {\n this.created = props.created;\n this.background = props.background;\n this.dormant = props.dormant;\n this.runnable = props.runnable;\n this.sleeping = props.sleeping;\n this.done = props.done;\n this.running = props.running;\n }\n}\n","export type PrometheusMssqlQPSStatsBackendApiProps = {\n created: number;\n QUERIES: number;\n};\n\nexport default class PrometheusMssqlQPSStats {\n readonly created: number;\n readonly transactions: number;\n\n constructor(props: PrometheusMssqlQPSStatsBackendApiProps) {\n this.created = props.created;\n this.transactions = props.QUERIES;\n }\n}\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport styles from './MysqlDbDashboard.module.less';\nimport { Col, Row } from 'antd';\nimport usePrometheusMySqlQueriesStats from '../../../core/hooks/usePrometheusMySqlQueriesStats';\nimport PrometheusMssqlQueriesChart from '../../ccx/charts/PrometheusMssqlQueriesChart';\nimport PrometheusMssqlHandlerTransactionsChart from '../../ccx/charts/PrometheusMssqlHandlerTransactionsChart';\nimport usePrometheusMssqlHandlerTransactionsStats from '../../../core/hooks/usePrometheusMssqlProcessesStats';\nimport usePrometheusMssqlQPSStats from '../../../core/hooks/usePrometheusMssqlQPSStats';\n\ntype MysqlDbDashboardProps = {\n uuid: string;\n host_uuid: string;\n port: number;\n from?: string;\n to?: string;\n interval: number;\n hidden?: boolean;\n displaySummary?: boolean;\n onLoading?: Function;\n};\n\nfunction MysqlDbDashboard({\n uuid,\n host_uuid,\n port,\n from,\n to,\n interval,\n hidden,\n displaySummary,\n onLoading,\n}: MysqlDbDashboardProps): ReactElement {\n const {\n stats: queriesStats,\n refresh: queriesStatsRefresh,\n loading: queriesStatsLoading,\n } = usePrometheusMssqlQPSStats(uuid, host_uuid, from, to);\n\n const {\n stats: handlerTransactionsStats,\n refresh: handlerTransactionsStatsRefresh,\n loading: handlerTransactionsStatsLoading,\n } = usePrometheusMssqlHandlerTransactionsStats(uuid, host_uuid, from, to);\n\n const [queriesStatsInterval, setQueriesStatsInterval] = useState<\n number | undefined\n >(undefined);\n\n const [\n handlerTransactionsStatsInterval,\n setHandlerTransactionsStatsInterval,\n ] = useState(undefined);\n\n const [refreshInterval, setRefreshInterval] = useState(interval);\n\n useEffect(() => {\n let interval: any;\n if (queriesStats && refreshInterval > 0) {\n interval = setInterval(() => {\n queriesStatsRefresh();\n }, refreshInterval);\n setQueriesStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [queriesStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (handlerTransactionsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n handlerTransactionsStatsRefresh();\n }, refreshInterval);\n setHandlerTransactionsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [handlerTransactionsStats, refreshInterval]);\n\n useEffect(() => {\n if (interval === 0) {\n // when interval is 0, we must pause the refresh (clear existing intervals)\n clearInterval(queriesStatsInterval);\n clearInterval(handlerTransactionsStatsInterval);\n setQueriesStatsInterval(0);\n setHandlerTransactionsStatsInterval(0);\n }\n setRefreshInterval(interval);\n }, [interval]);\n\n useEffect(() => {\n if (hidden) {\n // clear interval to stop updating data if the tab is not active (charts are not visible)\n clearInterval(queriesStatsInterval);\n clearInterval(handlerTransactionsStatsInterval);\n setQueriesStatsInterval(0);\n setHandlerTransactionsStatsInterval(0);\n } else if (\n queriesStatsInterval === 0 ||\n handlerTransactionsStatsInterval === 0\n ) {\n // force refresh if the interval is 0, otherwise, the interval will refresh data soon\n // interval is undefined on the first load\n // interval will be 0 when paused or tab is hidden\n queriesStatsRefresh();\n handlerTransactionsStatsRefresh();\n }\n }, [hidden]);\n\n useEffect(() => {\n if (queriesStatsLoading || handlerTransactionsStatsLoading) {\n onLoading && onLoading(true);\n } else {\n onLoading && onLoading(false);\n }\n }, [queriesStatsLoading, handlerTransactionsStatsLoading]);\n\n return (\n
\n \n \n \n \n \n \n \n \n
\n );\n}\n\nexport default MysqlDbDashboard;\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusMssqlQPSStats from '../../types/PrometheusMssqlQPSStats';\n\nexport default function usePrometheusMssqlQPSStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState(\n undefined\n );\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details = await PrometheusStatService.getMssqlQPS(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map((d: any) => new PrometheusMssqlQPSStats(d))\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusMssqlHandlerTransactionsStats from '../../types/PrometheusMssqlHandlerTransactionsStats';\n\nexport default function usePrometheusMssqlHandlerTransactionsStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusMssqlHandlerTransactionsStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details = await PrometheusStatService.getMssqlProcesses(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusMssqlHandlerTransactionsStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { ReactElement, useEffect, useState } from 'react';\nimport styles from './MysqlDbDashboard.module.less';\nimport { Col, Row } from 'antd';\nimport usePrometheusMySqlQueriesStats from '../../../core/hooks/usePrometheusMySqlQueriesStats';\nimport PrometheusMySqlQueriesChart from '../../ccx/charts/PrometheusMySqlQueriesChart';\nimport PrometheusMySqlTemporaryTablesChart from '../../ccx/charts/PrometheusMySqlTemporaryTablesChart';\nimport PrometheusMySqlSortingChart from '../../ccx/charts/PrometheusMySqlSortingChart';\nimport PrometheusMySqlAbortedConnectionsChart from '../../ccx/charts/PrometheusMySqlAbortedConnectionsChart';\nimport usePrometheusMySqlAbortedConnectionsStats from '../../../core/hooks/usePrometheusMySqlAbortedConnectionsStats';\nimport usePrometheusMySqlSortingStats from '../../../core/hooks/usePrometheusMySqlSortingStats';\nimport usePrometheusMySqlTemporaryTablesStats from '../../../core/hooks/usePrometheusMySqlTemporaryTablesStats';\nimport PrometheusMySqlDbConnectionsChart from '../../ccx/charts/PrometheusMySqlDbConnectionsChart';\nimport usePrometheusMySqlDbConnectionsStats from '../../../core/hooks/usePrometheusMySqlDbConnectionsStats';\nimport Deployment from '../../../types/Deployment';\n\nexport type AllMysqlDbDashboardProps = {\n readonly uuid: string;\n readonly hostUUIDs: string[];\n readonly ports: number[];\n readonly from?: string;\n readonly to?: string;\n readonly interval: number;\n readonly hidden?: boolean;\n readonly displaySummary?: boolean;\n readonly onLoading?: Function;\n readonly deployment?: Deployment;\n};\n\nfunction AllMySqlDbDashboard({\n uuid,\n hostUUIDs,\n ports,\n from,\n to,\n interval,\n hidden,\n displaySummary,\n onLoading,\n deployment,\n}: AllMysqlDbDashboardProps): ReactElement {\n const {\n stats: queriesStats,\n refresh: queriesStatsRefresh,\n loading: queriesStatsLoading,\n } = usePrometheusMySqlQueriesStats(uuid, '', from, to);\n\n const {\n stats: abortedConnectionsStats,\n refresh: abortedConnectionsStatsRefresh,\n loading: abortedConnectionsStatsLoading,\n } = usePrometheusMySqlAbortedConnectionsStats(uuid, '', from, to);\n\n const {\n stats: sortingStats,\n refresh: sortingStatsRefresh,\n loading: sortingStatsLoading,\n } = usePrometheusMySqlSortingStats(uuid, '', from, to);\n\n const {\n stats: temporaryTablesStats,\n refresh: temporaryTablesStatsRefresh,\n loading: temporaryTablesStatsLoading,\n } = usePrometheusMySqlTemporaryTablesStats(uuid, '', from, to);\n\n const {\n stats: connectionsStats,\n refresh: connectionsStatsRefresh,\n loading: connectionsStatsLoading,\n } = usePrometheusMySqlDbConnectionsStats(uuid, '', from, to);\n\n const [queriesStatsInterval, setQueriesStatsInterval] = useState<\n number | undefined\n >(undefined);\n const [\n abortedConnectionsStatsInterval,\n setAbortedConnectionsStatsInterval,\n ] = useState(undefined);\n const [connectionsStatsInterval, setConnectionsStatsInterval] = useState<\n number | undefined\n >(undefined);\n const [sortingStatsInterval, setSortingStatsInterval] = useState<\n number | undefined\n >(undefined);\n const [temporaryTablesStatsInterval, setTemporaryTablesStatsInterval] =\n useState(undefined);\n\n const [refreshInterval, setRefreshInterval] = useState(interval);\n\n useEffect(() => {\n let interval: any;\n if (queriesStats && refreshInterval > 0) {\n interval = setInterval(() => {\n queriesStatsRefresh();\n }, refreshInterval);\n setQueriesStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [queriesStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (abortedConnectionsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n abortedConnectionsStatsRefresh();\n }, refreshInterval);\n setAbortedConnectionsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [abortedConnectionsStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (sortingStats && refreshInterval > 0) {\n interval = setInterval(() => {\n sortingStatsRefresh();\n }, refreshInterval);\n setSortingStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [sortingStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (temporaryTablesStats && refreshInterval > 0) {\n interval = setInterval(() => {\n temporaryTablesStatsRefresh();\n }, refreshInterval);\n setTemporaryTablesStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [temporaryTablesStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (connectionsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n connectionsStatsRefresh();\n }, refreshInterval);\n setConnectionsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [connectionsStats, refreshInterval]);\n\n useEffect(() => {\n if (interval === 0) {\n // when interval is 0, we must pause the refresh (clear existing intervals)\n clearInterval(queriesStatsInterval);\n clearInterval(abortedConnectionsStatsInterval);\n clearInterval(connectionsStatsInterval);\n clearInterval(sortingStatsInterval);\n clearInterval(temporaryTablesStatsInterval);\n setQueriesStatsInterval(0);\n setAbortedConnectionsStatsInterval(0);\n setConnectionsStatsInterval(0);\n setSortingStatsInterval(0);\n setTemporaryTablesStatsInterval(0);\n }\n setRefreshInterval(interval);\n }, [interval]);\n\n useEffect(() => {\n if (hidden) {\n // clear interval to stop updating data if the tab is not active (charts are not visible)\n clearInterval(queriesStatsInterval);\n clearInterval(abortedConnectionsStatsInterval);\n clearInterval(connectionsStatsInterval);\n clearInterval(sortingStatsInterval);\n clearInterval(temporaryTablesStatsInterval);\n setQueriesStatsInterval(0);\n setAbortedConnectionsStatsInterval(0);\n setConnectionsStatsInterval(0);\n setSortingStatsInterval(0);\n setTemporaryTablesStatsInterval(0);\n } else if (\n queriesStatsInterval === 0 ||\n abortedConnectionsStatsInterval === 0 ||\n connectionsStatsInterval === 0 ||\n sortingStatsInterval === 0 ||\n temporaryTablesStatsInterval === 0\n ) {\n // force refresh if the interval is 0, otherwise, the interval will refresh data soon\n // interval is undefined on the first load\n // interval will be 0 when paused or tab is hidden\n queriesStatsRefresh();\n abortedConnectionsStatsRefresh();\n sortingStatsRefresh();\n temporaryTablesStatsRefresh();\n connectionsStatsRefresh();\n }\n }, [hidden]);\n\n useEffect(() => {\n if (\n queriesStatsLoading ||\n connectionsStatsLoading ||\n abortedConnectionsStatsLoading ||\n sortingStatsLoading ||\n temporaryTablesStatsLoading\n ) {\n onLoading && onLoading(true);\n } else {\n onLoading && onLoading(false);\n }\n }, [\n queriesStatsLoading,\n abortedConnectionsStatsLoading,\n sortingStatsLoading,\n temporaryTablesStatsLoading,\n connectionsStatsLoading,\n ]);\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n );\n}\n\nexport default AllMySqlDbDashboard;\n","import { ReactElement, useEffect, useState } from 'react';\nimport styles from './PostgreSqlDbDashboard.module.less';\nimport { Col, Row } from 'antd';\nimport usePrometheusPostgreSqlActiveSessionsStats from '../../../core/hooks/usePrometheusPostgreSqlActiveSessionsStats';\nimport usePrometheusPostgreSqlDeleteStats from '../../../core/hooks/usePrometheusPostgreSqlDeleteStats';\nimport usePrometheusPostgreSqlInsertStats from '../../../core/hooks/usePrometheusPostgreSqlInsertStats';\nimport usePrometheusPostgreSqlSelectFetchedStats from '../../../core/hooks/usePrometheusPostgreSqlSelectFetchedStats';\nimport usePrometheusPostgreSqlSelectReturnedStats from '../../../core/hooks/usePrometheusPostgreSqlSelectReturnedStats';\nimport usePrometheusPostgreSqlUpdateStats from '../../../core/hooks/usePrometheusPostgreSqlUpdateStats';\nimport PrometheusPostgreSqlSelectFetchedChart from '../../ccx/charts/PrometheusPostgreSqlSelectFetchedChart';\nimport PrometheusPostgreSqlInsertChart from '../../ccx/charts/PrometheusPostgreSqlInsertChart';\nimport PrometheusPostgreSqlUpdateChart from '../../ccx/charts/PrometheusPostgreSqlUpdateChart';\nimport PrometheusPostgreSqlDeleteChart from '../../ccx/charts/PrometheusPostgreSqlDeleteChart';\nimport PrometheusPostgreSqlSelectReturnedChart from '../../ccx/charts/PrometheusPostgreSqlSelectReturnedChart';\nimport PrometheusPostgreSqlActiveSessionsChart from '../../ccx/charts/PrometheusPostgreSqlActiveSessionsChart';\nimport Deployment from '../../../types/Deployment';\n\ntype PostgreSqlDbDashboardProps = {\n uuid: string;\n port: number;\n from?: string;\n to?: string;\n interval: number;\n hidden?: boolean;\n displaySummary?: boolean;\n onLoading?: Function;\n hostUUIDs?: string[];\n deployment?: Deployment;\n};\n\nfunction PostgreSqlDbDashboardSummary({\n uuid,\n port,\n from,\n to,\n interval,\n hidden,\n displaySummary,\n onLoading,\n hostUUIDs,\n deployment,\n}: PostgreSqlDbDashboardProps): ReactElement {\n const {\n stats: activeSessionsStats,\n refresh: activeSessionsStatsRefresh,\n loading: activeSessionsStatsLoading,\n } = usePrometheusPostgreSqlActiveSessionsStats(uuid, '', from, to);\n\n const {\n stats: deleteStats,\n refresh: deleteStatsRefresh,\n loading: deleteStatsLoading,\n } = usePrometheusPostgreSqlDeleteStats(uuid, '', from, to);\n\n const {\n stats: insertStats,\n refresh: insertStatsRefresh,\n loading: insertStatsLoading,\n } = usePrometheusPostgreSqlInsertStats(uuid, '', from, to);\n\n const {\n stats: selectFetchedStats,\n refresh: selectFetchedStatsRefresh,\n loading: selectFetchedStatsLoading,\n } = usePrometheusPostgreSqlSelectFetchedStats(uuid, '', from, to);\n\n const {\n stats: selectReturnedStats,\n refresh: selectReturnedStatsRefresh,\n loading: selectReturnedStatsLoading,\n } = usePrometheusPostgreSqlSelectReturnedStats(uuid, '', from, to);\n\n const {\n stats: updateStats,\n refresh: updateStatsRefresh,\n loading: updateStatsLoading,\n } = usePrometheusPostgreSqlUpdateStats(uuid, '', from, to);\n\n const [activeSessionsStatsInterval, setActiveSessionsStatsInterval] =\n useState(undefined);\n const [deleteStatsInterval, setDeleteStatsInterval] = useState<\n number | undefined\n >(undefined);\n const [insertStatsInterval, setInsertStatsInterval] = useState<\n number | undefined\n >(undefined);\n const [selectFetchedStatsInterval, setSelectFetchedStatsInterval] =\n useState(undefined);\n const [selectReturnedStatsInterval, setSelectReturnedStatsInterval] =\n useState(undefined);\n const [updateStatsInterval, setUpdateStatsInterval] = useState<\n number | undefined\n >(undefined);\n\n const [refreshInterval, setRefreshInterval] = useState(interval);\n\n useEffect(() => {\n let interval: any;\n if (activeSessionsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n activeSessionsStatsRefresh();\n }, refreshInterval);\n setActiveSessionsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [activeSessionsStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (deleteStats && refreshInterval > 0) {\n interval = setInterval(() => {\n deleteStatsRefresh();\n }, refreshInterval);\n setDeleteStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [deleteStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (insertStats && refreshInterval > 0) {\n interval = setInterval(() => {\n insertStatsRefresh();\n }, refreshInterval);\n setInsertStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [insertStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (selectFetchedStats && refreshInterval > 0) {\n interval = setInterval(() => {\n selectFetchedStatsRefresh();\n }, refreshInterval);\n setSelectFetchedStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [selectFetchedStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (selectReturnedStats && refreshInterval > 0) {\n interval = setInterval(() => {\n selectReturnedStatsRefresh();\n }, refreshInterval);\n setSelectReturnedStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [selectReturnedStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (updateStats && refreshInterval > 0) {\n interval = setInterval(() => {\n updateStatsRefresh();\n }, refreshInterval);\n setUpdateStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [updateStats, refreshInterval]);\n\n useEffect(() => {\n if (interval === 0) {\n // when interval is 0, we must pause the refresh (clear existing intervals)\n clearInterval(activeSessionsStatsInterval);\n clearInterval(deleteStatsInterval);\n clearInterval(insertStatsInterval);\n clearInterval(selectFetchedStatsInterval);\n clearInterval(selectReturnedStatsInterval);\n clearInterval(updateStatsInterval);\n setActiveSessionsStatsInterval(0);\n setDeleteStatsInterval(0);\n setInsertStatsInterval(0);\n setSelectFetchedStatsInterval(0);\n setSelectReturnedStatsInterval(0);\n setUpdateStatsInterval(0);\n }\n setRefreshInterval(interval);\n }, [interval]);\n\n useEffect(() => {\n if (hidden) {\n // clear interval to stop updating data if the tab is not active (charts are not visible)\n clearInterval(activeSessionsStatsInterval);\n clearInterval(deleteStatsInterval);\n clearInterval(insertStatsInterval);\n clearInterval(selectFetchedStatsInterval);\n clearInterval(selectReturnedStatsInterval);\n clearInterval(updateStatsInterval);\n setActiveSessionsStatsInterval(0);\n setDeleteStatsInterval(0);\n setInsertStatsInterval(0);\n setSelectFetchedStatsInterval(0);\n setSelectReturnedStatsInterval(0);\n setUpdateStatsInterval(0);\n } else if (\n activeSessionsStatsInterval === 0 ||\n deleteStatsInterval === 0 ||\n insertStatsInterval === 0 ||\n selectFetchedStatsInterval === 0 ||\n selectReturnedStatsInterval === 0 ||\n updateStatsInterval === 0\n ) {\n // force refresh if the interval is 0, otherwise, the interval will refresh data soon\n // interval is undefined on the first load\n // interval will be 0 when paused or tab is hidden\n activeSessionsStatsRefresh();\n deleteStatsRefresh();\n insertStatsRefresh();\n selectFetchedStatsRefresh();\n selectReturnedStatsRefresh();\n updateStatsRefresh();\n }\n }, [hidden]);\n\n useEffect(() => {\n if (\n activeSessionsStatsLoading ||\n deleteStatsLoading ||\n insertStatsLoading ||\n selectFetchedStatsLoading ||\n selectReturnedStatsLoading ||\n updateStatsLoading\n ) {\n onLoading && onLoading(true);\n } else {\n onLoading && onLoading(false);\n }\n }, [\n activeSessionsStatsLoading,\n deleteStatsLoading,\n insertStatsLoading,\n selectFetchedStatsLoading,\n selectReturnedStatsLoading,\n updateStatsLoading,\n ]);\n\n return (\n \n \n \n \n \n\n \n \n \n\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n );\n}\n\nexport default PostgreSqlDbDashboardSummary;\n","import { ReactElement } from 'react';\nimport styles from './DbDashboard.module.less';\nimport CloudInstance from '../../../types/CloudInstance';\nimport MysqlDbDashboard from './MysqlDbDashboard';\nimport PostgreSqlDbDashboard from './PostgreSqlDbDashboard';\nimport RedisDashboard from './RedisDashboard';\nimport MssqlDbDashboard from './MssqlDbDashboard';\nimport MySqlDbDashboardSummary from './MysqlDbDashboardSummary';\nimport PostgreSqlDbDashboardSummary from './PostgresSqlDbDashboardSummary';\nimport Deployment from '../../../types/Deployment';\n\ntype DbDashboardProps = {\n uuid: string;\n host_uuid: string;\n port: number;\n from?: string;\n to?: string;\n interval: number;\n node?: CloudInstance;\n hidden?: boolean;\n displaySummary?: boolean;\n onLoading?: Function;\n hostUUIDs: string[] | undefined;\n ports: number[] | undefined;\n deployment?: Deployment;\n};\n\nfunction DbDashboard({\n uuid,\n host_uuid,\n port,\n from,\n to,\n interval,\n node,\n hidden,\n displaySummary,\n onLoading,\n hostUUIDs = [],\n ports = [],\n deployment,\n}: DbDashboardProps): ReactElement {\n return (\n
\n {JSON.stringify(node) !== '{}'}\n {node?.isPostgreSql() &&\n deployment &&\n (hostUUIDs instanceof Array && hostUUIDs.length > 0 ? (\n
\n );\n}\n\nexport default DbDashboard;\n","export type PrometheusProxySqlActiveTransactionsStatsBackendApiProps = {\n created: number;\n active_transactions: number;\n};\n\nexport default class PrometheusProxySqlActiveTransactionsStats {\n readonly created: number;\n readonly activeTransactions: number;\n\n constructor(\n props: PrometheusProxySqlActiveTransactionsStatsBackendApiProps\n ) {\n this.created = props.created;\n this.activeTransactions = props.active_transactions;\n }\n}\n","export type PrometheusProxySqlClientConnectionsStatsBackendApiProps = {\n created: number;\n client_connections_aborted: number;\n client_connections_connected: number;\n client_connections_created: number;\n client_connections_non_idle: number;\n};\n\nexport default class PrometheusProxySqlClientConnectionsStats {\n readonly created: number;\n readonly clientConnectionsAborted: number;\n readonly clientConnectionsConnected: number;\n readonly clientConnectionsCreated: number;\n readonly clientConnectionsNonIdle: number;\n\n constructor(\n props: PrometheusProxySqlClientConnectionsStatsBackendApiProps\n ) {\n this.created = props.created;\n this.clientConnectionsAborted = props.client_connections_aborted;\n this.clientConnectionsConnected = props.client_connections_connected;\n this.clientConnectionsCreated = props.client_connections_created;\n this.clientConnectionsNonIdle = props.client_connections_non_idle;\n }\n}\n","export type PrometheusProxySqlDataReceivedHostgroupDistributionStatsBackendApiProps =\n {\n created: number;\n data_recv: number;\n };\n\nexport default class PrometheusProxySqlDataReceivedHostgroupDistributionStats {\n readonly created: number;\n readonly dataRecv: number;\n\n constructor(\n props: PrometheusProxySqlDataReceivedHostgroupDistributionStatsBackendApiProps\n ) {\n this.created = props.created;\n this.dataRecv = props.data_recv;\n }\n}\n","export type PrometheusProxySqlDataSentHostgroupDistributionStatsBackendApiProps =\n {\n created: number;\n data_sent: number;\n };\n\nexport default class PrometheusProxySqlDataSentHostgroupDistributionStats {\n readonly created: number;\n readonly dataSent: number;\n\n constructor(\n props: PrometheusProxySqlDataSentHostgroupDistributionStatsBackendApiProps\n ) {\n this.created = props.created;\n this.dataSent = props.data_sent;\n }\n}\n","export type PrometheusProxySqlLatencyHostgroupDistributionStatsBackendApiProps =\n {\n created: number;\n latency_us: number;\n };\n\nexport default class PrometheusProxySqlLatencyHostgroupDistributionStats {\n readonly created: number;\n readonly latencyUs: number;\n\n constructor(\n props: PrometheusProxySqlLatencyHostgroupDistributionStatsBackendApiProps\n ) {\n this.created = props.created;\n this.latencyUs = props.latency_us;\n }\n}\n","export type PrometheusProxySqlMemoryUtilizationStatsBackendApiProps = {\n created: number;\n sqlite3_memory_bytes: number;\n connpool_memory_bytes: number;\n mysql_backend_buffers_bytes: number;\n mysql_frontend_buffers_bytes: number;\n mysql_session_internal_bytes: number;\n};\n\nexport default class PrometheusProxySqlMemoryUtilizationStats {\n readonly created: number;\n readonly sqlite3MemoryBytes: number;\n readonly connpoolMemoryBytes: number;\n readonly mysqlBackendBuffersBytes: number;\n readonly mysqlFrontendBuffersBytes: number;\n readonly mysqlSessionInternalBytes: number;\n\n constructor(\n props: PrometheusProxySqlMemoryUtilizationStatsBackendApiProps\n ) {\n this.created = props.created;\n this.sqlite3MemoryBytes = props.sqlite3_memory_bytes;\n this.connpoolMemoryBytes = props.connpool_memory_bytes;\n this.mysqlBackendBuffersBytes = props.mysql_backend_buffers_bytes;\n this.mysqlFrontendBuffersBytes = props.mysql_frontend_buffers_bytes;\n this.mysqlSessionInternalBytes = props.mysql_session_internal_bytes;\n }\n}\n","export type PrometheusProxySqlQueriesBackendStatsBackendApiProps = {\n created: number;\n queries_backends_bytes_sent: number;\n queries_backends_bytes_recv: number;\n};\n\nexport default class PrometheusProxySqlQueriesBackendStats {\n readonly created: number;\n readonly queriesBackendsBytesSent: number;\n readonly queriesBackendsBytesRecv: number;\n\n constructor(props: PrometheusProxySqlQueriesBackendStatsBackendApiProps) {\n this.created = props.created;\n this.queriesBackendsBytesSent = props.queries_backends_bytes_sent;\n this.queriesBackendsBytesRecv = props.queries_backends_bytes_recv;\n }\n}\n","export type PrometheusProxySqlQueriesHostgroupDistributionStatsBackendApiProps =\n {\n created: number;\n queries: number;\n };\n\nexport default class PrometheusProxySqlQueriesHostgroupDistributionStats {\n readonly created: number;\n readonly queries: number;\n\n constructor(\n props: PrometheusProxySqlQueriesHostgroupDistributionStatsBackendApiProps\n ) {\n this.created = props.created;\n this.queries = props.queries;\n }\n}\n","export type PrometheusProxySqlQueryCacheGetSetStatsBackendApiProps = {\n created: number;\n query_cache_count_get_ok: number;\n query_cache_count_get: number;\n query_cache_count_set: number;\n};\n\nexport default class PrometheusProxySqlQueryCacheGetSetStats {\n readonly created: number;\n readonly queryCacheCountGetOk: number;\n readonly queryCacheCountGet: number;\n readonly queryCacheCountSet: number;\n\n constructor(props: PrometheusProxySqlQueryCacheGetSetStatsBackendApiProps) {\n this.created = props.created;\n this.queryCacheCountGetOk = props.query_cache_count_get_ok;\n this.queryCacheCountGet = props.query_cache_count_get;\n this.queryCacheCountSet = props.query_cache_count_set;\n }\n}\n","export type PrometheusProxySqlQueryCacheInOutBytesStatsBackendApiProps = {\n created: number;\n query_cache_bytes_in: number;\n query_cache_bytes_out: number;\n};\n\nexport default class PrometheusProxySqlQueryCacheInOutBytesStats {\n readonly created: number;\n readonly queryCacheBytesIn: number;\n readonly queryCacheBytesOut: number;\n\n constructor(\n props: PrometheusProxySqlQueryCacheInOutBytesStatsBackendApiProps\n ) {\n this.created = props.created;\n this.queryCacheBytesIn = props.query_cache_bytes_in;\n this.queryCacheBytesOut = props.query_cache_bytes_out;\n }\n}\n","export type PrometheusProxySqlQueryCacheMemoryStatsBackendApiProps = {\n created: number;\n query_cache_memory_bytes: number;\n};\n\nexport default class PrometheusProxySqlQueryCacheMemoryStats {\n readonly created: number;\n readonly queryCacheMemoryBytes: number;\n\n constructor(props: PrometheusProxySqlQueryCacheMemoryStatsBackendApiProps) {\n this.created = props.created;\n this.queryCacheMemoryBytes = props.query_cache_memory_bytes;\n }\n}\n","export type PrometheusProxySqlQuestionsStatsBackendApiProps = {\n created: number;\n questions: number;\n};\n\nexport default class PrometheusProxySqlQuestionsStats {\n readonly created: number;\n readonly questions: number;\n\n constructor(props: PrometheusProxySqlQuestionsStatsBackendApiProps) {\n this.created = props.created;\n this.questions = props.questions;\n }\n}\n","export type PrometheusProxySqlServerConnectionsStatsBackendApiProps = {\n created: number;\n server_connections_aborted: number;\n server_connections_connected: number;\n server_connections_created: number;\n server_connections_delayed: number;\n};\n\nexport default class PrometheusProxySqlServerConnectionsStats {\n readonly created: number;\n readonly serverConnectionsAborted: number;\n readonly serverConnectionsConnected: number;\n readonly serverConnectionsCreated: number;\n readonly serverConnectionsDelayed: number;\n\n constructor(\n props: PrometheusProxySqlServerConnectionsStatsBackendApiProps\n ) {\n this.created = props.created;\n this.serverConnectionsAborted = props.server_connections_aborted;\n this.serverConnectionsConnected = props.server_connections_connected;\n this.serverConnectionsCreated = props.server_connections_created;\n this.serverConnectionsDelayed = props.server_connections_delayed;\n }\n}\n","export type SlowQueriesBackendApiProps = {\n created: number;\n slow_queries: number;\n};\n\nexport default class SlowQueries {\n readonly created: number;\n readonly slowQueries: number;\n\n constructor(props: SlowQueriesBackendApiProps) {\n this.created = props.created;\n this.slowQueries = props.slow_queries;\n }\n}\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusProxySqlQuestionsStats from '../../../types/PrometheusProxySqlQuestionsStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusProxySqlQuestionsStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusProxySqlQuestionsChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusProxySqlQuestionsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusProxySqlQuestionsStats) => {\n return [\n {\n yValue: stat.questions,\n series: 'questions',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'questions',\n label: 'questions',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Questions',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusProxySqlQuestionsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusProxySqlSlowQueriesStats from '../../../types/PrometheusProxySqlSlowQueriesStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusProxySqlSlowQueriesStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusProxySqlSlowQueriesChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusProxySqlSlowQueriesChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusProxySqlSlowQueriesStats) => {\n return [\n {\n yValue: stat.slowQueries,\n series: 'slow_queries',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'slowQueries',\n label: 'slow_queries',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Slow queries',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusProxySqlSlowQueriesChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusProxySqlQueriesHostgroupDistributionStats from '../../../types/PrometheusProxySqlQueriesHostgroupDistributionStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusProxySqlQueriesHostgroupDistributionStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusProxySqlQueriesHostgroupDistributionChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusProxySqlQueriesHostgroupDistributionChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusProxySqlQueriesHostgroupDistributionStats) => {\n return [\n {\n yValue: stat.queries,\n series: 'queries',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'queries',\n label: 'queries',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Queries / hostgroup distribution',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusProxySqlQueriesHostgroupDistributionChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusProxySqlLatencyHostgroupDistributionStats from '../../../types/PrometheusProxySqlLatencyHostgroupDistributionStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusProxySqlLatencyHostgroupDistributionStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusProxySqlLatencyHostgroupDistributionChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusProxySqlLatencyHostgroupDistributionChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusProxySqlLatencyHostgroupDistributionStats) => {\n return [\n {\n yValue: stat.latencyUs,\n series: 'latency_us',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'latencyUs',\n label: 'latency_us',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Latency / hostgroup distribution',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusProxySqlLatencyHostgroupDistributionChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusProxySqlDataSentHostgroupDistributionStats from '../../../types/PrometheusProxySqlDataSentHostgroupDistributionStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusProxySqlDataSentHostgroupDistributionStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusProxySqlDataSentHostgroupDistributionChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusProxySqlDataSentHostgroupDistributionChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (\n stat: PrometheusProxySqlDataSentHostgroupDistributionStats\n ) => {\n return [\n {\n yValue: stat.dataSent,\n series: 'data_sent',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'dataSent',\n label: 'data_sent',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Data sent / hostgroup distribution',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusProxySqlDataSentHostgroupDistributionChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusProxySqlDataReceivedHostgroupDistributionStats from '../../../types/PrometheusProxySqlDataReceivedHostgroupDistributionStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusProxySqlDataReceivedHostgroupDistributionStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusProxySqlDataReceivedHostgroupDistributionChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusProxySqlDataReceivedHostgroupDistributionChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (\n stat: PrometheusProxySqlDataReceivedHostgroupDistributionStats\n ) => {\n return [\n {\n yValue: stat.dataRecv,\n series: 'data_recv',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'dataRecv',\n label: 'data_recv',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Data received / hostgroup distribution',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusProxySqlDataReceivedHostgroupDistributionChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusProxySqlMemoryUtilizationStats from '../../../types/PrometheusProxySqlMemoryUtilizationStats';\nimport numbro from 'numbro';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusProxySqlMemoryUtilizationStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusProxySqlMemoryUtilizationChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusProxySqlMemoryUtilizationChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusProxySqlMemoryUtilizationStats) => {\n return [\n {\n yValue: stat.sqlite3MemoryBytes,\n series: 'sqlite3_memory_bytes',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.connpoolMemoryBytes,\n series: 'connpool_memory_bytes',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.mysqlBackendBuffersBytes,\n series: 'mysql_backend_buffers_bytes',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.mysqlFrontendBuffersBytes,\n series: 'mysql_frontend_buffers_bytes',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.mysqlSessionInternalBytes,\n series: 'mysql_session_internal_bytes',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'sqlite3MemoryBytes',\n label: 'sqlite3_memory_bytes',\n },\n {\n value: 'connpoolMemoryBytes',\n label: 'connpool_memory_bytes',\n },\n {\n value: 'mysqlBackendBuffersBytes',\n label: 'mysql_backend_buffers_bytes',\n },\n {\n value: 'mysqlFrontendBuffersBytes',\n label: 'mysql_frontend_buffers_bytes',\n },\n {\n value: 'mysqlSessionInternalBytes',\n label: 'mysql_session_internal_bytes',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Memory utilization',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return numbro(parseInt(text, 10)).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 0,\n });\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusProxySqlMemoryUtilizationChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusProxySqlQueryCacheInOutBytesStats from '../../../types/PrometheusProxySqlQueryCacheInOutBytesStats';\nimport numbro from 'numbro';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusProxySqlQueryCacheInOutBytesStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusProxySqlQueryCacheInOutBytesChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusProxySqlQueryCacheInOutBytesChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusProxySqlQueryCacheInOutBytesStats) => {\n return [\n {\n yValue: stat.queryCacheBytesIn,\n series: 'query_cache_bytes_in',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.queryCacheBytesOut,\n series: 'query_cache_bytes_out',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'queryCacheBytesIn',\n label: 'query_cache_bytes_in',\n },\n {\n value: 'queryCacheBytesOut',\n label: 'query_cache_bytes_out',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Query cache - in/out bytes',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return numbro(parseInt(text, 10)).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 0,\n });\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusProxySqlQueryCacheInOutBytesChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusProxySqlQueryCacheGetSetStats from '../../../types/PrometheusProxySqlQueryCacheGetSetStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusProxySqlQueryCacheGetSetStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusProxySqlQueryCacheGetSetChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusProxySqlQueryCacheGetSetChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusProxySqlQueryCacheGetSetStats) => {\n return [\n {\n yValue: stat.queryCacheCountGetOk,\n series: 'query_cache_count_get_ok',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.queryCacheCountGet,\n series: 'query_cache_count_get',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.queryCacheCountSet,\n series: 'query_cache_count_set',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'queryCacheCountGetOk',\n label: 'query_cache_count_get_ok',\n },\n {\n value: 'queryCacheCountGet',\n label: 'query_cache_count_get',\n },\n {\n value: 'queryCacheCountSet',\n label: 'query_cache_count_set',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Query cache - get/set',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusProxySqlQueryCacheGetSetChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusProxySqlQueryCacheMemoryStats from '../../../types/PrometheusProxySqlQueryCacheMemoryStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusProxySqlQueryCacheMemoryStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusProxySqlQueryCacheMemoryChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusProxySqlQueryCacheMemoryChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusProxySqlQueryCacheMemoryStats) => {\n return [\n {\n yValue: stat.queryCacheMemoryBytes,\n series: 'query_cache_memory_bytes',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'queryCacheMemoryBytes',\n label: 'query_cache_memory_bytes',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Query cache - memory used by result sets',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusProxySqlQueryCacheMemoryChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusProxySqlServerConnectionsStats from '../../../types/PrometheusProxySqlServerConnectionsStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusProxySqlServerConnectionsStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusProxySqlServerConnectionsChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusProxySqlServerConnectionsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusProxySqlServerConnectionsStats) => {\n return [\n {\n yValue: stat.serverConnectionsAborted,\n series: 'server_connections_aborted',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.serverConnectionsConnected,\n series: 'server_connections_connected',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.serverConnectionsCreated,\n series: 'server_connections_created',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.serverConnectionsDelayed,\n series: 'server_connections_delayed',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'serverConnectionsAborted',\n label: 'server_connections_aborted',\n },\n {\n value: 'serverConnectionsConnected',\n label: 'server_connections_connected',\n },\n {\n value: 'serverConnectionsCreated',\n label: 'server_connections_created',\n },\n {\n value: 'serverConnectionsDelayed',\n label: 'server_connections_delayed',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Server connections',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusProxySqlServerConnectionsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusProxySqlClientConnectionsStats from '../../../types/PrometheusProxySqlClientConnectionsStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusProxySqlClientConnectionsStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusProxySqlClientConnectionsChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusProxySqlClientConnectionsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusProxySqlClientConnectionsStats) => {\n return [\n {\n yValue: stat.clientConnectionsAborted,\n series: 'client_connections_aborted',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.clientConnectionsConnected,\n series: 'client_connections_connected',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.clientConnectionsCreated,\n series: 'client_connections_created',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.clientConnectionsNonIdle,\n series: 'client_connections_non_idle',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'clientConnectionsAborted',\n label: 'client_connections_aborted',\n },\n {\n value: 'clientConnectionsConnected',\n label: 'client_connections_connected',\n },\n {\n value: 'clientConnectionsCreated',\n label: 'client_connections_created',\n },\n {\n value: 'clientConnectionsNonIdle',\n label: 'client_connections_non_idle',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Client connections',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusProxySqlClientConnectionsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusProxySqlQueriesBackendStats from '../../../types/PrometheusProxySqlQueriesBackendStats';\nimport numbro from 'numbro';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusProxySqlQueriesBackendStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusProxySqlQueriesBackendChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusProxySqlQueriesBackendChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusProxySqlQueriesBackendStats) => {\n return [\n {\n yValue: stat.queriesBackendsBytesSent,\n series: 'queries_backends_bytes_sent',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.queriesBackendsBytesRecv,\n series: 'queries_backends_bytes_recv',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'queriesBackendsBytesSent',\n label: 'queries_backends_bytes_sent',\n },\n {\n value: 'queriesBackendsBytesRecv',\n label: 'queries_backends_bytes_recv',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Queries backend',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return `${numbro(parseInt(text, 10)).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 0,\n })}/s`;\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusProxySqlQueriesBackendChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusProxySqlActiveTransactionsStats from '../../../types/PrometheusProxySqlActiveTransactionsStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusProxySqlActiveTransactionsStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusProxySqlActiveTransactionsChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusProxySqlActiveTransactionsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusProxySqlActiveTransactionsStats) => {\n return [\n {\n yValue: stat.activeTransactions,\n series: 'active_transactions',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'activeTransactions',\n label: 'active_transactions',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Active transactions',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusProxySqlActiveTransactionsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport styles from './ProxySqlLbDashboard.module.less';\nimport { Col, Row } from 'antd';\nimport usePrometheusProxySqlActiveTransactionsStats from '../../../core/hooks/usePrometheusProxySqlActiveTransactionsStats';\nimport usePrometheusProxySqlClientConnectionsStats from '../../../core/hooks/usePrometheusProxySqlClientConnectionsStats';\nimport usePrometheusProxySqlDataReceivedHostgroupDistributionStats from '../../../core/hooks/usePrometheusProxySqlDataReceivedHostgroupDistributionStats';\nimport usePrometheusProxySqlDataSentHostgroupDistributionStats from '../../../core/hooks/usePrometheusProxySqlDataSentHostgroupDistributionStats';\nimport usePrometheusProxySqlLatencyHostgroupDistributionStats from '../../../core/hooks/usePrometheusProxySqlLatencyHostgroupDistributionStats';\nimport usePrometheusProxySqlMemoryUtilizationStats from '../../../core/hooks/usePrometheusProxySqlMemoryUtilizationStats';\nimport usePrometheusProxySqlQueriesBackendStats from '../../../core/hooks/usePrometheusProxySqlQueriesBackendStats';\nimport usePrometheusProxySqlQueriesHostgroupDistributionStats from '../../../core/hooks/usePrometheusProxySqlQueriesHostgroupDistributionStats';\nimport usePrometheusProxySqlQueryCacheGetSetStats from '../../../core/hooks/usePrometheusProxySqlQueryCacheGetSetStats';\nimport usePrometheusProxySqlQueryCacheInOutBytesStats from '../../../core/hooks/usePrometheusProxySqlQueryCacheInOutBytesStats';\nimport usePrometheusProxySqlQueryCacheMemoryStats from '../../../core/hooks/usePrometheusProxySqlQueryCacheMemoryStats';\nimport usePrometheusProxySqlQuestionsStats from '../../../core/hooks/usePrometheusProxySqlQuestionsStats';\nimport usePrometheusProxySqlServerConnectionsStats from '../../../core/hooks/usePrometheusProxySqlServerConnectionsStats';\nimport usePrometheusProxySqlSlowQueriesStats from '../../../core/hooks/usePrometheusProxySqlSlowQueriesStats';\nimport PrometheusProxySqlQuestionsChart from '../../ccx/charts/PrometheusProxySqlQuestionsChart';\nimport PrometheusProxySqlSlowQueriesChart from '../../ccx/charts/PrometheusProxySqlSlowQueriesChart';\nimport PrometheusProxySqlQueriesHostgroupDistributionChart from '../../ccx/charts/PrometheusProxySqlQueriesHostgroupDistributionChart';\nimport PrometheusProxySqlLatencyHostgroupDistributionChart from '../../ccx/charts/PrometheusProxySqlLatencyHostgroupDistributionChart';\nimport PrometheusProxySqlDataSentHostgroupDistributionChart from '../../ccx/charts/PrometheusProxySqlDataSentHostgroupDistributionChart';\nimport PrometheusProxySqlDataReceivedHostgroupDistributionChart from '../../ccx/charts/PrometheusProxySqlDataReceivedHostgroupDistributionChart';\nimport PrometheusProxySqlMemoryUtilizationChart from '../../ccx/charts/PrometheusProxySqlMemoryUtilizationChart';\nimport PrometheusProxySqlQueryCacheInOutBytesChart from '../../ccx/charts/PrometheusProxySqlQueryCacheInOutBytesChart';\nimport PrometheusProxySqlQueryCacheGetSetChart from '../../ccx/charts/PrometheusProxySqlQueryCacheGetSetChart';\nimport PrometheusProxySqlQueryCacheMemoryChart from '../../ccx/charts/PrometheusProxySqlQueryCacheMemoryChart';\nimport PrometheusProxySqlServerConnectionsChart from '../../ccx/charts/PrometheusProxySqlServerConnectionsChart';\nimport PrometheusProxySqlClientConnectionsChart from '../../ccx/charts/PrometheusProxySqlClientConnectionsChart';\nimport PrometheusProxySqlQueriesBackendChart from '../../ccx/charts/PrometheusProxySqlQueriesBackendChart';\nimport PrometheusProxySqlActiveTransactionsChart from '../../ccx/charts/PrometheusProxySqlActiveTransactionsChart';\n\ntype ProxySqlLbDashboardProps = {\n uuid: string;\n host_uuid: string;\n port: number;\n from?: string;\n to?: string;\n interval: number;\n hidden?: boolean;\n displaySummary?: boolean;\n onLoading?: Function;\n};\n\nfunction ProxySqlLbDashboard({\n uuid,\n host_uuid,\n port,\n from,\n to,\n interval,\n hidden,\n displaySummary,\n onLoading,\n}: ProxySqlLbDashboardProps): ReactElement {\n const {\n stats: activeTransactionsStats,\n refresh: activeTransactionsStatsRefresh,\n loading: activeTransactionsStatsLoading,\n } = usePrometheusProxySqlActiveTransactionsStats(uuid, host_uuid, from, to);\n\n const {\n stats: clientConnectionsStats,\n refresh: clientConnectionsStatsRefresh,\n loading: clientConnectionsStatsLoading,\n } = usePrometheusProxySqlClientConnectionsStats(uuid, host_uuid, from, to);\n\n const {\n stats: dataReceivedHostgroupDistributionStats,\n refresh: dataReceivedHostgroupDistributionStatsRefresh,\n loading: dataReceivedHostgroupDistributionStatsLoading,\n } = usePrometheusProxySqlDataReceivedHostgroupDistributionStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: dataSentHostgroupDistributionStats,\n refresh: dataSentHostgroupDistributionStatsRefresh,\n loading: dataSentHostgroupDistributionStatsLoading,\n } = usePrometheusProxySqlDataSentHostgroupDistributionStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: latencyHostgroupDistributionStats,\n refresh: latencyHostgroupDistributionStatsRefresh,\n loading: latencyHostgroupDistributionStatsLoading,\n } = usePrometheusProxySqlLatencyHostgroupDistributionStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: memoryUtilizationStats,\n refresh: memoryUtilizationStatsRefresh,\n loading: memoryUtilizationStatsLoading,\n } = usePrometheusProxySqlMemoryUtilizationStats(uuid, host_uuid, from, to);\n\n const {\n stats: queriesBackendStats,\n refresh: queriesBackendStatsRefresh,\n loading: queriesBackendStatsLoading,\n } = usePrometheusProxySqlQueriesBackendStats(uuid, host_uuid, from, to);\n\n const {\n stats: queriesHostgroupDistributionStats,\n refresh: queriesHostgroupDistributionStatsRefresh,\n loading: queriesHostgroupDistributionStatsLoading,\n } = usePrometheusProxySqlQueriesHostgroupDistributionStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: queryCacheGetSetStats,\n refresh: queryCacheGetSetStatsRefresh,\n loading: queryCacheGetSetStatsLoading,\n } = usePrometheusProxySqlQueryCacheGetSetStats(uuid, host_uuid, from, to);\n\n const {\n stats: queryCacheInOutBytesStats,\n refresh: queryCacheInOutBytesStatsRefresh,\n loading: queryCacheInOutBytesStatsLoading,\n } = usePrometheusProxySqlQueryCacheInOutBytesStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: queryCacheMemoryStats,\n refresh: queryCacheMemoryStatsRefresh,\n loading: queryCacheMemoryStatsLoading,\n } = usePrometheusProxySqlQueryCacheMemoryStats(uuid, host_uuid, from, to);\n\n const {\n stats: questionsStats,\n refresh: questionsStatsRefresh,\n loading: questionsStatsLoading,\n } = usePrometheusProxySqlQuestionsStats(uuid, host_uuid, from, to);\n\n const {\n stats: serverConnectionsStats,\n refresh: serverConnectionsStatsRefresh,\n loading: serverConnectionsStatsLoading,\n } = usePrometheusProxySqlServerConnectionsStats(uuid, host_uuid, from, to);\n\n const {\n stats: slowQueriesStats,\n refresh: slowQueriesStatsRefresh,\n loading: slowQueriesStatsLoading,\n } = usePrometheusProxySqlSlowQueriesStats(uuid, host_uuid, from, to);\n\n const [\n activeTransactionsStatsInterval,\n setActiveTransactionsStatsInterval,\n ] = useState(undefined);\n const [clientConnectionsStatsInterval, setClientConnectionsStatsInterval] =\n useState(undefined);\n const [\n dataReceivedHostgroupDistributionStatsInterval,\n setDataReceivedHostgroupDistributionStatsInterval,\n ] = useState(undefined);\n const [\n dataSentHostgroupDistributionStatsInterval,\n setDataSentHostgroupDistributionStatsInterval,\n ] = useState(undefined);\n const [\n latencyHostgroupDistributionStatsInterval,\n setLatencyHostgroupDistributionStatsInterval,\n ] = useState(undefined);\n const [memoryUtilizationStatsInterval, setMemoryUtilizationStatsInterval] =\n useState(undefined);\n const [queriesBackendStatsInterval, setQueriesBackendStatsInterval] =\n useState(undefined);\n const [\n queriesHostgroupDistributionStatsInterval,\n setQueriesHostgroupDistributionStatsInterval,\n ] = useState(undefined);\n const [queryCacheGetSetStatsInterval, setQueryCacheGetSetStatsInterval] =\n useState(undefined);\n const [\n queryCacheInOutBytesStatsInterval,\n setQueryCacheInOutBytesStatsInterval,\n ] = useState(undefined);\n const [queryCacheMemoryStatsInterval, setQueryCacheMemoryStatsInterval] =\n useState(undefined);\n const [questionsStatsInterval, setQuestionsStatsInterval] = useState<\n number | undefined\n >(undefined);\n const [serverConnectionsStatsInterval, setServerConnectionsStatsInterval] =\n useState(undefined);\n const [slowQueriesStatsInterval, setSlowQueriesStatsInterval] = useState<\n number | undefined\n >(undefined);\n\n const [refreshInterval, setRefreshInterval] = useState(interval);\n\n useEffect(() => {\n let interval: any;\n if (activeTransactionsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n activeTransactionsStatsRefresh();\n }, refreshInterval);\n setActiveTransactionsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [activeTransactionsStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (clientConnectionsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n clientConnectionsStatsRefresh();\n }, refreshInterval);\n setClientConnectionsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [clientConnectionsStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (dataReceivedHostgroupDistributionStats && refreshInterval > 0) {\n interval = setInterval(() => {\n dataReceivedHostgroupDistributionStatsRefresh();\n }, refreshInterval);\n setDataReceivedHostgroupDistributionStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [dataReceivedHostgroupDistributionStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (dataSentHostgroupDistributionStats && refreshInterval > 0) {\n interval = setInterval(() => {\n dataSentHostgroupDistributionStatsRefresh();\n }, refreshInterval);\n setDataSentHostgroupDistributionStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [dataSentHostgroupDistributionStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (latencyHostgroupDistributionStats && refreshInterval > 0) {\n interval = setInterval(() => {\n latencyHostgroupDistributionStatsRefresh();\n }, refreshInterval);\n setLatencyHostgroupDistributionStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [latencyHostgroupDistributionStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (memoryUtilizationStats && refreshInterval > 0) {\n interval = setInterval(() => {\n memoryUtilizationStatsRefresh();\n }, refreshInterval);\n setMemoryUtilizationStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [memoryUtilizationStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (queriesBackendStats && refreshInterval > 0) {\n interval = setInterval(() => {\n queriesBackendStatsRefresh();\n }, refreshInterval);\n setQueriesBackendStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [queriesBackendStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (queriesHostgroupDistributionStats && refreshInterval > 0) {\n interval = setInterval(() => {\n queriesHostgroupDistributionStatsRefresh();\n }, refreshInterval);\n setQueriesHostgroupDistributionStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [queriesHostgroupDistributionStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (queryCacheGetSetStats && refreshInterval > 0) {\n interval = setInterval(() => {\n queryCacheGetSetStatsRefresh();\n }, refreshInterval);\n setQueryCacheGetSetStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [queryCacheGetSetStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (queryCacheInOutBytesStats && refreshInterval > 0) {\n interval = setInterval(() => {\n queryCacheInOutBytesStatsRefresh();\n }, refreshInterval);\n setQueryCacheInOutBytesStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [queryCacheInOutBytesStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (queryCacheMemoryStats && refreshInterval > 0) {\n interval = setInterval(() => {\n queryCacheMemoryStatsRefresh();\n }, refreshInterval);\n setQueryCacheMemoryStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [queryCacheMemoryStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (questionsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n questionsStatsRefresh();\n }, refreshInterval);\n setQuestionsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [questionsStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (serverConnectionsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n serverConnectionsStatsRefresh();\n }, refreshInterval);\n setServerConnectionsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [serverConnectionsStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (slowQueriesStats && refreshInterval > 0) {\n interval = setInterval(() => {\n slowQueriesStatsRefresh();\n }, refreshInterval);\n setSlowQueriesStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [slowQueriesStats, refreshInterval]);\n\n useEffect(() => {\n if (interval === 0) {\n // when interval is 0, we must pause the refresh (clear existing intervals)\n clearInterval(activeTransactionsStatsInterval);\n clearInterval(clientConnectionsStatsInterval);\n clearInterval(dataReceivedHostgroupDistributionStatsInterval);\n clearInterval(dataSentHostgroupDistributionStatsInterval);\n clearInterval(latencyHostgroupDistributionStatsInterval);\n clearInterval(memoryUtilizationStatsInterval);\n clearInterval(queriesBackendStatsInterval);\n clearInterval(queriesHostgroupDistributionStatsInterval);\n clearInterval(queryCacheGetSetStatsInterval);\n clearInterval(queryCacheInOutBytesStatsInterval);\n clearInterval(queryCacheMemoryStatsInterval);\n clearInterval(questionsStatsInterval);\n clearInterval(serverConnectionsStatsInterval);\n clearInterval(slowQueriesStatsInterval);\n setActiveTransactionsStatsInterval(0);\n setClientConnectionsStatsInterval(0);\n setDataReceivedHostgroupDistributionStatsInterval(0);\n setDataSentHostgroupDistributionStatsInterval(0);\n setLatencyHostgroupDistributionStatsInterval(0);\n setMemoryUtilizationStatsInterval(0);\n setQueriesBackendStatsInterval(0);\n setQueriesHostgroupDistributionStatsInterval(0);\n setQueryCacheGetSetStatsInterval(0);\n setQueryCacheInOutBytesStatsInterval(0);\n setQueryCacheMemoryStatsInterval(0);\n setQuestionsStatsInterval(0);\n setServerConnectionsStatsInterval(0);\n setSlowQueriesStatsInterval(0);\n }\n setRefreshInterval(interval);\n setActiveTransactionsStatsInterval(interval);\n setClientConnectionsStatsInterval(interval);\n setDataReceivedHostgroupDistributionStatsInterval(interval);\n setDataSentHostgroupDistributionStatsInterval(interval);\n setLatencyHostgroupDistributionStatsInterval(interval);\n setMemoryUtilizationStatsInterval(interval);\n setQueriesBackendStatsInterval(interval);\n setQueriesHostgroupDistributionStatsInterval(interval);\n setQueryCacheGetSetStatsInterval(interval);\n setQueryCacheInOutBytesStatsInterval(interval);\n setQueryCacheMemoryStatsInterval(interval);\n setQuestionsStatsInterval(interval);\n setServerConnectionsStatsInterval(interval);\n setSlowQueriesStatsInterval(interval);\n }, [interval]);\n\n useEffect(() => {\n if (hidden) {\n // clear interval to stop updating data if the tab is not active (charts are not visible)\n clearInterval(activeTransactionsStatsInterval);\n clearInterval(clientConnectionsStatsInterval);\n clearInterval(dataReceivedHostgroupDistributionStatsInterval);\n clearInterval(dataSentHostgroupDistributionStatsInterval);\n clearInterval(latencyHostgroupDistributionStatsInterval);\n clearInterval(memoryUtilizationStatsInterval);\n clearInterval(queriesBackendStatsInterval);\n clearInterval(queriesHostgroupDistributionStatsInterval);\n clearInterval(queryCacheGetSetStatsInterval);\n clearInterval(queryCacheInOutBytesStatsInterval);\n clearInterval(queryCacheMemoryStatsInterval);\n clearInterval(questionsStatsInterval);\n clearInterval(serverConnectionsStatsInterval);\n clearInterval(slowQueriesStatsInterval);\n setActiveTransactionsStatsInterval(0);\n setClientConnectionsStatsInterval(0);\n setDataReceivedHostgroupDistributionStatsInterval(0);\n setDataSentHostgroupDistributionStatsInterval(0);\n setLatencyHostgroupDistributionStatsInterval(0);\n setMemoryUtilizationStatsInterval(0);\n setQueriesBackendStatsInterval(0);\n setQueriesHostgroupDistributionStatsInterval(0);\n setQueryCacheGetSetStatsInterval(0);\n setQueryCacheInOutBytesStatsInterval(0);\n setQueryCacheMemoryStatsInterval(0);\n setQuestionsStatsInterval(0);\n setServerConnectionsStatsInterval(0);\n setSlowQueriesStatsInterval(0);\n } else if (\n activeTransactionsStatsInterval === 0 ||\n clientConnectionsStatsInterval === 0 ||\n dataReceivedHostgroupDistributionStatsInterval === 0 ||\n dataSentHostgroupDistributionStatsInterval === 0 ||\n latencyHostgroupDistributionStatsInterval === 0 ||\n memoryUtilizationStatsInterval === 0 ||\n queriesBackendStatsInterval === 0 ||\n queriesHostgroupDistributionStatsInterval === 0 ||\n queryCacheGetSetStatsInterval === 0 ||\n queryCacheInOutBytesStatsInterval === 0 ||\n queryCacheMemoryStatsInterval === 0 ||\n questionsStatsInterval === 0 ||\n serverConnectionsStatsInterval === 0 ||\n slowQueriesStatsInterval === 0\n ) {\n // force refresh if the interval is 0, otherwise, the interval will refresh data soon\n // interval is undefined on the first load\n // interval will be 0 when paused or tab is hidden\n activeTransactionsStatsRefresh();\n clientConnectionsStatsRefresh();\n dataReceivedHostgroupDistributionStatsRefresh();\n dataSentHostgroupDistributionStatsRefresh();\n latencyHostgroupDistributionStatsRefresh();\n memoryUtilizationStatsRefresh();\n queriesBackendStatsRefresh();\n queriesHostgroupDistributionStatsRefresh();\n queryCacheGetSetStatsRefresh();\n queryCacheInOutBytesStatsRefresh();\n queryCacheMemoryStatsRefresh();\n questionsStatsRefresh();\n serverConnectionsStatsRefresh();\n slowQueriesStatsRefresh();\n }\n }, [hidden]);\n\n useEffect(() => {\n if (\n activeTransactionsStatsLoading ||\n clientConnectionsStatsLoading ||\n dataReceivedHostgroupDistributionStatsLoading ||\n dataSentHostgroupDistributionStatsLoading ||\n latencyHostgroupDistributionStatsLoading ||\n memoryUtilizationStatsLoading ||\n queriesBackendStatsLoading ||\n queriesHostgroupDistributionStatsLoading ||\n queryCacheGetSetStatsLoading ||\n queryCacheInOutBytesStatsLoading ||\n queryCacheMemoryStatsLoading ||\n questionsStatsLoading ||\n serverConnectionsStatsLoading ||\n slowQueriesStatsLoading\n ) {\n onLoading && onLoading(true);\n } else {\n onLoading && onLoading(false);\n }\n }, [\n activeTransactionsStatsLoading,\n clientConnectionsStatsLoading,\n dataReceivedHostgroupDistributionStatsLoading,\n dataSentHostgroupDistributionStatsLoading,\n latencyHostgroupDistributionStatsLoading,\n memoryUtilizationStatsLoading,\n queriesBackendStatsLoading,\n queriesHostgroupDistributionStatsLoading,\n queryCacheGetSetStatsLoading,\n queryCacheInOutBytesStatsLoading,\n queryCacheMemoryStatsLoading,\n questionsStatsLoading,\n serverConnectionsStatsLoading,\n slowQueriesStatsLoading,\n ]);\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n );\n}\n\nexport default ProxySqlLbDashboard;\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusProxySqlActiveTransactionsStats from '../../types/PrometheusProxySqlActiveTransactionsStats';\n\nexport default function usePrometheusProxySqlActiveTransactionsStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusProxySqlActiveTransactionsStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getProxySqlActiveTransactions(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusProxySqlActiveTransactionsStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusProxySqlClientConnectionsStats from '../../types/PrometheusProxySqlClientConnectionsStats';\n\nexport default function usePrometheusProxySqlClientConnectionsStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusProxySqlClientConnectionsStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getProxySqlClientConnections(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusProxySqlClientConnectionsStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusProxySqlDataReceivedHostgroupDistributionStats from '../../types/PrometheusProxySqlDataReceivedHostgroupDistributionStats';\n\nexport default function usePrometheusProxySqlDataReceivedHostgroupDistributionStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusProxySqlDataReceivedHostgroupDistributionStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getProxySqlDataReceivedHostgroupDistribution(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusProxySqlDataReceivedHostgroupDistributionStats(\n d\n )\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusProxySqlDataSentHostgroupDistributionStats from '../../types/PrometheusProxySqlDataSentHostgroupDistributionStats';\n\nexport default function usePrometheusProxySqlDataSentHostgroupDistributionStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusProxySqlDataSentHostgroupDistributionStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getProxySqlDataSentHostgroupDistribution(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusProxySqlDataSentHostgroupDistributionStats(\n d\n )\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusProxySqlLatencyHostgroupDistributionStats from '../../types/PrometheusProxySqlLatencyHostgroupDistributionStats';\n\nexport default function usePrometheusProxySqlLatencyHostgroupDistributionStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusProxySqlLatencyHostgroupDistributionStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getProxySqlLatencyHostgroupDistribution(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusProxySqlLatencyHostgroupDistributionStats(\n d\n )\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusProxySqlMemoryUtilizationStats from '../../types/PrometheusProxySqlMemoryUtilizationStats';\n\nexport default function usePrometheusProxySqlMemoryUtilizationStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusProxySqlMemoryUtilizationStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getProxySqlMemoryUtilization(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusProxySqlMemoryUtilizationStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusProxySqlQueriesBackendStats from '../../types/PrometheusProxySqlQueriesBackendStats';\n\nexport default function usePrometheusProxySqlQueriesBackendStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusProxySqlQueriesBackendStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getProxySqlQueriesBackend(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusProxySqlQueriesBackendStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusProxySqlQueriesHostgroupDistributionStats from '../../types/PrometheusProxySqlQueriesHostgroupDistributionStats';\n\nexport default function usePrometheusProxySqlQueriesHostgroupDistributionStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusProxySqlQueriesHostgroupDistributionStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getProxySqlQueriesHostgroupDistribution(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusProxySqlQueriesHostgroupDistributionStats(\n d\n )\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusProxySqlQueryCacheGetSetStats from '../../types/PrometheusProxySqlQueryCacheGetSetStats';\n\nexport default function usePrometheusProxySqlQueryCacheGetSetStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusProxySqlQueryCacheGetSetStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getProxySqlQueryCacheGetSet(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusProxySqlQueryCacheGetSetStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusProxySqlQueryCacheInOutBytesStats from '../../types/PrometheusProxySqlQueryCacheInOutBytesStats';\n\nexport default function usePrometheusProxySqlQueryCacheInOutBytesStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusProxySqlQueryCacheInOutBytesStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getProxySqlQueryCacheInOutBytes(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusProxySqlQueryCacheInOutBytesStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusProxySqlQueryCacheMemoryStats from '../../types/PrometheusProxySqlQueryCacheMemoryStats';\n\nexport default function usePrometheusProxySqlQueryCacheMemoryStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusProxySqlQueryCacheMemoryStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getProxySqlQueryCacheMemory(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusProxySqlQueryCacheMemoryStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusProxySqlQuestionsStats from '../../types/PrometheusProxySqlQuestionsStats';\n\nexport default function usePrometheusProxySqlQuestionsStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusProxySqlQuestionsStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getProxySqlQuestions(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusProxySqlQuestionsStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusProxySqlServerConnectionsStats from '../../types/PrometheusProxySqlServerConnectionsStats';\n\nexport default function usePrometheusProxySqlServerConnectionsStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusProxySqlServerConnectionsStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getProxySqlServerConnections(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusProxySqlServerConnectionsStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusProxySqlSlowQueriesStats from '../../types/PrometheusProxySqlSlowQueriesStats';\n\nexport default function usePrometheusProxySqlSlowQueriesStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusProxySqlSlowQueriesStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getProxySqlSlowQueries(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusProxySqlSlowQueriesStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","export type PrometheusHaProxyBackendCurrentQueuedRequestsStatsBackendApiProps =\n {\n created: number;\n haproxy_backend_current_queue: number;\n };\n\nexport default class PrometheusHaProxyBackendCurrentQueuedRequestsStats {\n readonly created: number;\n readonly haproxyBackendCurrentQueue: number;\n\n constructor(\n props: PrometheusHaProxyBackendCurrentQueuedRequestsStatsBackendApiProps\n ) {\n this.created = props.created;\n this.haproxyBackendCurrentQueue = props.haproxy_backend_current_queue;\n }\n}\n","export type PrometheusHaProxyBackendMaxQueuedRequestsStatsBackendApiProps = {\n created: number;\n haproxy_backend_max_queue: number;\n};\n\nexport default class PrometheusHaProxyBackendMaxQueuedRequestsStats {\n readonly created: number;\n readonly haproxyBackendMaxQueue: number;\n\n constructor(\n props: PrometheusHaProxyBackendMaxQueuedRequestsStatsBackendApiProps\n ) {\n this.created = props.created;\n this.haproxyBackendMaxQueue = props.haproxy_backend_max_queue;\n }\n}\n","export type PrometheusHaProxyBackendServersTotalBytesInStatsBackendApiProps = {\n created: number;\n haproxy_server_bytes_in_total: number;\n};\n\nexport default class PrometheusHaProxyBackendServersTotalBytesInStats {\n readonly created: number;\n readonly haproxyServerBytesInTotal: number;\n\n constructor(\n props: PrometheusHaProxyBackendServersTotalBytesInStatsBackendApiProps\n ) {\n this.created = props.created;\n this.haproxyServerBytesInTotal = props.haproxy_server_bytes_in_total;\n }\n}\n","export type PrometheusHaProxyBackendServersTotalBytesOutStatsBackendApiProps = {\n created: number;\n haproxy_server_bytes_out_total: number;\n};\n\nexport default class PrometheusHaProxyBackendServersTotalBytesOutStats {\n readonly created: number;\n readonly haproxyServerBytesOutTotal: number;\n\n constructor(\n props: PrometheusHaProxyBackendServersTotalBytesOutStatsBackendApiProps\n ) {\n this.created = props.created;\n this.haproxyServerBytesOutTotal = props.haproxy_server_bytes_out_total;\n }\n}\n","export type PrometheusHaProxyBackendServersUpDownStatsBackendApiProps = {\n created: number;\n haproxy_server_down: number;\n haproxy_server_up: number;\n};\n\nexport default class PrometheusHaProxyBackendServersUpDownStats {\n readonly created: number;\n readonly haproxyServerDown: number;\n readonly haproxyServerUp: number;\n\n constructor(\n props: PrometheusHaProxyBackendServersUpDownStatsBackendApiProps\n ) {\n this.created = props.created;\n this.haproxyServerDown = props.haproxy_server_down;\n this.haproxyServerUp = props.haproxy_server_up;\n }\n}\n","export type PrometheusHaProxyBackendsUpDownStatsBackendApiProps = {\n created: number;\n haproxy_backend_up: number;\n haproxy_backend_down: number;\n};\n\nexport default class PrometheusHaProxyBackendsUpDownStats {\n readonly created: number;\n readonly haproxyBackendUp: number;\n readonly haproxyBackendDown: number;\n\n constructor(props: PrometheusHaProxyBackendsUpDownStatsBackendApiProps) {\n this.created = props.created;\n this.haproxyBackendUp = props.haproxy_backend_up;\n this.haproxyBackendDown = props.haproxy_backend_down;\n }\n}\n","export type PrometheusHaProxyBackendTotalBytesInStatsBackendApiProps = {\n created: number;\n haproxy_server_bytes_in_total: number;\n};\n\nexport default class PrometheusHaProxyBackendTotalBytesInStats {\n readonly created: number;\n readonly haproxyServerBytesInTotal: number;\n\n constructor(\n props: PrometheusHaProxyBackendTotalBytesInStatsBackendApiProps\n ) {\n this.created = props.created;\n this.haproxyServerBytesInTotal = props.haproxy_server_bytes_in_total;\n }\n}\n","export type PrometheusHaProxyBackendTotalNumberOfConnectionErrorsStatsBackendApiProps =\n {\n created: number;\n haproxy_backend_connection_errors_total: number;\n };\n\nexport default class PrometheusHaProxyBackendTotalNumberOfConnectionErrorsStats {\n readonly created: number;\n readonly haproxyBackendConnectionErrorsTotal: number;\n\n constructor(\n props: PrometheusHaProxyBackendTotalNumberOfConnectionErrorsStatsBackendApiProps\n ) {\n this.created = props.created;\n this.haproxyBackendConnectionErrorsTotal =\n props.haproxy_backend_connection_errors_total;\n }\n}\n","export type PrometheusHaProxyBackendTotalBytesOutStatsBackendApiProps = {\n created: number;\n haproxy_server_bytes_out_total: number;\n};\n\nexport default class PrometheusHaProxyBackendTotalBytesOutStats {\n readonly created: number;\n readonly haproxyServerBytesOutTotal: number;\n\n constructor(\n props: PrometheusHaProxyBackendTotalBytesOutStatsBackendApiProps\n ) {\n this.created = props.created;\n this.haproxyServerBytesOutTotal = props.haproxy_server_bytes_out_total;\n }\n}\n","export type PrometheusHaProxyCurrentSessionRateBackendsStatsBackendApiProps = {\n created: number;\n haproxy_server_current_session_rate: number;\n};\n\nexport default class PrometheusHaProxyCurrentSessionRateBackendsStats {\n readonly created: number;\n readonly haproxyServerCurrentSessionRate: number;\n\n constructor(\n props: PrometheusHaProxyCurrentSessionRateBackendsStatsBackendApiProps\n ) {\n this.created = props.created;\n this.haproxyServerCurrentSessionRate =\n props.haproxy_server_current_session_rate;\n }\n}\n","export type PrometheusHaProxyCurrentSessionsBackendServersStatsBackendApiProps =\n {\n created: number;\n haproxy_server_current_sessions: number;\n };\n\nexport default class PrometheusHaProxyCurrentSessionsBackendServersStats {\n readonly created: number;\n readonly haproxyServerCurrentSessions: number;\n\n constructor(\n props: PrometheusHaProxyCurrentSessionsBackendServersStatsBackendApiProps\n ) {\n this.created = props.created;\n this.haproxyServerCurrentSessions =\n props.haproxy_server_current_sessions;\n }\n}\n","export type PrometheusHaProxyCurrentSessionsByBackendStatsBackendApiProps = {\n created: number;\n haproxy_server_current_sessions: number;\n};\n\nexport default class PrometheusHaProxyCurrentSessionsByBackendStats {\n readonly created: number;\n readonly haproxyServerCurrentSessions: number;\n\n constructor(\n props: PrometheusHaProxyCurrentSessionsByBackendStatsBackendApiProps\n ) {\n this.created = props.created;\n this.haproxyServerCurrentSessions =\n props.haproxy_server_current_sessions;\n }\n}\n","export type PrometheusHaProxyCurrentSessionRateBackendServersStatsBackendApiProps =\n {\n created: number;\n haproxy_server_current_session_rate: number;\n };\n\nexport default class PrometheusHaProxyCurrentSessionRateBackendServersStats {\n readonly created: number;\n readonly haproxyServerCurrentSessionRate: number;\n\n constructor(\n props: PrometheusHaProxyCurrentSessionRateBackendServersStatsBackendApiProps\n ) {\n this.created = props.created;\n this.haproxyServerCurrentSessionRate =\n props.haproxy_server_current_session_rate;\n }\n}\n","export type PrometheusHaProxyMaxSessionBackendServersStatsBackendApiProps = {\n created: number;\n haproxy_server_max_sessions: number;\n};\n\nexport default class PrometheusHaProxyMaxSessionBackendServersStats {\n readonly created: number;\n readonly haproxyServerMaxSessions: number;\n\n constructor(\n props: PrometheusHaProxyMaxSessionBackendServersStatsBackendApiProps\n ) {\n this.created = props.created;\n this.haproxyServerMaxSessions = props.haproxy_server_max_sessions;\n }\n}\n","export type PrometheusHaProxySessionsStatsBackendApiProps = {\n created: number;\n haproxy_frontend_current_sessions: number;\n haproxy_frontend_current_session_rate: number;\n haproxy_backend_current_sessions: number;\n haproxy_backend_current_session_rate: number;\n};\n\nexport default class PrometheusHaProxySessionsStats {\n readonly created: number;\n readonly haproxyFrontendCurrentSessions: number;\n readonly haproxyFrontendCurrentSessionRate: number;\n readonly haproxyBackendCurrentSessions: number;\n readonly haproxyBackendCurrentSessionRate: number;\n\n constructor(props: PrometheusHaProxySessionsStatsBackendApiProps) {\n this.created = props.created;\n this.haproxyFrontendCurrentSessions =\n props.haproxy_frontend_current_sessions;\n this.haproxyFrontendCurrentSessionRate =\n props.haproxy_frontend_current_session_rate;\n this.haproxyBackendCurrentSessions =\n props.haproxy_backend_current_sessions;\n this.haproxyBackendCurrentSessionRate =\n props.haproxy_backend_current_session_rate;\n }\n}\n","export type PrometheusHaProxyTotalInOutStatsBackendApiProps = {\n created: number;\n haproxy_frontend_bytes_in_total: number;\n haproxy_frontend_bytes_out_total: number;\n haproxy_backend_bytes_in_total: number;\n haproxy_backend_bytes_out_total: number;\n};\n\nexport default class PrometheusHaProxyTotalInOutStats {\n readonly created: number;\n readonly haproxyFrontendBytesInTotal: number;\n readonly haproxyFrontendBytesOutTotal: number;\n readonly haproxyBackendBytesInTotal: number;\n readonly haproxyBackendBytesOutTotal: number;\n\n constructor(props: PrometheusHaProxyTotalInOutStatsBackendApiProps) {\n this.created = props.created;\n this.haproxyFrontendBytesInTotal =\n props.haproxy_frontend_bytes_in_total;\n this.haproxyFrontendBytesOutTotal =\n props.haproxy_frontend_bytes_out_total;\n this.haproxyBackendBytesInTotal = props.haproxy_backend_bytes_in_total;\n this.haproxyBackendBytesOutTotal =\n props.haproxy_backend_bytes_out_total;\n }\n}\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusHaProxyBackendsUpDownStats from '../../../types/PrometheusHaProxyBackendsUpDownStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusHaProxyBackendsUpDownStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusHaProxyBackendsUpDownChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusHaProxyBackendsUpDownChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusHaProxyBackendsUpDownStats) => {\n return [\n {\n yValue: stat.haproxyBackendUp,\n series: 'haproxy_backend_up',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.haproxyBackendDown,\n series: 'haproxy_backend_down',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'haproxyBackendUp',\n label: 'haproxy_backend_up',\n },\n {\n value: 'haproxyBackendDown',\n label: 'haproxy_backend_down',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Backends up / down',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusHaProxyBackendsUpDownChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusHaProxyBackendServersUpDownStats from '../../../types/PrometheusHaProxyBackendServersUpDownStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusHaProxyBackendServersUpDownStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusHaProxyBackendServersUpDownChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusHaProxyBackendServersUpDownChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusHaProxyBackendServersUpDownStats) => {\n return [\n {\n yValue: stat.haproxyServerDown,\n series: 'haproxy_server_down',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.haproxyServerUp,\n series: 'haproxy_server_up',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'haproxyServerDown',\n label: 'haproxy_server_down',\n },\n {\n value: 'haproxyServerUp',\n label: 'haproxy_server_up',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Backend servers up / down',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusHaProxyBackendServersUpDownChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusHaProxyBackendTotalBytesInStats from '../../../types/PrometheusHaProxyBackendTotalBytesInStats';\nimport numbro from 'numbro';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusHaProxyBackendTotalBytesInStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusHaProxyBackendTotalBytesInChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusHaProxyBackendTotalBytesInChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusHaProxyBackendTotalBytesInStats) => {\n return [\n {\n yValue: stat.haproxyServerBytesInTotal,\n series: 'haproxy_server_bytes_in_total',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'haproxyServerBytesInTotal',\n label: 'haproxy_server_bytes_in_total',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Backends - total bytes in',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return numbro(parseInt(text, 10)).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 0,\n });\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusHaProxyBackendTotalBytesInChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusHaProxyTotalInOutStats from '../../../types/PrometheusHaProxyTotalInOutStats';\nimport numbro from 'numbro';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusHaProxyTotalInOutStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusHaProxyTotalInOutChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusHaProxyTotalInOutChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusHaProxyTotalInOutStats) => {\n return [\n {\n yValue: stat.haproxyFrontendBytesInTotal,\n series: 'haproxy_frontend_bytes_in_total',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.haproxyFrontendBytesOutTotal,\n series: 'haproxy_frontend_bytes_out_total',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.haproxyBackendBytesInTotal,\n series: 'haproxy_backend_bytes_in_total',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.haproxyBackendBytesOutTotal,\n series: 'haproxy_backend_bytes_out_total',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'haproxyFrontendBytesInTotal',\n label: 'haproxy_frontend_bytes_in_total',\n },\n {\n value: 'haproxyFrontendBytesOutTotal',\n label: 'haproxy_frontend_bytes_out_total',\n },\n {\n value: 'haproxyBackendBytesInTotal',\n label: 'haproxy_backend_bytes_in_total',\n },\n {\n value: 'haproxyBackendBytesOutTotal',\n label: 'haproxy_backend_bytes_out_total',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Total bytes in/out - backend and frontend',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return numbro(parseInt(text, 10)).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 0,\n });\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusHaProxyTotalInOutChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusHaProxyBackendServersTotalBytesInStats from '../../../types/PrometheusHaProxyBackendServersTotalBytesInStats';\nimport numbro from 'numbro';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusHaProxyBackendServersTotalBytesInStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusHaProxyBackendServersTotalBytesInChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusHaProxyBackendServersTotalBytesInChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusHaProxyBackendServersTotalBytesInStats) => {\n return [\n {\n yValue: stat.haproxyServerBytesInTotal,\n series: 'haproxy_server_bytes_in_total',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'haproxyServerBytesInTotal',\n label: 'haproxy_server_bytes_in_total',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Backend servers - total bytes in',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return numbro(parseInt(text, 10)).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 0,\n });\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusHaProxyBackendServersTotalBytesInChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusHaProxyBackendServersTotalBytesOutStats from '../../../types/PrometheusHaProxyBackendServersTotalBytesOutStats';\nimport numbro from 'numbro';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusHaProxyBackendServersTotalBytesOutStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusHaProxyBackendServersTotalBytesOutChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusHaProxyBackendServersTotalBytesOutChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusHaProxyBackendServersTotalBytesOutStats) => {\n return [\n {\n yValue: stat.haproxyServerBytesOutTotal,\n series: 'haproxy_server_bytes_out_total',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'haproxyServerBytesOutTotal',\n label: 'haproxy_server_bytes_out_total',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Backend servers - total bytes out',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return numbro(parseInt(text, 10)).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 0,\n });\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusHaProxyBackendServersTotalBytesOutChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusHaProxyBackendTotalBytesOutStats from '../../../types/PrometheusHaProxyBackendTotalBytesOutStats';\nimport numbro from 'numbro';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusHaProxyBackendTotalBytesOutStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusHaProxyBackendTotalBytesOutChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusHaProxyBackendTotalBytesOutChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusHaProxyBackendTotalBytesOutStats) => {\n return [\n {\n yValue: stat.haproxyServerBytesOutTotal,\n series: 'haproxy_server_bytes_out_total',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'haproxyServerBytesOutTotal',\n label: 'haproxy_server_bytes_out_total',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Backends - total bytes out',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n yAxis: {\n label: {\n formatter: (text: string, item: any, index: number) => {\n return numbro(parseInt(text, 10)).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 0,\n });\n },\n },\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusHaProxyBackendTotalBytesOutChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusHaProxyCurrentSessionsBackendServersStats from '../../../types/PrometheusHaProxyCurrentSessionsBackendServersStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusHaProxyCurrentSessionsBackendServersStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusHaProxyCurrentSessionsBackendServersChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusHaProxyCurrentSessionsBackendServersChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusHaProxyCurrentSessionsBackendServersStats) => {\n return [\n {\n yValue: stat.haproxyServerCurrentSessions,\n series: 'haproxy_server_current_sessions',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'haproxyServerCurrentSessions',\n label: 'haproxy_server_current_sessions',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Current sessions - backend servers',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusHaProxyCurrentSessionsBackendServersChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusHaProxyCurrentSessionsByBackendStats from '../../../types/PrometheusHaProxyCurrentSessionsByBackendStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusHaProxyCurrentSessionsByBackendStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusHaProxyCurrentSessionsByBackendChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusHaProxyCurrentSessionsByBackendChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusHaProxyCurrentSessionsByBackendStats) => {\n return [\n {\n yValue: stat.haproxyServerCurrentSessions,\n series: 'haproxy_server_current_sessions',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'haproxyServerCurrentSessions',\n label: 'haproxy_server_current_sessions',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Current sessions by backends',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusHaProxyCurrentSessionsByBackendChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusHaProxyCurrentSessionRateBackendsStats from '../../../types/PrometheusHaProxyCurrentSessionRateBackendsStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusHaProxyCurrentSessionRateBackendsStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusHaProxyCurrentSessionRateBackendsChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusHaProxyCurrentSessionRateBackendsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusHaProxyCurrentSessionRateBackendsStats) => {\n return [\n {\n yValue: stat.haproxyServerCurrentSessionRate,\n series: 'haproxy_server_current_session_rate',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'haproxyServerCurrentSessionRate',\n label: 'haproxy_server_current_session_rate',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Current session rate - backends',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusHaProxyCurrentSessionRateBackendsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusHaProxyCurrentSessionRateBackendServersStats from '../../../types/PrometheusHaProxyCurrentSessionRateBackendServersStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusHaProxyCurrentSessionRateBackendServersStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusHaProxyCurrentSessionRateBackendServersChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusHaProxyCurrentSessionRateBackendServersChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (\n stat: PrometheusHaProxyCurrentSessionRateBackendServersStats\n ) => {\n return [\n {\n yValue: stat.haproxyServerCurrentSessionRate,\n series: 'haproxy_server_current_session_rate',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'haproxyServerCurrentSessionRate',\n label: 'haproxy_server_current_session_rate',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Current session rate - backend servers',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusHaProxyCurrentSessionRateBackendServersChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusHaProxyMaxSessionBackendServersStats from '../../../types/PrometheusHaProxyMaxSessionBackendServersStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusHaProxyMaxSessionBackendServersStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusHaProxyMaxSessionBackendServersChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusHaProxyMaxSessionBackendServersChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusHaProxyMaxSessionBackendServersStats) => {\n return [\n {\n yValue: stat.haproxyServerMaxSessions,\n series: 'haproxy_server_max_sessions',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'haproxyServerMaxSessions',\n label: 'haproxy_server_max_sessions',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Max sessions - backend servers',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusHaProxyMaxSessionBackendServersChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusHaProxySessionsStats from '../../../types/PrometheusHaProxySessionsStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusHaProxySessionsStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusHaProxySessionsChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusHaProxySessionsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusHaProxySessionsStats) => {\n return [\n {\n yValue: stat.haproxyFrontendCurrentSessions,\n series: 'haproxy_frontend_current_sessions',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.haproxyFrontendCurrentSessionRate,\n series: 'haproxy_frontend_current_session_rate',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.haproxyBackendCurrentSessions,\n series: 'haproxy_backend_current_sessions',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n {\n yValue: stat.haproxyBackendCurrentSessionRate,\n series: 'haproxy_backend_current_session_rate',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'haproxyFrontendCurrentSessions',\n label: 'haproxy_frontend_current_sessions',\n },\n {\n value: 'haproxyFrontendCurrentSessionRate',\n label: 'haproxy_frontend_current_session_rate',\n },\n {\n value: 'haproxyBackendCurrentSessions',\n label: 'haproxy_backend_current_sessions',\n },\n {\n value: 'haproxyBackendCurrentSessionRate',\n label: 'haproxy_backend_current_session_rate',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Sessions',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusHaProxySessionsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusHaProxyBackendTotalNumberOfConnectionErrorsStats from '../../../types/PrometheusHaProxyBackendTotalNumberOfConnectionErrorsStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusHaProxyBackendTotalNumberOfConnectionErrorsStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusHaProxyBackendTotalNumberOfConnectionErrorsChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusHaProxyBackendTotalNumberOfConnectionErrorsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (\n stat: PrometheusHaProxyBackendTotalNumberOfConnectionErrorsStats\n ) => {\n return [\n {\n yValue: stat.haproxyBackendConnectionErrorsTotal,\n series: 'haproxy_backend_connection_errors_total',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'haproxyBackendConnectionErrorsTotal',\n label: 'haproxy_backend_connection_errors_total',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Backend - total number of connection errors',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusHaProxyBackendTotalNumberOfConnectionErrorsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusHaProxyBackendMaxQueuedRequestsStats from '../../../types/PrometheusHaProxyBackendMaxQueuedRequestsStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusHaProxyBackendMaxQueuedRequestsStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusHaProxyBackendMaxQueuedRequestsChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusHaProxyBackendMaxQueuedRequestsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusHaProxyBackendMaxQueuedRequestsStats) => {\n return [\n {\n yValue: stat.haproxyBackendMaxQueue,\n series: 'haproxy_backend_max_queue',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'haproxyBackendMaxQueue',\n label: 'haproxy_backend_max_queue',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Backend - max queued requests (not assigned to any server)',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusHaProxyBackendMaxQueuedRequestsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport FriendlyTimestamp from '../../../types/FriendlyTimestamp';\nimport AppChart from '../../AppChart';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport ChartCustomTooltip from './ChartCustomTooltip';\nimport PrometheusHaProxyBackendCurrentQueuedRequestsStats from '../../../types/PrometheusHaProxyBackendCurrentQueuedRequestsStats';\n\ninterface Props extends CcxComponentProps {\n data?: PrometheusHaProxyBackendCurrentQueuedRequestsStats[];\n loading: boolean;\n displaySummary?: boolean;\n height?: number;\n width?: number;\n}\n\nfunction PrometheusHaProxyBackendCurrentQueuedRequestsChart({\n data,\n loading,\n displaySummary,\n testId = 'PrometheusHaProxyBackendCurrentQueuedRequestsChart',\n width,\n height = 250,\n}: Props): ReactElement {\n const [chartData, setChartData] = useState([]);\n const [summary, setSummary] = useState([]);\n\n const setChartSummary = (data: any, series: any) => {\n const max: number[] = [];\n const min: number[] = [];\n const sum: number[] = [];\n const avg: number[] = [];\n\n series.forEach((s: any) => {\n max[s.value] = 0;\n min[s.value] = 0;\n sum[s.value] = 0;\n avg[s.value] = 0;\n });\n\n data.forEach((d: any) => {\n series.forEach((s: any) => {\n sum[s.value] += d[s.value];\n\n min[s.value] =\n d[s.value] < min[s.value] ? d[s.value] : min[s.value];\n max[s.value] =\n d[s.value] > max[s.value] ? d[s.value] : max[s.value];\n });\n });\n\n series.forEach((s: any) => {\n avg[s.value] = sum[s.value] / data.length;\n });\n\n const dataSummary = series.map((s: any) => {\n return {\n serie: s.value,\n label: s.label,\n avg: avg[s.value].toFixed(2),\n min: min[s.value].toFixed(2),\n max: max[s.value].toFixed(2),\n sum: sum[s.value].toFixed(2),\n };\n });\n\n setSummary(dataSummary);\n };\n\n useEffect(() => {\n if (data && data.length > 0) {\n const formattedData = data.map(\n (stat: PrometheusHaProxyBackendCurrentQueuedRequestsStats) => {\n return [\n {\n yValue: stat.haproxyBackendCurrentQueue,\n series: 'haproxy_backend_current_queue',\n xValue: new FriendlyTimestamp(\n stat.created\n ).getDate(),\n },\n ];\n }\n );\n setChartData(formattedData.flat());\n\n const summarySeries = [\n {\n value: 'haproxyBackendCurrentQueue',\n label: 'haproxy_backend_current_queue',\n },\n ];\n setChartSummary(data, summarySeries);\n }\n }, [data]);\n\n const chartConfig = {\n title: {\n visible: true,\n text: 'Backend - current queued requests (not assigned to a server)',\n },\n description: {\n visible: true,\n text: '',\n },\n height,\n width,\n autoFit: !width && !height,\n xField: 'xValue',\n yField: 'yValue',\n xAxis: {\n type: 'time',\n mask: 'HH:mm',\n },\n animation: false,\n seriesField: 'series',\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return data[0]?.data?.xValue.toString();\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: d?.color,\n label: d?.data?.series,\n value: d?.data?.yValue,\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n };\n\n return (\n \n );\n}\n\nexport default PrometheusHaProxyBackendCurrentQueuedRequestsChart;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport styles from './HaProxyLbDashboard.module.less';\nimport { Col, Row } from 'antd';\nimport usePrometheusHaProxyBackendCurrentQueuedRequestsStats from '../../../core/hooks/usePrometheusHaProxyBackendCurrentQueuedRequestsStats';\nimport usePrometheusHaProxyBackendMaxQueuedRequestsStats from '../../../core/hooks/usePrometheusHaProxyBackendMaxQueuedRequestsStats';\nimport usePrometheusHaProxyBackendServersTotalBytesInStats from '../../../core/hooks/usePrometheusHaProxyBackendServersTotalBytesInStats';\nimport usePrometheusHaProxyBackendServersTotalBytesOutStats from '../../../core/hooks/usePrometheusHaProxyBackendServersTotalBytesOutStats';\nimport usePrometheusHaProxyBackendServersUpDownStats from '../../../core/hooks/usePrometheusHaProxyBackendServersUpDownStats';\nimport usePrometheusHaProxyBackendsUpDownStats from '../../../core/hooks/usePrometheusHaProxyBackendsUpDownStats';\nimport usePrometheusHaProxyBackendTotalBytesInStats from '../../../core/hooks/usePrometheusHaProxyBackendTotalBytesInStats';\nimport usePrometheusHaProxyBackendTotalNumberOfConnectionErrorsStats from '../../../core/hooks/usePrometheusHaProxyBackendTotalNumberOfConnectionErrorsStats';\nimport usePrometheusHaProxyBackendTotalBytesOutStats from '../../../core/hooks/usePrometheusHaProxyBackendTotalBytesOutStats';\nimport usePrometheusHaProxyCurrentSessionRateBackendsStats from '../../../core/hooks/usePrometheusHaProxyCurrentSessionRateBackendsStats';\nimport usePrometheusHaProxyCurrentSessionsBackendServersStats from '../../../core/hooks/usePrometheusHaProxyCurrentSessionsBackendServersStats';\nimport usePrometheusHaProxyCurrentSessionsByBackendStats from '../../../core/hooks/usePrometheusHaProxyCurrentSessionsByBackendStats';\nimport usePrometheusHaProxyCurrentSessionRateBackendServersStats from '../../../core/hooks/usePrometheusHaProxyCurrentSessionRateBackendServersStats';\nimport usePrometheusHaProxyMaxSessionBackendServersStats from '../../../core/hooks/usePrometheusHaProxyMaxSessionBackendServersStats';\nimport usePrometheusHaProxySessionsStats from '../../../core/hooks/usePrometheusHaProxySessionsStats';\nimport usePrometheusHaProxyTotalInOutStats from '../../../core/hooks/usePrometheusHaProxyTotalInOutStats';\nimport PrometheusHaProxyBackendsUpDownChart from '../../ccx/charts/PrometheusHaProxyBackendsUpDownChart';\nimport PrometheusHaProxyBackendServersUpDownChart from '../../ccx/charts/PrometheusHaProxyBackendServersUpDownChart';\nimport PrometheusHaProxyBackendTotalBytesInChart from '../../ccx/charts/PrometheusHaProxyBackendTotalBytesInChart';\nimport PrometheusHaProxyTotalInOutChart from '../../ccx/charts/PrometheusHaProxyTotalInOutChart';\nimport PrometheusHaProxyBackendServersTotalBytesInChart from '../../ccx/charts/PrometheusHaProxyBackendServersTotalBytesInChart';\nimport PrometheusHaProxyBackendServersTotalBytesOutChart from '../../ccx/charts/PrometheusHaProxyBackendServersTotalBytesOutChart';\nimport PrometheusHaProxyBackendTotalBytesOutChart from '../../ccx/charts/PrometheusHaProxyBackendTotalBytesOutChart';\nimport PrometheusHaProxyCurrentSessionsBackendServersChart from '../../ccx/charts/PrometheusHaProxyCurrentSessionsBackendServersChart';\nimport PrometheusHaProxyCurrentSessionsByBackendChart from '../../ccx/charts/PrometheusHaProxyCurrentSessionsByBackendChart';\nimport PrometheusHaProxyCurrentSessionRateBackendsChart from '../../ccx/charts/PrometheusHaProxyCurrentSessionRateBackendsChart';\nimport PrometheusHaProxyCurrentSessionRateBackendServersChart from '../../ccx/charts/PrometheusHaProxyCurrentSessionRateBackendServersChart';\nimport PrometheusHaProxyMaxSessionBackendServersChart from '../../ccx/charts/PrometheusHaProxyMaxSessionBackendServersChart';\nimport PrometheusHaProxySessionsChart from '../../ccx/charts/PrometheusHaProxySessionsChart';\nimport PrometheusHaProxyBackendTotalNumberOfConnectionErrorsChart from '../../ccx/charts/PrometheusHaProxyBackendTotalNumberOfConnectionErrorsChart';\nimport PrometheusHaProxyBackendMaxQueuedRequestsChart from '../../ccx/charts/PrometheusHaProxyBackendMaxQueuedRequestsChart';\nimport PrometheusHaProxyBackendCurrentQueuedRequestsChart from '../../ccx/charts/PrometheusHaProxyBackendCurrentQueuedRequestsChart';\n\ntype HaProxyLbDashboardProps = {\n uuid: string;\n host_uuid: string;\n port: number;\n from?: string;\n to?: string;\n interval: number;\n hidden?: boolean;\n displaySummary?: boolean;\n onLoading?: Function;\n};\n\nfunction HaProxyLbDashboard({\n uuid,\n host_uuid,\n port,\n from,\n to,\n interval,\n hidden,\n displaySummary,\n onLoading,\n}: HaProxyLbDashboardProps): ReactElement {\n const {\n stats: backendCurrentQueuedRequestsStats,\n refresh: backendCurrentQueuedRequestsStatsRefresh,\n loading: backendCurrentQueuedRequestsStatsLoading,\n } = usePrometheusHaProxyBackendCurrentQueuedRequestsStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: backendMaxQueuedRequestsStats,\n refresh: backendMaxQueuedRequestsStatsRefresh,\n loading: backendMaxQueuedRequestsStatsLoading,\n } = usePrometheusHaProxyBackendMaxQueuedRequestsStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: backendServersTotalBytesInStats,\n refresh: backendServersTotalBytesInStatsRefresh,\n loading: backendServersTotalBytesInStatsLoading,\n } = usePrometheusHaProxyBackendServersTotalBytesInStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: backendServersTotalBytesOutStats,\n refresh: backendServersTotalBytesOutStatsRefresh,\n loading: backendServersTotalBytesOutStatsLoading,\n } = usePrometheusHaProxyBackendServersTotalBytesOutStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: backendServersUpDownStats,\n refresh: backendServersUpDownStatsRefresh,\n loading: backendServersUpDownStatsLoading,\n } = usePrometheusHaProxyBackendServersUpDownStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: backendTotalBytesInStats,\n refresh: backendTotalBytesInStatsRefresh,\n loading: backendTotalBytesInStatsLoading,\n } = usePrometheusHaProxyBackendTotalBytesInStats(uuid, host_uuid, from, to);\n\n const {\n stats: backendTotalBytesOutStats,\n refresh: backendTotalBytesOutStatsRefresh,\n loading: backendTotalBytesOutStatsLoading,\n } = usePrometheusHaProxyBackendTotalBytesOutStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: backendTotalNumberOfConnectionErrorsStats,\n refresh: backendTotalNumberOfConnectionErrorsStatsRefresh,\n loading: backendTotalNumberOfConnectionErrorsStatsLoading,\n } = usePrometheusHaProxyBackendTotalNumberOfConnectionErrorsStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: backendsUpDownStats,\n refresh: backendsUpDownStatsRefresh,\n loading: backendsUpDownStatsLoading,\n } = usePrometheusHaProxyBackendsUpDownStats(uuid, host_uuid, from, to);\n\n const {\n stats: currentSessionRateBackendServersStats,\n refresh: currentSessionRateBackendServersStatsRefresh,\n loading: currentSessionRateBackendServersStatsLoading,\n } = usePrometheusHaProxyCurrentSessionRateBackendServersStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: currentSessionRateBackendsStats,\n refresh: currentSessionRateBackendsStatsRefresh,\n loading: currentSessionRateBackendsStatsLoading,\n } = usePrometheusHaProxyCurrentSessionRateBackendsStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: currentSessionsBackendServersStats,\n refresh: currentSessionsBackendServersStatsRefresh,\n loading: currentSessionsBackendServersStatsLoading,\n } = usePrometheusHaProxyCurrentSessionsBackendServersStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: currentSessionsByBackendStats,\n refresh: currentSessionsByBackendStatsRefresh,\n loading: currentSessionsByBackendStatsLoading,\n } = usePrometheusHaProxyCurrentSessionsByBackendStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: maxSessionBackendServersStats,\n refresh: maxSessionBackendServersStatsRefresh,\n loading: maxSessionBackendServersStatsLoading,\n } = usePrometheusHaProxyMaxSessionBackendServersStats(\n uuid,\n host_uuid,\n from,\n to\n );\n\n const {\n stats: sessionsStats,\n refresh: sessionsStatsRefresh,\n loading: sessionsStatsLoading,\n } = usePrometheusHaProxySessionsStats(uuid, host_uuid, from, to);\n\n const {\n stats: totalInOutStats,\n refresh: totalInOutStatsRefresh,\n loading: totalInOutStatsLoading,\n } = usePrometheusHaProxyTotalInOutStats(uuid, host_uuid, from, to);\n\n const [\n backendCurrentQueuedRequestsStatsInterval,\n setBackendCurrentQueuedRequestsStatsInterval,\n ] = useState(undefined);\n const [\n backendMaxQueuedRequestsStatsInterval,\n setBackendMaxQueuedRequestsStatsInterval,\n ] = useState(undefined);\n const [\n backendServersTotalBytesInStatsInterval,\n setBackendServersTotalBytesInStatsInterval,\n ] = useState(undefined);\n const [\n backendServersTotalBytesOutStatsInterval,\n setBackendServersTotalBytesOutStatsInterval,\n ] = useState(undefined);\n const [\n backendServersUpDownStatsInterval,\n setBackendServersUpDownStatsInterval,\n ] = useState(undefined);\n const [\n backendTotalBytesInStatsInterval,\n setBackendTotalBytesInStatsInterval,\n ] = useState(undefined);\n const [\n backendTotalBytesOutStatsInterval,\n setBackendTotalBytesOutStatsInterval,\n ] = useState(undefined);\n const [\n backendTotalNumberOfConnectionErrorsStatsInterval,\n setBackendTotalNumberOfConnectionErrorsStatsInterval,\n ] = useState(undefined);\n const [backendsUpDownStatsInterval, setBackendsUpDownStatsInterval] =\n useState(undefined);\n const [\n currentSessionRateBackendServersStatsInterval,\n setCurrentSessionRateBackendServersStatsInterval,\n ] = useState(undefined);\n const [\n currentSessionRateBackendsStatsInterval,\n setCurrentSessionRateBackendsStatsInterval,\n ] = useState(undefined);\n const [\n currentSessionsBackendServersStatsInterval,\n setCurrentSessionsBackendServersStatsInterval,\n ] = useState(undefined);\n const [\n currentSessionsByBackendStatsInterval,\n setCurrentSessionsByBackendStatsInterval,\n ] = useState(undefined);\n const [\n maxSessionBackendServersStatsInterval,\n setMaxSessionBackendServersStatsInterval,\n ] = useState(undefined);\n const [sessionsStatsInterval, setSessionsStatsInterval] = useState<\n number | undefined\n >(undefined);\n const [totalInOutStatsInterval, setTotalInOutStatsInterval] = useState<\n number | undefined\n >(undefined);\n\n const [refreshInterval, setRefreshInterval] = useState(interval);\n\n useEffect(() => {\n let interval: any;\n if (backendCurrentQueuedRequestsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n backendCurrentQueuedRequestsStatsRefresh();\n }, refreshInterval);\n setBackendCurrentQueuedRequestsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [backendCurrentQueuedRequestsStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (backendMaxQueuedRequestsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n backendMaxQueuedRequestsStatsRefresh();\n }, refreshInterval);\n setBackendCurrentQueuedRequestsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [backendMaxQueuedRequestsStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (backendServersTotalBytesInStats && refreshInterval > 0) {\n interval = setInterval(() => {\n backendServersTotalBytesInStatsRefresh();\n }, refreshInterval);\n setBackendMaxQueuedRequestsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [backendServersTotalBytesInStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (backendServersTotalBytesOutStats && refreshInterval > 0) {\n interval = setInterval(() => {\n backendServersTotalBytesOutStatsRefresh();\n }, refreshInterval);\n setBackendServersTotalBytesInStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [backendServersTotalBytesOutStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (backendServersUpDownStats && refreshInterval > 0) {\n interval = setInterval(() => {\n backendServersUpDownStatsRefresh();\n }, refreshInterval);\n setBackendServersTotalBytesOutStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [backendServersUpDownStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (backendTotalBytesInStats && refreshInterval > 0) {\n interval = setInterval(() => {\n backendTotalBytesInStatsRefresh();\n }, refreshInterval);\n setBackendServersUpDownStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [backendTotalBytesInStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (backendTotalBytesOutStats && refreshInterval > 0) {\n interval = setInterval(() => {\n backendTotalBytesOutStatsRefresh();\n }, refreshInterval);\n setBackendTotalBytesInStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [backendTotalBytesOutStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (backendTotalNumberOfConnectionErrorsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n backendTotalNumberOfConnectionErrorsStatsRefresh();\n }, refreshInterval);\n setBackendTotalBytesOutStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [backendTotalNumberOfConnectionErrorsStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (backendsUpDownStats && refreshInterval > 0) {\n interval = setInterval(() => {\n backendsUpDownStatsRefresh();\n }, refreshInterval);\n setBackendTotalNumberOfConnectionErrorsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [backendsUpDownStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (currentSessionRateBackendServersStats && refreshInterval > 0) {\n interval = setInterval(() => {\n currentSessionRateBackendServersStatsRefresh();\n }, refreshInterval);\n setBackendsUpDownStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [currentSessionRateBackendServersStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (currentSessionRateBackendsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n currentSessionRateBackendsStatsRefresh();\n }, refreshInterval);\n setCurrentSessionRateBackendServersStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [currentSessionRateBackendsStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (currentSessionsBackendServersStats && refreshInterval > 0) {\n interval = setInterval(() => {\n currentSessionsBackendServersStatsRefresh();\n }, refreshInterval);\n setCurrentSessionsBackendServersStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [currentSessionsBackendServersStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (currentSessionsByBackendStats && refreshInterval > 0) {\n interval = setInterval(() => {\n currentSessionsByBackendStatsRefresh();\n }, refreshInterval);\n setCurrentSessionsByBackendStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [currentSessionsByBackendStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (maxSessionBackendServersStats && refreshInterval > 0) {\n interval = setInterval(() => {\n maxSessionBackendServersStatsRefresh();\n }, refreshInterval);\n setMaxSessionBackendServersStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [maxSessionBackendServersStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (sessionsStats && refreshInterval > 0) {\n interval = setInterval(() => {\n sessionsStatsRefresh();\n }, refreshInterval);\n setSessionsStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [sessionsStats, refreshInterval]);\n\n useEffect(() => {\n let interval: any;\n if (totalInOutStats && refreshInterval > 0) {\n interval = setInterval(() => {\n totalInOutStatsRefresh();\n }, refreshInterval);\n setTotalInOutStatsInterval(interval);\n }\n return () => clearInterval(interval);\n }, [totalInOutStats, refreshInterval]);\n\n useEffect(() => {\n if (interval === 0) {\n // when interval is 0, we must pause the refresh (clear existing intervals)\n clearInterval(backendCurrentQueuedRequestsStatsInterval);\n clearInterval(backendMaxQueuedRequestsStatsInterval);\n clearInterval(backendServersTotalBytesInStatsInterval);\n clearInterval(backendServersTotalBytesOutStatsInterval);\n clearInterval(backendServersUpDownStatsInterval);\n clearInterval(backendTotalBytesInStatsInterval);\n clearInterval(backendTotalBytesOutStatsInterval);\n clearInterval(backendTotalNumberOfConnectionErrorsStatsInterval);\n clearInterval(backendsUpDownStatsInterval);\n clearInterval(currentSessionRateBackendServersStatsInterval);\n clearInterval(currentSessionRateBackendsStatsInterval);\n clearInterval(currentSessionsBackendServersStatsInterval);\n clearInterval(currentSessionsByBackendStatsInterval);\n clearInterval(maxSessionBackendServersStatsInterval);\n clearInterval(sessionsStatsInterval);\n clearInterval(totalInOutStatsInterval);\n setBackendCurrentQueuedRequestsStatsInterval(0);\n setBackendMaxQueuedRequestsStatsInterval(0);\n setBackendServersTotalBytesInStatsInterval(0);\n setBackendServersTotalBytesOutStatsInterval(0);\n setBackendServersUpDownStatsInterval(0);\n setBackendTotalBytesInStatsInterval(0);\n setBackendTotalBytesOutStatsInterval(0);\n setBackendTotalNumberOfConnectionErrorsStatsInterval(0);\n setBackendsUpDownStatsInterval(0);\n setCurrentSessionRateBackendServersStatsInterval(0);\n setCurrentSessionRateBackendsStatsInterval(0);\n setCurrentSessionsBackendServersStatsInterval(0);\n setCurrentSessionsByBackendStatsInterval(0);\n setMaxSessionBackendServersStatsInterval(0);\n setSessionsStatsInterval(0);\n setTotalInOutStatsInterval(0);\n }\n setRefreshInterval(interval);\n }, [interval]);\n\n useEffect(() => {\n if (hidden) {\n // clear interval to stop updating data if the tab is not active (charts are not visible)\n clearInterval(backendCurrentQueuedRequestsStatsInterval);\n clearInterval(backendMaxQueuedRequestsStatsInterval);\n clearInterval(backendServersTotalBytesInStatsInterval);\n clearInterval(backendServersTotalBytesOutStatsInterval);\n clearInterval(backendServersUpDownStatsInterval);\n clearInterval(backendTotalBytesInStatsInterval);\n clearInterval(backendTotalBytesOutStatsInterval);\n clearInterval(backendTotalNumberOfConnectionErrorsStatsInterval);\n clearInterval(backendsUpDownStatsInterval);\n clearInterval(currentSessionRateBackendServersStatsInterval);\n clearInterval(currentSessionRateBackendsStatsInterval);\n clearInterval(currentSessionsBackendServersStatsInterval);\n clearInterval(currentSessionsByBackendStatsInterval);\n clearInterval(maxSessionBackendServersStatsInterval);\n clearInterval(sessionsStatsInterval);\n clearInterval(totalInOutStatsInterval);\n setBackendCurrentQueuedRequestsStatsInterval(0);\n setBackendMaxQueuedRequestsStatsInterval(0);\n setBackendServersTotalBytesInStatsInterval(0);\n setBackendServersTotalBytesOutStatsInterval(0);\n setBackendServersUpDownStatsInterval(0);\n setBackendTotalBytesInStatsInterval(0);\n setBackendTotalBytesOutStatsInterval(0);\n setBackendTotalNumberOfConnectionErrorsStatsInterval(0);\n setBackendsUpDownStatsInterval(0);\n setCurrentSessionRateBackendServersStatsInterval(0);\n setCurrentSessionRateBackendsStatsInterval(0);\n setCurrentSessionsBackendServersStatsInterval(0);\n setCurrentSessionsByBackendStatsInterval(0);\n setMaxSessionBackendServersStatsInterval(0);\n setSessionsStatsInterval(0);\n setTotalInOutStatsInterval(0);\n } else if (\n backendCurrentQueuedRequestsStatsInterval === 0 ||\n backendMaxQueuedRequestsStatsInterval === 0 ||\n backendServersTotalBytesInStatsInterval === 0 ||\n backendServersTotalBytesOutStatsInterval === 0 ||\n backendServersUpDownStatsInterval === 0 ||\n backendTotalBytesInStatsInterval === 0 ||\n backendTotalBytesOutStatsInterval === 0 ||\n backendTotalNumberOfConnectionErrorsStatsInterval === 0 ||\n backendsUpDownStatsInterval === 0 ||\n currentSessionRateBackendServersStatsInterval === 0 ||\n currentSessionRateBackendsStatsInterval === 0 ||\n currentSessionsBackendServersStatsInterval === 0 ||\n currentSessionsByBackendStatsInterval === 0 ||\n maxSessionBackendServersStatsInterval === 0 ||\n sessionsStatsInterval === 0 ||\n totalInOutStatsInterval === 0\n ) {\n // force refresh if the interval is 0, otherwise, the interval will refresh data soon\n // interval is undefined on the first load\n // interval will be 0 when paused or tab is hidden\n backendCurrentQueuedRequestsStatsRefresh();\n backendMaxQueuedRequestsStatsRefresh();\n backendServersTotalBytesInStatsRefresh();\n backendServersTotalBytesOutStatsRefresh();\n backendServersUpDownStatsRefresh();\n backendTotalBytesInStatsRefresh();\n backendTotalBytesOutStatsRefresh();\n backendTotalNumberOfConnectionErrorsStatsRefresh();\n backendsUpDownStatsRefresh();\n currentSessionRateBackendServersStatsRefresh();\n currentSessionRateBackendsStatsRefresh();\n currentSessionsBackendServersStatsRefresh();\n currentSessionsByBackendStatsRefresh();\n maxSessionBackendServersStatsRefresh();\n sessionsStatsRefresh();\n totalInOutStatsRefresh();\n }\n }, [hidden]);\n\n useEffect(() => {\n if (\n backendCurrentQueuedRequestsStatsLoading ||\n backendMaxQueuedRequestsStatsLoading ||\n backendServersTotalBytesInStatsLoading ||\n backendServersTotalBytesOutStatsLoading ||\n backendServersUpDownStatsLoading ||\n backendTotalBytesInStatsLoading ||\n backendTotalBytesOutStatsLoading ||\n backendTotalNumberOfConnectionErrorsStatsLoading ||\n backendsUpDownStatsLoading ||\n currentSessionRateBackendServersStatsLoading ||\n currentSessionRateBackendsStatsLoading ||\n currentSessionsBackendServersStatsLoading ||\n currentSessionsByBackendStatsLoading ||\n maxSessionBackendServersStatsLoading ||\n sessionsStatsLoading ||\n totalInOutStatsLoading\n ) {\n onLoading && onLoading(true);\n } else {\n onLoading && onLoading(false);\n }\n }, [\n backendCurrentQueuedRequestsStatsLoading,\n backendMaxQueuedRequestsStatsLoading,\n backendServersTotalBytesInStatsLoading,\n backendServersTotalBytesOutStatsLoading,\n backendServersUpDownStatsLoading,\n backendTotalBytesInStatsLoading,\n backendTotalBytesOutStatsLoading,\n backendTotalNumberOfConnectionErrorsStatsLoading,\n backendsUpDownStatsLoading,\n currentSessionRateBackendServersStatsLoading,\n currentSessionRateBackendsStatsLoading,\n currentSessionsBackendServersStatsLoading,\n currentSessionsByBackendStatsLoading,\n maxSessionBackendServersStatsLoading,\n sessionsStatsLoading,\n totalInOutStatsLoading,\n ]);\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n );\n}\n\nexport default HaProxyLbDashboard;\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusHaProxyBackendCurrentQueuedRequestsStats from '../../types/PrometheusHaProxyBackendCurrentQueuedRequestsStats';\n\nexport default function usePrometheusHaProxyBackendCurrentQueuedRequestsStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusHaProxyBackendCurrentQueuedRequestsStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getHaProxyBackendCurrentQueuedRequests(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusHaProxyBackendCurrentQueuedRequestsStats(\n d\n )\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusHaProxyBackendMaxQueuedRequestsStats from '../../types/PrometheusHaProxyBackendMaxQueuedRequestsStats';\n\nexport default function usePrometheusHaProxyBackendMaxQueuedRequestsStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusHaProxyBackendMaxQueuedRequestsStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getHaProxyBackendMaxQueuedRequests(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusHaProxyBackendMaxQueuedRequestsStats(\n d\n )\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n }\n setUpdating(false);\n setLoading(false);\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusHaProxyBackendServersTotalBytesInStats from '../../types/PrometheusHaProxyBackendServersTotalBytesInStats';\n\nexport default function usePrometheusHaProxyBackendServersTotalBytesInStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusHaProxyBackendServersTotalBytesInStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getHaProxyBackendServersTotalBytesIn(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusHaProxyBackendServersTotalBytesInStats(\n d\n )\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusHaProxyBackendServersTotalBytesOutStats from '../../types/PrometheusHaProxyBackendServersTotalBytesOutStats';\n\nexport default function usePrometheusHaProxyBackendServersTotalBytesOutStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusHaProxyBackendServersTotalBytesOutStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getHaProxyBackendServersTotalBytesOut(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusHaProxyBackendServersTotalBytesOutStats(\n d\n )\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusHaProxyBackendServersUpDownStats from '../../types/PrometheusHaProxyBackendServersUpDownStats';\n\nexport default function usePrometheusHaProxyBackendServersUpDownStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusHaProxyBackendServersUpDownStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getHaProxyBackendServersUpDown(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusHaProxyBackendServersUpDownStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusHaProxyBackendTotalBytesInStats from '../../types/PrometheusHaProxyBackendTotalBytesInStats';\n\nexport default function usePrometheusHaProxyBackendTotalBytesInStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusHaProxyBackendTotalBytesInStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getHaProxyBackendTotalBytesIn(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusHaProxyBackendTotalBytesInStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusHaProxyBackendTotalBytesOutStats from '../../types/PrometheusHaProxyBackendTotalBytesOutStats';\n\nexport default function usePrometheusHaProxyBackendTotalBytesOutStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusHaProxyBackendTotalBytesOutStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getHaProxyBackendTotalBytesOut(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusHaProxyBackendTotalBytesOutStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusHaProxyBackendTotalNumberOfConnectionErrorsStats from '../../types/PrometheusHaProxyBackendTotalNumberOfConnectionErrorsStats';\n\nexport default function usePrometheusHaProxyBackendTotalNumberOfConnectionErrorsStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusHaProxyBackendTotalNumberOfConnectionErrorsStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getHaProxyBackendTotalNumberOfConnectionErrors(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusHaProxyBackendTotalNumberOfConnectionErrorsStats(\n d\n )\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusHaProxyBackendsUpDownStats from '../../types/PrometheusHaProxyBackendsUpDownStats';\n\nexport default function usePrometheusHaProxyBackendsUpDownStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusHaProxyBackendsUpDownStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getHaProxyBackendsUpDown(\n uuid,\n host_uuid,\n from,\n to\n );\n\n setStats(\n details.map(\n (d: any) => new PrometheusHaProxyBackendsUpDownStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusHaProxyCurrentSessionRateBackendServersStats from '../../types/PrometheusHaProxyCurrentSessionRateBackendServersStats';\n\nexport default function usePrometheusHaProxyCurrentSessionRateBackendServersStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusHaProxyCurrentSessionRateBackendServersStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getHaProxyCurrentSessionRateBackendServers(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusHaProxyCurrentSessionRateBackendServersStats(\n d\n )\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusHaProxyCurrentSessionRateBackendsStats from '../../types/PrometheusHaProxyCurrentSessionRateBackendsStats';\n\nexport default function usePrometheusHaProxyCurrentSessionRateBackendsStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusHaProxyCurrentSessionRateBackendsStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getHaProxyCurrentSessionRateBackends(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusHaProxyCurrentSessionRateBackendsStats(\n d\n )\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusHaProxyCurrentSessionsBackendServersStats from '../../types/PrometheusHaProxyCurrentSessionsBackendServersStats';\n\nexport default function usePrometheusHaProxyCurrentSessionsBackendServersStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusHaProxyCurrentSessionsBackendServersStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getHaProxyCurrentSessionsBackendServers(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusHaProxyCurrentSessionsBackendServersStats(\n d\n )\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusHaProxyCurrentSessionsByBackendStats from '../../types/PrometheusHaProxyCurrentSessionsByBackendStats';\n\nexport default function usePrometheusHaProxyCurrentSessionsByBackendStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusHaProxyCurrentSessionsByBackendStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getHaProxyCurrentSessionsByBackend(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusHaProxyCurrentSessionsByBackendStats(\n d\n )\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusHaProxyMaxSessionBackendServersStats from '../../types/PrometheusHaProxyMaxSessionBackendServersStats';\n\nexport default function usePrometheusHaProxyMaxSessionBackendServersStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusHaProxyMaxSessionBackendServersStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getHaProxyMaxSessionBackendServers(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) =>\n new PrometheusHaProxyMaxSessionBackendServersStats(\n d\n )\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusHaProxySessionsStats from '../../types/PrometheusHaProxySessionsStats';\n\nexport default function usePrometheusHaProxySessionsStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusHaProxySessionsStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details = await PrometheusStatService.getHaProxySessions(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusHaProxySessionsStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport PrometheusStatService from '../../services/PrometheusStatService';\nimport PrometheusHaProxyTotalInOutStats from '../../types/PrometheusHaProxyTotalInOutStats';\n\nexport default function usePrometheusHaProxyTotalInOutStats(\n uuid: string,\n host_uuid?: string,\n from?: string,\n to?: string\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [stats, setStats] = useState<\n PrometheusHaProxyTotalInOutStats[] | undefined\n >(undefined);\n\n const load = async () => {\n if (uuid && host_uuid) {\n try {\n const details =\n await PrometheusStatService.getHaProxyTotalInOut(\n uuid,\n host_uuid,\n from,\n to\n );\n setStats(\n details.map(\n (d: any) => new PrometheusHaProxyTotalInOutStats(d)\n )\n );\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n setUpdating(false);\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n };\n\n init();\n }, [uuid, host_uuid, from, to]);\n\n return { stats, refresh, loading, updating, error };\n}\n","import React, { ReactElement } from 'react';\nimport styles from './LbDashboard.module.less';\nimport CloudInstance from '../../../types/CloudInstance';\nimport ProxySqlLbDashboard from './ProxySqlLbDashboard';\nimport AppEmpty from '../../AppEmpty';\nimport HaProxyLbDashboard from './HaProxyLbDashboard';\n\ntype LbDashboardProps = {\n uuid: string;\n host_uuid: string;\n port: number;\n from?: string;\n to?: string;\n interval: number;\n node?: CloudInstance;\n hidden?: boolean;\n displaySummary?: boolean;\n onLoading?: Function;\n};\n\nfunction LbDashboard({\n uuid,\n host_uuid,\n port,\n from,\n to,\n interval,\n node,\n hidden,\n displaySummary,\n onLoading,\n}: LbDashboardProps): ReactElement {\n return (\n
\n {node?.isProxySql() ? (\n
\n );\n}\n\nexport default LbDashboard;\n","import { ReactElement, useContext, useEffect, useState } from 'react';\nimport { useParams, useHistory } from 'react-router-dom';\nimport styles from './DeploymentDashboard.module.less';\nimport useDataStore from '../../../core/hooks/useDataStore';\nimport { Switch, Select, Row, Col, Divider } from 'antd';\nimport AppRangePicker from '../../ccx/common/AppRangePicker';\nimport DeploymentDashboardOptions from './DeploymentDashboardOptions';\nimport HostDashboard from './HostDashboard';\nimport DbDashboard from './DbDashboard';\nimport AppLabeledComponent from '../../ccx/common/AppLabeledComponent';\nimport CloudInstance from '../../../types/CloudInstance';\nimport LbDashboard from './LbDashboard';\nimport dayjs from 'dayjs';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport DeploymentsItem from '../../../types/DeploymentsItem';\nimport { ChartsContext } from '../../../core/context/ChartsContext';\nimport { usePrivateIPs } from '../../../core/CcxEnv';\nimport AppEmpty from '../../AppEmpty';\n\ninterface UrlProps {\n dataStoreUuid: string;\n activeTab: string;\n projectUuid: string;\n tab: string;\n}\n\ninterface Props extends CcxComponentProps {\n currentDeployment: DeploymentsItem;\n}\n\nfunction DeploymentDashboard({\n currentDeployment,\n testId = 'DeploymentDashboard',\n}: Props): ReactElement {\n const [host, setHost] = useState(undefined);\n const [allHosts, setAllHost] = useState(\n undefined\n );\n const [hostUUID, setHostUUID] = useState('');\n const [port, setPort] = useState(0);\n const { dataStoreUuid, activeTab, projectUuid, tab } =\n useParams();\n const { dataStore: deployment } = useDataStore(dataStoreUuid);\n const [rangeFrom, setRangeFrom] = useState(undefined);\n const [rangeTo, setRangeTo] = useState(undefined);\n const [range, setRange] = useState('30m');\n const [refreshInterval, setRefreshInterval] = useState(30000);\n const [currentTab, setCurrentTab] = useState('host');\n const [currentHost, setCurrentHost] = useState('');\n const [currentNode, setCurrentNode] = useState(undefined);\n const [displaySummary, setDisplaySummary] = useState(false);\n const [loadingData, setLoadingData] = useState(false);\n const [hostUUIDS, setHostUUIDs] = useState();\n const [ports, setPorts] = useState();\n const [availableNodes, setAvailableNodes] = useState({\n hosts: [],\n dbNodes: [],\n });\n const [field, setField] = useState(undefined);\n\n const history = useHistory();\n\n const chartsContext = useContext(ChartsContext);\n\n const fieldSetup = {\n placeholder: 'Select A Host',\n disabled: false,\n options: [],\n };\n\n const { Option } = Select;\n\n useEffect(() => {\n chartsContext.setChartRange(undefined);\n }, []);\n\n useEffect(() => {\n if (deployment) {\n if (tab === 'db') {\n selectDbNode();\n } else {\n selectInstanceHost();\n }\n\n interface Node {\n privateIp: string;\n publicIp: string;\n port: number;\n getFqdnPortWithRole(): string;\n }\n\n const createOption = (n: Node) => {\n const option = {\n value: `${n.publicIp}:${n.port}`,\n label: n.getFqdnPortWithRole(),\n };\n\n if (usePrivateIPs) {\n option.value = `${n.privateIp}:${n.port}`;\n }\n\n return option;\n };\n\n // load available db nodes\n const availableDbNodes = deployment.getDbNodes().map(createOption);\n\n const filteredDbHosts = availableDbNodes.map((n: any) => {\n const [host, , role] = n.label.split(/[:/]/);\n return {\n value: n.value,\n label: `${host}/${role}`,\n };\n });\n\n const availableHosts = filteredDbHosts;\n\n setAvailableNodes({\n hosts: availableHosts,\n dbNodes: availableDbNodes,\n });\n }\n }, [deployment, tab]);\n\n useEffect(() => {\n if (availableNodes) {\n const newField = fieldSetup;\n switch (currentTab) {\n case 'db':\n newField.options = availableNodes.dbNodes;\n setField(newField);\n break;\n case 'host':\n newField.options = availableNodes.hosts;\n setField(newField);\n break;\n default:\n newField.options = availableNodes.hosts;\n setField(newField);\n }\n }\n }, [availableNodes, currentTab]);\n\n const handleNodeChange = (value: any) => {\n setCurrentNode(value.split(':')[0]);\n switch (currentTab) {\n case 'db':\n selectDbNode(value);\n break;\n case 'host':\n selectInstanceHost(value);\n break;\n }\n };\n\n const selectInstanceHost = (selected?: string) => {\n if (deployment) {\n const nodes = deployment.getDbNodes();\n let found: CloudInstance[] = selected\n ? nodes.filter((val: CloudInstance) => {\n return isSelectedHost(selected, val);\n })\n : nodes;\n if (found.length > 0) {\n setHost(found[0]);\n } else {\n setHost(nodes[0]);\n setAllHost(undefined);\n }\n }\n };\n\n const selectDbNode = (selected?: string) => {\n if (!deployment) return;\n\n const dbNodes = deployment.getDbNodes();\n const isAllSelected = selected === 'All' || !selected;\n\n const filteredNodes =\n isAllSelected || !selected\n ? dbNodes\n : dbNodes.filter((val) => isSelectedHost(selected, val));\n\n if (filteredNodes.length === 0) {\n setHost(undefined);\n setAllHost(undefined);\n } else {\n setHost(filteredNodes[0]);\n setAllHost(isAllSelected ? filteredNodes : undefined);\n }\n };\n\n const isSelectedHost = (selected: string, node: CloudInstance) => {\n if (usePrivateIPs) {\n return (\n `${node.privateIp}:${node.port}` === selected ||\n `${node.privateIp}` === selected\n );\n }\n\n return (\n `${node.publicIp}:${node.port}` === selected ||\n `${node.publicIp}` === selected\n );\n };\n\n useEffect(() => {\n if (host) {\n setHostUUID(host.hostUuid);\n setPort(host.port);\n }\n }, [host]);\n\n useEffect(() => {\n if (allHosts) {\n setHostUUIDs(allHosts.map((h: CloudInstance) => h.hostUuid));\n setPorts(allHosts.map((h: CloudInstance) => h.port));\n } else {\n setHostUUIDs([]);\n setPorts([]);\n }\n }, [allHosts]);\n\n useEffect(() => {\n switch (currentTab) {\n case 'db':\n selectDbNode(currentNode);\n break;\n case 'host':\n selectInstanceHost(currentNode);\n break;\n }\n }, [currentTab]);\n\n useEffect(() => {\n if (tab) {\n setCurrentTab(tab);\n }\n }, [tab]);\n\n useEffect(() => {\n let newHost;\n if (currentTab === 'lb') {\n newHost = host ? host.getFqdnPortWithRole() : 'Loading';\n } else if (currentTab !== 'host' && allHosts) {\n newHost = host ? 'Summary' : 'Loading...';\n } else {\n newHost = host ? host.getFqdnWithRole(true) : 'Loading...';\n }\n\n if (!currentDeployment?.isOperable()) {\n newHost = 'No data';\n }\n\n setCurrentHost(newHost);\n }, [host, currentTab, allHosts]);\n\n const handleTabChange = (tab: string) => {\n setCurrentTab(tab);\n history.push(\n `/projects/${projectUuid}/data-stores/${dataStoreUuid}/${activeTab}/${tab}`\n );\n };\n\n const handleDisplaySummaryChange = (value: boolean) => {\n setDisplaySummary(value);\n };\n\n const handleIntervalChange = (value: boolean) => {\n setRefreshInterval(value ? 30000 : 0);\n };\n\n const handleRangeChange = (from: any, to?: number) => {\n // from and to parameters are set only for custom ranges\n if (to && from) {\n setRangeTo(dayjs(to * 1000).format());\n setRangeFrom(dayjs(from * 1000).format());\n setRange('custom');\n } else {\n // must unset \"to\" when only \"from\" was passed\n setRangeTo(undefined);\n\n if (from) {\n // from is always passed, but in this case it's not a number but the value of the radio group\n // which is a string like '1d'\n const minutes = 1000 * 60;\n const hours = minutes * 60;\n const days = hours * 24;\n const date = new Date();\n\n chartsContext.setChartRange(from);\n\n switch (from) {\n case '30m':\n date.setTime(date.getTime() - 30 * minutes);\n break;\n case '1h':\n date.setTime(date.getTime() - 1 * hours);\n break;\n case '1d':\n date.setTime(date.getTime() - 1 * days);\n break;\n case '1w':\n date.setTime(date.getTime() - 7 * days);\n break;\n }\n\n setRangeFrom(date.toISOString());\n setRange(from);\n }\n }\n };\n\n const handleLoadingData = (value: boolean) => {\n setLoadingData(value);\n };\n\n return (\n
\n \n \n \n \n\n \n \n \n {currentTab === 'db' &&\n (host?.isMySql() || host?.isPostgreSql()) && (\n \n Summary\n \n )}\n {field?.options.map((o: any) => {\n return (\n \n {o.label}\n \n );\n })}\n \n \n \n \n \n \n \n \n \n \n \n \n\n \n\n {!currentDeployment?.isOperable() && (\n \n )}\n\n {currentDeployment?.isOperable() && currentTab === 'host' && (\n
\n );\n}\n\nexport default DeploymentDashboard;\n","export default class NotFoundError404 extends Error {\n constructor(message: string) {\n super(message);\n }\n}\n","export function maxLength(maxLength: number) {\n return {\n max: maxLength,\n message: `Up to ${maxLength} characters in length.`,\n };\n}\n","import { DatabaseType } from '../../types/Db';\nimport { maxLength } from './formValidators';\n\nexport function getDatabaseUsernameValidators(type: DatabaseType) {\n switch (type) {\n case DatabaseType.MYSQL:\n return [maxLength(16)];\n case DatabaseType.POSTGRES:\n return [\n maxLength(63),\n {\n message:\n 'Only letters, underscore (_) and numbers are allowed. The first character must be a letter or an underscore (_). No whitespaces allowed.',\n pattern: /^[a-zA-Z_]([A-Za-z0-9_]*$)/,\n },\n ];\n case DatabaseType.MSSQL:\n return [\n maxLength(128),\n {\n message:\n 'Only letters, numbers, underscores, and special characters such as @#$%^&+=.,-,[,] are allowed. The first character must be a letter or an underscore (_). No whitespaces allowed.',\n pattern: /^[a-zA-Z_]([a-zA-Z0-9_@#$%^&+=\\.\\-\\[\\]]*$)/,\n },\n ];\n }\n return [];\n}\n\nexport function getDatabaseNameValidators(type: DatabaseType) {\n switch (type) {\n case DatabaseType.MYSQL:\n return [\n maxLength(64),\n {\n message:\n 'Cannot contain / \\\\ or . characters. Cannot contain characters that are not permitted in file names.',\n pattern: /^[^\\\\/?%*:|\\\"<>.]*$/,\n },\n ];\n case DatabaseType.POSTGRES:\n return [\n maxLength(63),\n {\n message:\n 'Name must begin with a letter (a-z) or an underscore (_) and may contain letters, digits, or underscores',\n pattern: /^[a-zA-Z]\\w*$/,\n },\n ];\n case DatabaseType.MSSQL:\n return [\n maxLength(128),\n {\n message:\n 'A database name can contain only letters, numbers, and underscores',\n pattern: /^[a-zA-Z0-9_]+$/,\n },\n ];\n }\n\n return [];\n}\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { DatabaseOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport ButtonModalForm from '../ButtonModalForm';\nimport DbUserService, { AddDatabaseProps } from '../../services/DbUserService';\nimport { notification } from 'antd';\nimport CcxIconCheckCircle from '../ccx/icons/CcxIconCheckCircle';\nimport CcxIconCloseCircleTwoTone from '../ccx/icons/CcxIconCloseCircleTwoTone';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport { getDatabaseNameValidators } from '../../core/validation/databaseValidation';\nimport { DatabaseType } from '../../types/Db';\nimport useDbUsers from '../../core/hooks/useDbUsers';\nimport DbUser from '../../types/DbUser';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport usePiwikPro from '../../core/hooks/usePiwikPro';\nimport {\n CLICK_EVENT,\n DATASTORE_ADDING_DATABASE_TRIGGERED_SUCCESSFULLY,\n DATASTORE_ADDING_DATABASE_TRIGGERED_FAILED,\n} from '../../core/PiwikConstants';\nimport { CAN_ADD_DATABASE } from '../../core/PermissionRoles';\nimport Can from '../../core/providers/Can';\n\ninterface AddDbDatabaseProps extends CcxComponentProps {\n uuid: string;\n onSuccess: Function;\n type: DatabaseType;\n currentDeployment?: DeploymentsItem | null | undefined;\n}\n\nfunction AddDbDatabase({\n onSuccess,\n uuid,\n testId = 'AddDbDatabase',\n type,\n currentDeployment,\n}: AddDbDatabaseProps): ReactElement {\n const { dbUsers } = useDbUsers(uuid);\n const { trackEvent } = usePiwikPro();\n const [usersHosts, setUsersHosts] = useState([]);\n\n useEffect(() => {\n if (dbUsers && dbUsers.accounts) {\n setUsersHosts(\n dbUsers.accounts?.map((u: DbUser) => {\n return u.username;\n })\n );\n }\n }, [dbUsers]);\n\n const fields = [\n {\n name: ['dbName'],\n testId: 'AddDbDatabaseDbName',\n required: true,\n label: 'Database name',\n rules: getDatabaseNameValidators(type),\n },\n type === 'postgres' && {\n name: ['dbOwner'],\n testId: 'AddDbDatabaseDbOwner',\n required: true,\n label: 'Db owner',\n placeholder: 'Select a Db owner',\n type: 'select',\n options: usersHosts\n ? usersHosts?.map((d) => {\n return {\n label: d,\n value: d,\n };\n })\n : [],\n },\n ];\n\n const doApiRequest = async ({ dbName, dbOwner }: AddDatabaseProps) => {\n try {\n await DbUserService.addDatabase({\n uuid,\n dbName,\n dbOwner,\n });\n\n notification.open({\n message: 'Add database',\n description: `New database successfully created!`,\n icon: ,\n });\n trackEvent(\n CLICK_EVENT,\n DATASTORE_ADDING_DATABASE_TRIGGERED_SUCCESSFULLY\n );\n return true;\n } catch (e) {\n trackEvent(CLICK_EVENT, DATASTORE_ADDING_DATABASE_TRIGGERED_FAILED);\n notification.open({\n message: 'Add database',\n description: `There was an error creating your database. ${e}`,\n icon: ,\n });\n\n console.error(e);\n\n throw e;\n }\n };\n\n return (\n \n }\n onSubmit={doApiRequest}\n onSuccess={onSuccess}\n fields={fields}\n testId={testId}\n submitText=\"Create\"\n formLayout=\"vertical\"\n useGrid={true}\n >\n \n );\n}\n\nexport default AddDbDatabase;\n","import { notification, Modal, Row, Col } from 'antd';\nimport styles from './DbDatabase.module.less';\nimport AppEmpty from '../AppEmpty';\nimport { useParams } from 'react-router-dom';\nimport useDatabases from '../../core/hooks/useDatabases';\nimport AppTable from '../AppTable';\nimport { DeniedOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport AddDbDatabase from './AddDbDatabase';\nimport AppConfirmDialog from '../AppConfirmDialog';\nimport DbUserService from '../../services/DbUserService';\nimport AppLoading from '../AppLoading';\nimport CcxIconCloseCircleTwoTone from '../ccx/icons/CcxIconCloseCircleTwoTone';\nimport CcxIconInfoCircleTwoTone from '../ccx/icons/CcxIconInfoCircleTwoTone';\nimport CcxIconDeleteOutlined from '../ccx/icons/CcxIconDeleteOutlined';\nimport DbDatabase from '../../types/DbDatabase';\nimport { Tooltip } from 'antd';\nimport LazyLoader from '../LazyLoader';\nimport { DatabaseType } from '../../types/Db';\nimport numbro from 'numbro';\nimport useCmonStatus from '../../core/hooks/useCmonStatus';\nimport { isRestoringDatastore } from '../../core/helpers';\nimport { useCallback, useEffect, useState } from 'react';\nimport useDataStoreJobs from '../../core/hooks/useDataStoreJobs';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport { CAN_DELETE_DATABASE } from '../../core/PermissionRoles';\nimport Can from '../../core/providers/Can';\n\ninterface UrlProps {\n dataStoreUuid: string;\n projectUuid: string;\n tab: string;\n}\n\ntype DatabasesProps = {\n currentDeployment?: DeploymentsItem;\n};\n\nconst Databases = ({ currentDeployment }: DatabasesProps) => {\n const { dataStoreUuid } = useParams();\n\n const {\n databases,\n refresh: dbRefresh,\n loading: dbLoading,\n } = useDatabases(dataStoreUuid);\n\n const { status } = useCmonStatus();\n\n const { jobs } = useDataStoreJobs({\n dataStoreUuid: currentDeployment?.dataStoreUuid,\n });\n\n const [message, setMessage] = useState(\n 'No databases have been created yet.'\n );\n\n const checkRestoringBackup = useCallback(() => {\n if (!status?.isFunctional()) {\n return setMessage(\n 'Cannot list databases, the datastore is not available at the moment.'\n );\n }\n\n if (isRestoringDatastore(jobs) || !databases) {\n return setMessage('Cannot list databases during backup restore.');\n }\n\n if (databases.databases.length === 0) {\n return setMessage('No databases have been created yet.');\n }\n }, [status, databases, jobs]);\n\n useEffect(() => {\n checkRestoringBackup();\n }, [jobs, checkRestoringBackup, status]);\n\n const databasesColumns = [\n {\n title: 'Database Name',\n dataIndex: 'databaseName',\n key: 'databaseName',\n },\n {\n title: 'Size',\n key: 'databaseSize',\n render: (text: string, record: any) => {\n return record.databaseSize\n ? numbro(parseInt(record.databaseSize, 10)).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 1,\n })\n : '0';\n },\n },\n {\n title: 'Tables',\n key: 'numberOfTables',\n render: (text: string, record: any) => {\n return record.numberOfTables ? record.numberOfTables : '0';\n },\n },\n {\n title: 'Actions',\n key: 'actions',\n width: 90,\n render: (text: string, record: DbDatabase) => {\n const onConfirmDelete = () => {\n return new Promise(async (resolve, reject) => {\n notification.open({\n message: 'Remove database',\n description: 'The database will be removed soon.',\n icon: ,\n });\n\n Modal.destroyAll();\n\n try {\n const data = {\n uuid: dataStoreUuid,\n dbName: record.databaseName,\n };\n await DbUserService.deleteDatabase(data);\n\n dbRefresh();\n\n resolve(null);\n } catch (e) {\n notification.open({\n message: 'Remove database',\n description: `There was an error removing the database. ${e}`,\n icon: (\n \n ),\n });\n\n console.error(e);\n\n reject();\n }\n }).catch(() => console.log('Oops errors!'));\n };\n\n return (\n
\n {record.isDeleting() ? (\n \n \n \n ) : (\n <>\n {record.isDefaultDatabase() ? (\n \n \n \n ) : currentDeployment?.isMSSQL() ? (\n \n ) : (\n \n \n }\n />\n \n )}\n \n )}\n
\n );\n },\n },\n ];\n\n return (\n
\n {(currentDeployment && (\n <>\n \n \n

\n Database stats are updated once per hour and are\n approximate\n

\n \n \n {currentDeployment?.isMSSQL() ? undefined : (\n \n )}\n \n
\n\n

Databases

\n\n {dbLoading ? (\n \n ) : databases && databases?.databases.length > 0 ? (\n \n ) : (\n \n )}\n \n )) || }\n
\n );\n};\n\nexport default Databases;\n","export interface GrowthDbsClassProps {\n db_name: string;\n data_size: number;\n index_size: number;\n row_count: number;\n table_count: number;\n}\n\nexport interface GrowthDbsInterface {\n dbName: string;\n dataSize: number;\n indexSize: number;\n rowCount: number;\n tableCount: number;\n}\n\nexport interface DateRangeInterface {\n fromDate: string;\n toDate: string;\n}\n\nexport interface DbGrowthChartInterface {\n date: number;\n realValue: number;\n type: number;\n value: string;\n}\n\nexport class GrowthDbs implements GrowthDbsInterface {\n readonly dbName: string;\n readonly dataSize: number;\n readonly indexSize: number;\n readonly rowCount: number;\n readonly tableCount: number;\n\n constructor(props: GrowthDbsClassProps) {\n this.dbName = props.db_name;\n this.dataSize = props.data_size;\n this.rowCount = props.row_count;\n this.indexSize = props.index_size;\n this.tableCount = props.table_count;\n }\n}\n\nexport interface DbGrowthDirectoryClassProps {\n class_name: string;\n created: string;\n database_count: number;\n data_size: number;\n datadir: string;\n free_datadir_size: number;\n hostname: string;\n index_size: number;\n port: number;\n total_datadir_size: number;\n dbs: GrowthDbsInterface[];\n}\n\nexport interface DbGrowthDirectoryInterface {\n className: string;\n createdAt: string;\n databaseCount: number;\n dataSize: number;\n freeDataSize: number;\n dataDir: string;\n hostName: string;\n indexSize: number;\n port: number;\n totalDirSize: number;\n dbs: GrowthDbsInterface[];\n}\n\nexport class DbGrowth implements DbGrowthDirectoryInterface {\n readonly className: string;\n readonly createdAt: string;\n readonly databaseCount: number;\n readonly dataSize: number;\n readonly dataDir: string;\n readonly freeDataSize: number;\n readonly hostName: string;\n readonly indexSize: number;\n readonly port: number;\n readonly totalDirSize: number;\n readonly dbs: GrowthDbs[];\n\n constructor(props: DbGrowthDirectoryClassProps) {\n this.className = props.class_name;\n this.createdAt = props.created;\n this.databaseCount = props.database_count;\n this.dataSize = props.data_size;\n this.freeDataSize = props.free_datadir_size;\n this.dataDir = props.datadir;\n this.hostName = props.hostname;\n this.indexSize = props.index_size;\n this.port = props.port;\n this.totalDirSize = props.total_datadir_size;\n this.dbs = props.dbs.map((dbsProps: any) => new GrowthDbs(dbsProps));\n }\n}\n","import { DbGrowth } from './DbGrowth';\n\nexport interface DbGrowthDataDirectoryInterface {\n dbGrowthData: DbGrowth[];\n}\n\nexport default class DbGrowthData implements DbGrowthDataDirectoryInterface {\n readonly dbGrowthData: DbGrowth[];\n\n constructor(props?: DbGrowth[]) {\n this.dbGrowthData =\n props?.map((d: any) => {\n return new DbGrowth(d);\n }) || [];\n }\n}\n","import { API_V2_DEPLOYMENT } from '../core/CcxEnv';\nimport { DateRangeInterface } from '../types/DbGrowth';\nimport DbGrowthData from '../types/DbGrowthData';\nimport ApiService from './ApiService';\n\nexport default class DatabaseGrowthService extends ApiService {\n /**\n * Get list of available database privileges.\n * @param {string} uuid\n * @param dateRange\n */\n static async getDatabaseGrowths(\n uuid: string,\n dateRange: DateRangeInterface\n ): Promise {\n const response = await this.request(\n 'GET',\n `data-stores/${uuid}/growth?fromDate=${dateRange.fromDate}&toDate=${dateRange.toDate}`\n );\n\n return new DbGrowthData(response);\n }\n\n protected static getApiUrl() {\n return API_V2_DEPLOYMENT;\n }\n}\n","import AppChart from '../AppChart';\nimport styles from './DatabaseGrowthChart.module.less';\nimport { Datum, PlotEvent } from '@ant-design/charts';\nimport numbro from 'numbro';\nimport moment from 'moment';\nimport ChartCustomTooltip from '../ccx/charts/ChartCustomTooltip';\nimport { DbGrowthChartInterface } from '../../types/DbGrowth';\n\ninterface DatabaseGrowthChartProps {\n loading: boolean;\n activeDate: moment.Moment;\n onClickChartColumn: Function;\n chartData: DbGrowthChartInterface[];\n}\n\nconst ChartTypeFree: string = 'Free';\nconst ChartTypeOther: string = 'Other';\nconst ChartTypeIndexSize: string = 'Index Size';\nconst ChartTypeDataSize: string = 'Data Size';\n\ninterface ColorMap {\n [key: string]: string;\n}\n\nfunction DatabaseGrowthChart({\n loading,\n chartData,\n activeDate,\n onClickChartColumn,\n}: DatabaseGrowthChartProps) {\n const getColor = (type: string, date: string = '') => {\n const defaultColors: ColorMap = {\n [ChartTypeFree]: '#D9D9D980',\n [ChartTypeDataSize]: '#753FA780',\n [ChartTypeIndexSize]: '#8870b6',\n [ChartTypeOther]: '#391085',\n };\n\n const currentDateColors: ColorMap = {\n [ChartTypeFree]: '#fce7f3',\n [ChartTypeDataSize]: '#fbcfe8',\n [ChartTypeIndexSize]: '#f9a8d4',\n [ChartTypeOther]: '#f472b6',\n };\n if (\n moment(activeDate).format('DD/MM') === moment(date).format('DD/MM')\n ) {\n return currentDateColors[type];\n }\n return defaultColors[type];\n };\n\n return (\n
\n {\n return getColor(type);\n },\n columnStyle: ({ type, date }: Datum) => {\n return {\n fill: getColor(type, date),\n };\n },\n onEvent: (plot: any, event: PlotEvent) => {\n if (event.type === 'click') {\n onClickChartColumn(event?.data);\n }\n },\n appendPadding: [20, 20, 20, 20],\n yAxis: {\n meta: {\n base: 1,\n minLimit: 1,\n },\n label: {\n formatter: (text: string) => {\n return numbro(parseInt(text, 10)).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 1,\n });\n },\n },\n },\n xAxis: {\n label: {\n offset: 10,\n formatter: (text: string) => {\n return moment(text).format('DD/MM');\n },\n },\n tickLine: null,\n },\n tooltip: {\n customContent: (title: any, data: any) => {\n const getTitle = () => {\n if (!data || data.length === 0) return '';\n return (\n \n Summary for{' '}\n {moment(activeDate).format('DD/MM/YY')}\n \n );\n };\n\n const getContent = () => {\n if (!data || data.length === 0) return [];\n return data.map((d: any) => ({\n color: getColor(d?.data?.type, d.title),\n label: d?.data?.type,\n value: numbro(\n d?.data?.realValue || d?.data?.value\n ).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 1,\n }),\n }));\n };\n\n const tooltipData = {\n title: getTitle(),\n content: getContent(),\n };\n\n return (\n \n );\n },\n },\n animation: false,\n }}\n loading={loading}\n />\n
\n );\n}\n\nexport default DatabaseGrowthChart;\n","import React from 'react';\nimport moment from 'moment';\nimport { Col, DatePicker, Row } from 'antd';\nimport { HistoryOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport styles from './DatabaseGrowthHeading.module.less';\nimport { DateRangeProps } from './DatabaseGrowth';\n\ninterface DatabaseGrowthHeadingProps {\n dateFormat: string;\n disabledDate: Function;\n onChangeDateRange: Function;\n dateRange: DateRangeProps;\n}\n\nfunction DatabaseGrowthHeading({\n dateFormat,\n disabledDate,\n onChangeDateRange,\n dateRange,\n}: DatabaseGrowthHeadingProps) {\n return (\n \n \n

Database Growth

\n
\n Growth stats are updated every hour\n
\n \n \n
\n \n From\n \n onChangeDateRange({\n ...dateRange.Range,\n fromDate: moment(date).format(dateFormat),\n })\n }\n disabledDate={(current) => disabledDate(current)}\n value={moment(\n dateRange?.Range.fromDate,\n dateFormat\n ).startOf('day')}\n />\n To\n \n onChangeDateRange({\n ...dateRange.Range,\n toDate: moment(date).format('YYYY-MM-DD'),\n })\n }\n disabledDate={(current) => disabledDate(current)}\n value={moment(\n dateRange?.Range.toDate,\n dateFormat\n ).endOf('day')}\n />\n
\n \n
\n );\n}\n\nexport default DatabaseGrowthHeading;\n","import React from 'react';\nimport moment from 'moment';\nimport { GrowthDbs } from '../../types/DbGrowth';\nimport { InfoCircleOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport { Col, Row, Table, Tooltip, Typography } from 'antd';\nimport styles from './DatabaseGrowthTable.module.less';\nimport numbro from 'numbro';\n\ninterface DatabaseGrowthTableProps {\n activeDate: moment.Moment;\n dataSource: GrowthDbs[] | undefined;\n}\n\nconst headingDateFormat = 'MMM DD YYYY';\n\nfunction DatabaseGrowthTable({\n activeDate,\n dataSource,\n}: DatabaseGrowthTableProps) {\n const renderValue = (value: number) => {\n return numbro(value).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 1,\n });\n };\n\n const databaseColumns = [\n {\n title: Name,\n dataIndex: 'dbName',\n key: 'dbName',\n },\n {\n title: Tables,\n dataIndex: 'tableCount',\n key: 'tableCount',\n },\n {\n title: Data Size,\n dataIndex: 'dataSize',\n key: 'dataSize',\n render: renderValue,\n },\n {\n title: Index Size,\n dataIndex: 'indexSize',\n key: 'indexSize',\n render: renderValue,\n },\n {\n title: Row Count,\n dataIndex: 'rowCount',\n key: 'rowCount',\n },\n ];\n return (\n <>\n {' '}\n \n \n \n Top Largest Databases -{' '}\n {moment(activeDate).format(headingDateFormat)}\n {` `}\n {dataSource && dataSource?.length > 1 && (\n \n \n \n )}\n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default DatabaseGrowthTable;\n","import { useEffect, useState } from 'react';\nimport AppEmpty from '../AppEmpty';\nimport { useParams } from 'react-router-dom';\nimport DatabaseGrowthService from '../../services/DatabaseGrowthService';\nimport {\n DateRangeInterface,\n DbGrowth,\n DbGrowthChartInterface,\n GrowthDbs,\n} from '../../types/DbGrowth';\nimport moment from 'moment';\nimport DatabaseGrowthChart from './DatabaseGrowthChart';\nimport DatabaseGrowthHeading from './DatabaseGrowthHeading';\nimport DatabaseGrowthTable from './DatabaseGrowthTable';\nimport DeploymentsItem from '../../types/DeploymentsItem';\n\ninterface UrlProps {\n dataStoreUuid: string;\n projectUuid: string;\n tab: string;\n}\n\ntype DatabaseGrowthProps = {\n currentDeployment: DeploymentsItem;\n};\n\nexport type DateRangeProps = {\n Range: DateRangeInterface;\n fetch: boolean;\n};\n\nconst ChartTypeFree: string = 'Free';\nconst ChartTypeOther: string = 'Other';\nconst ChartTypeIndexSize: string = 'Index Size';\nconst ChartTypeDataSize: string = 'Data Size';\n\nconst dateFormat = 'YYYY-MM-DD';\n\nconst DatabaseGrowth = ({ currentDeployment }: DatabaseGrowthProps) => {\n const { dataStoreUuid } = useParams();\n\n const [databaseGrowthChartData, setDatabaseGrowthChartData] = useState<\n DbGrowthChartInterface[]\n >([]);\n\n const [databaseTable, setDatabaseTable] = useState();\n\n const [storeCreatedDate, setStoreCreatedDate] = useState(\n undefined\n );\n\n const [dateRange, setDateRange] = useState({\n Range: {\n fromDate: moment().subtract(7, 'days').format('YYYY-MM-DD'),\n toDate: moment().format('YYYY-MM-DD'),\n },\n fetch: true,\n });\n const [activeDate, setActiveDate] = useState(moment());\n const [dbGrowthData, setDbGrowthData] = useState();\n\n const [growthLoading, setGrowthLoading] = useState(false);\n\n const fetchData = async (dateRange: DateRangeInterface) => {\n setGrowthLoading(true);\n try {\n const response: any =\n await DatabaseGrowthService.getDatabaseGrowths(\n dataStoreUuid,\n dateRange\n );\n\n const sortedData: DbGrowth[] = ascendingSort(response.dbGrowthData);\n setDbGrowthData(sortedData);\n if (!storeCreatedDate) {\n getCreatedDate(sortedData);\n }\n\n processChartData(sortedData);\n processDBData(sortedData);\n } catch (error) {\n console.error(error);\n }\n\n setGrowthLoading(false);\n };\n\n useEffect(() => {\n if (dateRange.fetch) {\n fetchData(dateRange.Range);\n }\n }, [dateRange]);\n\n const onChangeDateRange = (newDate: DateRangeInterface) => {\n if (moment(newDate.fromDate).isAfter(newDate.toDate)) {\n return;\n }\n setDateRange({ Range: newDate, fetch: true });\n };\n\n const ascendingSort = (databaseGrowth: DbGrowth[]): DbGrowth[] => {\n return databaseGrowth.sort(\n (a: DbGrowth, b: DbGrowth) =>\n new Date(a.createdAt).getTime() -\n new Date(b.createdAt).getTime()\n );\n };\n\n const processChartData = (databaseGrowth: DbGrowth[]) => {\n const chart: any[] = [];\n\n databaseGrowth?.forEach((db: DbGrowth) => {\n const createdDate = moment(db.createdAt.split('T')[0]);\n\n function getRelateValue(value: number): number {\n if (value === 0) {\n return 0;\n }\n\n return (value / db.totalDirSize) * 100 > 1\n ? value\n : (1 / 100) * db.totalDirSize;\n }\n\n if (\n createdDate.isBetween(\n dateRange.Range.fromDate,\n dateRange.Range.toDate,\n 'day',\n '[]'\n )\n ) {\n const other =\n db.totalDirSize -\n db.dataSize -\n db.freeDataSize -\n db.indexSize;\n\n chart.push(\n {\n value: db.freeDataSize,\n realValue: db.freeDataSize,\n type: ChartTypeFree,\n date: moment.utc(db.createdAt).format('YYYY-MM-DD'),\n },\n {\n value: getRelateValue(db.dataSize),\n realValue: db.dataSize,\n type: ChartTypeDataSize,\n date: moment.utc(db.createdAt).format('YYYY-MM-DD'),\n },\n {\n value: getRelateValue(db.indexSize),\n realValue: db.indexSize,\n type: ChartTypeIndexSize,\n date: moment.utc(db.createdAt).format('YYYY-MM-DD'),\n },\n {\n value: getRelateValue(other),\n realValue: other,\n type: ChartTypeOther,\n date: moment.utc(db.createdAt).format('YYYY-MM-DD'),\n }\n );\n }\n });\n\n chart.sort((a, b) => {\n return new Date(a.date).getTime() - new Date(b.date).getTime();\n });\n\n setDatabaseGrowthChartData(chart);\n };\n\n const processDBData = (\n databaseGrowth: DbGrowth[],\n date: moment.Moment = moment()\n ) => {\n const findMatchedDate = databaseGrowth.find((database: DbGrowth) =>\n moment(database.createdAt).isSame(date, 'day')\n );\n\n if (findMatchedDate) {\n setDatabaseTable(findMatchedDate.dbs);\n }\n };\n\n function getCreatedDate(dbGrowthList: DbGrowth[]) {\n if (dbGrowthList.length === 0) {\n const dateToday = moment().format(dateFormat).toString();\n\n setStoreCreatedDate(dateToday);\n\n setDateRange({\n Range: {\n fromDate: dateToday,\n toDate: moment().format(dateFormat).toString(),\n },\n fetch: false,\n });\n\n return null;\n }\n\n let createdDate = null;\n\n const createdStore = moment(dbGrowthList[0].createdAt)\n .utcOffset(0)\n .format(dateFormat)\n .toString();\n\n if (dbGrowthList.length > 14) {\n createdDate = moment()\n .subtract(Math.min(dbGrowthList.length, 14), 'days')\n .format(dateFormat)\n .toString();\n }\n\n setStoreCreatedDate(createdStore.toString());\n\n setDateRange({\n Range: {\n fromDate: createdDate ? createdDate : createdStore,\n toDate: moment().format(dateFormat).toString(),\n },\n fetch: false,\n });\n }\n\n const disabledDate = (current: moment.Moment): boolean => {\n const earliestDate = moment(storeCreatedDate).startOf('day');\n\n return !current.isBetween(earliestDate, moment(), 'day', '[]');\n };\n\n const onClickChartColumn = (data: any) => {\n const { date } = data?.data;\n setActiveDate(moment(date));\n if (dbGrowthData) {\n processDBData(dbGrowthData, date);\n }\n };\n\n return (\n <>\n {(currentDeployment && (\n <>\n \n\n \n \n )) || }\n\n \n \n );\n};\n\nexport default DatabaseGrowth;\n","import { ReactElement, useEffect } from 'react';\nimport { Tabs } from 'antd';\nimport { useHistory, useParams } from 'react-router-dom';\nimport Databases from './Databases';\nimport DatabaseGrowth from './DatabaseGrowth';\nimport DeploymentsItem from '../../types/DeploymentsItem';\n\ninterface UrlProps {\n dataStoreUuid: string;\n projectUuid: string;\n tab: string;\n}\n\ntype DbDatabaseProps = {\n currentDeployment: DeploymentsItem;\n};\n\nfunction DbDatabases({ currentDeployment }: DbDatabaseProps): ReactElement {\n const { dataStoreUuid, projectUuid, tab } = useParams();\n\n const history = useHistory();\n\n useEffect(() => {\n if (currentDeployment?.isRedis()) {\n history.goBack();\n }\n }, [currentDeployment]);\n\n return (\n
\n {\n const tab = tabKey === 'dbDatabases' ? '' : `/${tabKey}`;\n\n history.push(\n `/projects/${projectUuid}/data-stores/${dataStoreUuid}/dbDatabases${tab}`\n );\n }}\n >\n \n \n \n\n \n \n \n \n
\n );\n}\n\nexport default DbDatabases;\n","import { UserAddOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport React from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {}\n\nconst CcxIconUserAddOutlined = ({ testId }: Props) => {\n return ;\n};\n\nexport default CcxIconUserAddOutlined;\n","import { ReactElement, useEffect, useState } from 'react';\nimport ButtonModalForm from '../ButtonModalForm';\nimport DbUserService, { AddUserForm } from '../../services/DbUserService';\nimport DbDatabase from '../../types/DbDatabase';\nimport { Modal, notification } from 'antd';\nimport CcxIconUserAddOutlined from '../ccx/icons/CcxIconUserAddOutlined';\nimport CcxIconCheckCircle from '../ccx/icons/CcxIconCheckCircle';\nimport CcxIconCloseCircleTwoTone from '../ccx/icons/CcxIconCloseCircleTwoTone';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport { getDatabaseUsernameValidators } from '../../core/validation/databaseValidation';\nimport { DatabaseType } from '../../types/Db';\nimport usePiwikPro from '../../core/hooks/usePiwikPro';\nimport {\n CLICK_EVENT,\n DATASTORE_ADD_NEW_DB_USER_TRIGGERED_SUCCESSFULLY,\n DATASTORE_ADD_NEW_DB_USER_TRIGGERED_FAILED,\n DATASTORE_DB_USER_ALREADY_EXISTS,\n} from '../../core/PiwikConstants';\nimport { CAN_ADD_DATABASE_USER } from '../../core/PermissionRoles';\nimport Can from '../../core/providers/Can';\n\ntype AddDbUserProps = {\n uuid: string;\n onSuccess: Function;\n databases?: DbDatabase[] | undefined;\n currentDeployment?: DeploymentsItem | null | undefined;\n disabled?: boolean;\n defaultAdmin?: string;\n};\n\nconst isDefaultAdminMessage =\n 'You are trying to update the default admin, but the default admin user cannot be updated.';\nconst isDefaultAdminTitle = 'Default Admin cannot be overwritten';\nconst isAdminExistsTitle = 'User Will Be Overwritten';\nconst isAdminExistsMessage =\n \"Please note that updating this database user will replace the existing user's permissions and password. Ensure that this action is intentional, as it will affect their access.\";\nconst isDefaultAdmin = 'defaultAdmin';\n\nfunction AddDbUser({\n onSuccess,\n uuid,\n databases,\n currentDeployment,\n disabled = false,\n defaultAdmin,\n}: AddDbUserProps): ReactElement {\n const { trackEvent } = usePiwikPro();\n const fieldsSetup = [\n {\n name: ['dbUsername'],\n testId: 'AddDbUserDbUsername',\n required: true,\n label: 'Username',\n groupBy: 'UserCredentials',\n validators: getDatabaseUsernameValidators(\n (currentDeployment?.getServiceName() as DatabaseType) ||\n DatabaseType.UNKNOWN\n ),\n },\n {\n name: ['dbPassword'],\n testId: 'AddDbUserDbPassword',\n required: true,\n label: 'Password',\n groupBy: 'UserCredentials',\n type: 'password',\n },\n {\n name: ['dbName'],\n testId: 'AddDbUserDbName',\n required: true,\n label: 'Database name',\n placeholder: 'Select a database',\n type: 'select',\n options: [],\n },\n {\n name: ['dbAuthPlugin'],\n testId: 'AddDbAuthPlugin',\n required: true,\n label: 'Authentication plugin',\n placeholder: 'Select authentication plugin',\n type: 'select',\n options: [\n {\n label: 'caching_sha2_password',\n value: 'caching_sha2_password',\n },\n {\n label: 'mysql_native_password',\n value: 'mysql_native_password',\n },\n ],\n defaultValue: 'caching_sha2_password',\n },\n {\n name: ['allowedHost'],\n testId: 'AddDbUserAllowedHost',\n required: false,\n label: 'Allowed host',\n placeholder: 'Enter the host that is allowed to connect from.',\n },\n {\n name: ['dbUserDbCommandCategories'],\n testId: 'AddDbUserDbCommandCategories',\n required: true,\n label: 'Categories',\n placeholder: '-@dangerous and -@admin always included',\n defaultValue: '+@all',\n validators: [\n {\n message:\n 'ensure the category name as a @ sign and starts with a + or -, e.g +@all',\n pattern:\n /^\\s*(\\+@|-@)([^\\s^,]+)(?:\\s*(?:\\+@|-@)([^\\s^,]+)\\s*)*\\s*$/,\n },\n ],\n },\n {\n name: ['dbUserDbCommands'],\n testId: 'AddDbUserDbCommands',\n required: false,\n label: 'Commands',\n placeholder: 'starts with a \"+\" or \"-\" (+get or -get)',\n validators: [\n {\n pattern: /^\\s*[+-]([^\\s^,]+)(?:\\s*[+-]([^\\s^,]+)\\s*)*\\s*$/,\n message:\n 'ensure commands starts with a + or - (e.g +get -set)',\n },\n ],\n },\n {\n name: ['dbUserDbChannels'],\n testId: 'AddDbUserDbChannels',\n required: false,\n label: 'Channels',\n placeholder: 'starts with \"&\" (&channel, or &*)',\n validators: [\n {\n pattern: /^\\s*&([^\\s^,]+)(?:\\s*&([^\\s^,]+)\\s*)*\\s*$/,\n message:\n 'ensure the channel name starts with a & (e.g &channel, or &*)',\n },\n ],\n },\n {\n name: ['dbUserDbKeys'],\n testId: 'AddDbUserDbKeys',\n required: false,\n label: 'Keys',\n placeholder: 'starts with a \"~\" (~key, or ~*)',\n validators: [\n {\n pattern: /^\\s*~([^\\s^,]+)(?:\\s*~([^\\s^,]+)\\s*)*\\s*$/,\n message:\n 'ensure the key names starts with a ~ (~key, or ~*)',\n },\n ],\n },\n ];\n const [fields, setFields] = useState(fieldsSetup);\n const [title, setTitle] = useState('Create new user');\n const [isSuperUser, setIsSuperUser] = useState(false);\n const [ownDatabase, setOwnDatabase] = useState(false);\n const [isModalVisible, setIsModalVisible] = useState(false);\n\n const { confirm } = Modal;\n\n const toggleSuperUser = (value: any) => {\n setIsSuperUser(value);\n };\n\n const toggleOwnDatabase = (value: any) => {\n setOwnDatabase(value);\n };\n\n const superUserField = {\n name: ['SuperUser'],\n type: 'switch',\n label: 'Grant SUPERUSER privilege',\n onChange: (value: any) => toggleSuperUser(value),\n defaultValue: isSuperUser,\n testId: 'SuperDbUser',\n groupBy: 'SuperUser',\n className: 'SuperUserSwitch',\n };\n const ownDatabaseField = {\n name: ['ownDatabase'],\n type: 'switch',\n label: 'Create own database',\n onChange: (value: any) => toggleOwnDatabase(value),\n defaultValue: isSuperUser,\n testId: 'CreateOwnDatabase',\n groupBy: 'SuperUser',\n className: 'SuperUserSwitch',\n };\n\n const postgresFields = () => {\n return [superUserField, ownDatabaseField];\n };\n\n useEffect(() => {\n if (databases !== undefined && databases?.length > 0) {\n const newFields = fields.map((f: any) => {\n if (f.name && f.name[0] === 'dbName') {\n f.options = databases\n ? databases.map((d) => {\n return {\n label: d.databaseName,\n value: d.databaseName,\n };\n })\n : [];\n }\n return f;\n });\n setFields(newFields);\n }\n }, [databases]);\n\n useEffect(() => {\n setTitle('Create Admin user');\n if (currentDeployment?.isPostgreSql() && fields) {\n setFields([...fields.slice(0, 2), ...postgresFields()]);\n } else if (currentDeployment?.isMSSQL() && fields) {\n setFields(fields.slice(0, 2));\n } else if (currentDeployment?.isMariaDb() && fields) {\n setFields(fields.slice(0, 3));\n } else if (currentDeployment?.isPercona() && fields) {\n setFields(fields.slice(0, 4));\n } else if (currentDeployment?.isRedis() && fields) {\n setFields([\n fieldsSetup[0],\n fieldsSetup[1],\n fieldsSetup[5],\n fieldsSetup[6],\n fieldsSetup[7],\n fieldsSetup[8],\n ]);\n }\n }, [currentDeployment, isSuperUser]);\n\n const onCancel = () => {\n // do something here\n };\n\n const checkUsernameAvailability = async (\n username: string\n ): Promise => {\n try {\n if (defaultAdmin === username) {\n return isDefaultAdmin;\n }\n const allUsers = await DbUserService.getAllUsers(uuid);\n const user = allUsers.accounts.find((u) => u.username === username);\n if (user) {\n return 'admin';\n }\n return false;\n } catch (e) {\n return false;\n }\n };\n\n const addDbUserRequest = async ({\n dbUsername,\n dbPassword,\n allowedHost,\n dbName,\n dbUserDbCommandCategories,\n dbUserDbCommands,\n dbUserDbKeys,\n dbUserDbChannels,\n isAdmin = true,\n dbAuthPlugin,\n }: AddUserForm) => {\n try {\n await DbUserService.addUser({\n uuid,\n dbUsername,\n dbPassword,\n allowedHost,\n dbName,\n dbPrivileges: [\n dbUserDbCommandCategories,\n dbUserDbCommands,\n dbUserDbKeys,\n dbUserDbChannels,\n ].join(' '),\n isAdmin,\n dbAuthPlugin,\n isSuperUser,\n ownDatabase,\n });\n\n notification.open({\n message: 'Add user',\n description: `New user successfully added!`,\n icon: ,\n });\n setIsSuperUser(false);\n setOwnDatabase(false);\n setIsModalVisible(false);\n trackEvent(\n CLICK_EVENT,\n DATASTORE_ADD_NEW_DB_USER_TRIGGERED_SUCCESSFULLY\n );\n return true;\n } catch (e) {\n trackEvent(CLICK_EVENT, DATASTORE_ADD_NEW_DB_USER_TRIGGERED_FAILED);\n notification.open({\n message: 'Add user',\n description: `There was an error adding your user. ${e}`,\n icon: ,\n });\n\n console.error(e);\n setIsSuperUser(false);\n setOwnDatabase(false);\n throw e;\n }\n };\n\n const doApiRequest = async (dbUser: AddUserForm) => {\n const { dbUsername } = dbUser;\n const isUserExists: string | boolean = await checkUsernameAvailability(\n dbUsername\n );\n if (isUserExists) {\n setIsModalVisible(true);\n confirm({\n title:\n isUserExists === isDefaultAdmin\n ? isDefaultAdminTitle\n : isAdminExistsTitle,\n content:\n isUserExists === isDefaultAdmin\n ? isDefaultAdminMessage\n : isAdminExistsMessage,\n okText: 'Confirm',\n okButtonProps: {\n disabled: isUserExists === isDefaultAdmin,\n },\n\n cancelText: 'Cancel',\n onOk: async () => {\n return await addDbUserRequest(dbUser).then(() => {\n trackEvent(\n CLICK_EVENT,\n DATASTORE_ADD_NEW_DB_USER_TRIGGERED_SUCCESSFULLY\n );\n onSuccess();\n });\n },\n });\n trackEvent(CLICK_EVENT, DATASTORE_DB_USER_ALREADY_EXISTS);\n throw new Error('User already exists');\n } else {\n return await addDbUserRequest(dbUser);\n }\n };\n\n return (\n \n }\n onSubmit={doApiRequest}\n onSuccess={onSuccess}\n onCancel={onCancel}\n fields={fields}\n testId={'AddDbUser'}\n submitText=\"Create\"\n formLayout=\"vertical\"\n useGrid={false}\n handleModalForcely={isModalVisible}\n warningMessage={\n isSuperUser\n ? 'A database admin user with SUPERUSER privileges can execute commands that may leave the datastore in an unexpected, non-functional state, potentially requiring a backup restoration to resolve. With great power comes great responsibility'\n : ''\n }\n >\n \n \n \n );\n}\n\nexport default AddDbUser;\n","import React, { ReactElement } from 'react';\nimport { Col, Row, Space } from 'antd';\nimport styles from './CcxSectionHeader.module.less';\nimport CcxComponentProps from '../../../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {\n children?: ReactElement;\n}\n\nfunction CcxSectionHeader({\n children,\n testId = 'CcxSectionHeader',\n}: Props): ReactElement {\n return (\n \n
\n {children}\n \n \n );\n}\n\nexport default CcxSectionHeader;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport ButtonModalForm from '../ButtonModalForm';\nimport DbUserService, { AddUserForm } from '../../services/DbUserService';\nimport DbDatabase from '../../types/DbDatabase';\nimport { notification } from 'antd';\nimport CcxIconCheckCircle from '../ccx/icons/CcxIconCheckCircle';\nimport CcxIconCloseCircleTwoTone from '../ccx/icons/CcxIconCloseCircleTwoTone';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport { getDatabaseUsernameValidators } from '../../core/validation/databaseValidation';\nimport { DatabaseType } from '../../types/Db';\nimport DbUser from '../../types/DbUser';\nimport { EditOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport {\n CLICK_EVENT,\n DATASTORE_UPDATE_DB_USER_TRIGGERED_FAILED,\n DATASTORE_UPDATE_DB_USER_TRIGGERED_SUCCESSFULLY,\n} from '../../core/PiwikConstants';\nimport usePiwikPro from '../../core/hooks/usePiwikPro';\n\ntype UpdateDbUserProps = {\n uuid: string;\n user: DbUser;\n onSuccess: Function;\n databases?: DbDatabase[] | undefined;\n currentDeployment?: DeploymentsItem | null | undefined;\n};\n\nfunction UpdateDbUserDrawer({\n onSuccess,\n uuid,\n user,\n databases,\n currentDeployment,\n}: UpdateDbUserProps): ReactElement {\n const { trackEvent } = usePiwikPro();\n const fieldsSetup = [\n {\n name: ['dbUsername'],\n testId: 'AddDbUserDbUsername',\n required: true,\n label: 'Username',\n groupBy: 'UserCredentials',\n validators: getDatabaseUsernameValidators(\n (currentDeployment?.getServiceName() as DatabaseType) ||\n DatabaseType.UNKNOWN\n ),\n },\n {\n name: ['dbPassword'],\n testId: 'AddDbUserDbPassword',\n groupBy: 'UserCredentials',\n required: true,\n label: 'Specify a new user password',\n type: 'password',\n },\n {\n name: ['dbName'],\n testId: 'AddDbUserDbName',\n required: true,\n label: 'Database name',\n placeholder: 'Select a database',\n type: 'select',\n options: [],\n },\n {\n name: ['dbAuthPlugin'],\n testId: 'AddDbAuthPlugin',\n required: true,\n label: 'Authentication plugin',\n placeholder: 'Select authentication plugin',\n type: 'select',\n options: [\n {\n label: 'caching_sha2_password',\n value: 'caching_sha2_password',\n },\n {\n label: 'mysql_native_password',\n value: 'mysql_native_password',\n },\n ],\n defaultValue: 'caching_sha2_password',\n },\n {\n name: ['allowedHost'],\n testId: 'AddDbUserAllowedHost',\n required: false,\n label: 'Allowed host',\n placeholder: 'Enter the host that is allowed to connect from.',\n },\n {\n name: ['dbUserDbCommandCategories'],\n testId: 'AddDbUserDbCommandCategories',\n required: true,\n label: 'Categories',\n placeholder: '-@dangerous and -@admin always included',\n defaultValue: '+@all',\n validators: [\n {\n message:\n 'ensure the category name as a @ sign and starts with a + or -, e.g +@all',\n pattern:\n /^\\s*(\\+@|-@)([^\\s^,]+)(?:\\s*(?:\\+@|-@)([^\\s^,]+)\\s*)*\\s*$/,\n },\n ],\n },\n {\n name: ['dbUserDbCommands'],\n testId: 'AddDbUserDbCommands',\n required: false,\n label: 'Commands',\n placeholder: 'starts with a \"+\" or \"-\" (+get or -get)',\n validators: [\n {\n pattern: /^\\s*[+-]([^\\s^,]+)(?:\\s*[+-]([^\\s^,]+)\\s*)*\\s*$/,\n message:\n 'ensure commands starts with a + or - (e.g +get -set)',\n },\n ],\n },\n {\n name: ['dbUserDbChannels'],\n testId: 'AddDbUserDbChannels',\n required: false,\n label: 'Channels',\n placeholder: 'starts with \"&\" (&channel, or &*)',\n validators: [\n {\n pattern: /^\\s*&([^\\s^,]+)(?:\\s*&([^\\s^,]+)\\s*)*\\s*$/,\n message:\n 'ensure the channel name starts with a & (e.g &channel, or &*)',\n },\n ],\n },\n {\n name: ['dbUserDbKeys'],\n testId: 'AddDbUserDbKeys',\n required: false,\n label: 'Keys',\n placeholder: 'starts with a \"~\" (~key, or ~*)',\n validators: [\n {\n pattern: /^\\s*~([^\\s^,]+)(?:\\s*~([^\\s^,]+)\\s*)*\\s*$/,\n message:\n 'ensure the key names starts with a ~ (~key, or ~*)',\n },\n ],\n },\n ];\n const [fields, setFields] = useState(fieldsSetup);\n const [title, setTitle] = useState('Update user');\n\n useEffect(() => {\n if (databases !== undefined && databases?.length > 0) {\n const newFields = fields.map((f: any) => {\n if (f.name && f.name[0] === 'dbName') {\n f.options = databases\n ? databases.map((d) => {\n return {\n label: d.databaseName,\n value: d.databaseName,\n };\n })\n : [];\n }\n return f;\n });\n setFields(newFields);\n }\n }, [databases, user]);\n\n useEffect(() => {\n let { categories, commands, channels, keys } = {\n categories: [] as string[],\n commands: [] as string[],\n channels: [] as string[],\n keys: [] as string[],\n };\n\n user.grants.split(' ').forEach((grant: string) => {\n if (grant.startsWith('+@') || grant.startsWith('-@')) {\n categories.push(grant);\n } else if (grant.startsWith('+')) {\n commands.push(grant);\n } else if (grant.startsWith('&')) {\n channels.push(grant);\n } else if (grant.startsWith('~')) {\n keys.push(grant);\n }\n });\n const newFields = fields.map((f: any) => {\n switch (f.name[0]) {\n case 'dbUsername':\n f.defaultValue = user.username;\n f.disabled = true;\n break;\n case 'dbAuthPlugin':\n f.defaultValue = user.authPlugin;\n break;\n case 'allowedHost':\n f.defaultValue = user.hostAllow;\n break;\n case 'dbUserDbCommandCategories':\n f.defaultValue = categories.join(' ');\n break;\n case 'dbUserDbCommands':\n f.defaultValue = commands.join(' ');\n break;\n case 'dbUserDbChannels':\n f.defaultValue = channels.join(' ');\n break;\n case 'dbUserDbKeys':\n f.defaultValue = keys.join(' ');\n break;\n }\n return f;\n });\n setFields(newFields);\n }, [user]);\n\n useEffect(() => {\n setTitle('Update user');\n if (\n (currentDeployment?.isPostgreSql() ||\n currentDeployment?.isMSSQL()) &&\n fields\n ) {\n setFields(fields.slice(0, 2));\n } else if (currentDeployment?.isMariaDb() && fields) {\n setFields(fields.slice(0, 3));\n } else if (currentDeployment?.isPercona() && fields) {\n setFields(fields.slice(0, 4));\n } else if (currentDeployment?.isRedis() && fields) {\n setFields([\n fields[0],\n fields[1],\n fields[fields.length - 4],\n fields[fields.length - 3],\n fields[fields.length - 2],\n fields[fields.length - 1],\n ]);\n }\n }, [currentDeployment]);\n\n const onCancel = () => {\n // do something here\n };\n\n const doApiRequest = async ({\n dbUsername,\n dbPassword,\n allowedHost,\n dbName,\n dbUserDbCommandCategories,\n dbUserDbCommands,\n dbUserDbKeys,\n dbUserDbChannels,\n isAdmin = true,\n dbAuthPlugin,\n }: AddUserForm) => {\n try {\n await DbUserService.addUser({\n uuid,\n dbUsername,\n dbPassword,\n allowedHost,\n dbName,\n dbPrivileges: [\n dbUserDbCommandCategories,\n dbUserDbCommands,\n dbUserDbKeys,\n dbUserDbChannels,\n ]\n .filter((item) => item !== '')\n .join(' '),\n isAdmin,\n dbAuthPlugin,\n });\n\n notification.open({\n message: 'Update user',\n description: `New user successfully updated!`,\n icon: ,\n });\n trackEvent(\n CLICK_EVENT,\n DATASTORE_UPDATE_DB_USER_TRIGGERED_SUCCESSFULLY\n );\n return true;\n } catch (e) {\n trackEvent(CLICK_EVENT, DATASTORE_UPDATE_DB_USER_TRIGGERED_FAILED);\n notification.open({\n message: 'Update user',\n description: `There was an error updating your user. ${e}`,\n icon: ,\n });\n\n console.error(e);\n\n throw e;\n }\n };\n\n return (\n }\n onSubmit={doApiRequest}\n onSuccess={onSuccess}\n onCancel={onCancel}\n testId={'UpdateDbUserDrawer'}\n fields={fields}\n submitText=\"Update\"\n formLayout=\"vertical\"\n useGrid={false}\n stretchedClick={true}\n >\n \n \n );\n}\n\nexport default UpdateDbUserDrawer;\n","import CcxContextualMenuIcon from '../ccx/icons/CcxContextualMenuIcon';\nimport { Button, Dropdown, Menu, Tooltip } from 'antd';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport DbUser from '../../types/DbUser';\nimport UpdateDbUserDrawer from './UpdateDbUserDrawer';\nimport {\n DeleteOutlined,\n EditOutlined,\n} from '@severalnines/frontend_hub/libs/icons';\nimport { useRBAC } from '../../core/hooks/useRBAC';\nimport {\n CAN_DELETE_DATABASE_USER,\n CAN_MODIFY_DATABASE_USERS,\n} from '../../core/PermissionRoles';\nimport Can from '../../core/providers/Can';\n\ntype UpdateDbUserActionsMenuProps = {\n disabled?: boolean;\n deployment: DeploymentsItem;\n user: DbUser;\n onConfirmDelete: () => void;\n uuid: string;\n dbUsersRefresh: Function;\n databases?: any | undefined;\n};\nexport default function UpdateDbUserActionsMenu({\n disabled,\n deployment,\n user,\n onConfirmDelete,\n uuid,\n dbUsersRefresh,\n databases,\n}: UpdateDbUserActionsMenuProps) {\n const { hasPermission } = useRBAC();\n\n const menu = (\n \n \n }>\n \n Update\n \n \n \n \n }\n onClick={onConfirmDelete}\n >\n Delete\n \n \n \n );\n return hasPermission(CAN_MODIFY_DATABASE_USERS) ||\n hasPermission(CAN_DELETE_DATABASE_USER) ? (\n \n \n \n You are about to restore a backup created on{' '}\n {formattedDate}. This\n process will completely overwrite your\n current data and all changes since your last\n backup will be lost.\n \n }\n style={{ textAlign: 'start' }}\n type=\"warning\"\n showIcon\n />\n \n \n {point && (\n <>\n *Required\n \n )}\n \n \n onclose(false)}\n >\n Cancel\n \n \n \n \n Restore\n \n \n \n }\n >\n

\n Backup info\n

\n\n \n
\n \n \n \n \n \n \n\n \n Restore settings\n \n\n
\n \n
\n Use point in time recovery\n \n \n \n \n \n \n \n \n \n {point && (\n \n \n Choose a specific point in time you want to go back\n to.\n \n \n \n \n \n \n \n )}\n \n \n );\n}\n\nexport default BackupsModal;\n","import { Popover, Space } from 'antd';\nimport { Dispatch, ReactNode, SetStateAction } from 'react';\n\ninterface CreateDatastorePopoverProps {\n isVisible: boolean;\n setOpenPopover: Dispatch>;\n actionIcon: string;\n content: ReactNode;\n}\n\nfunction CreateDatastorePopover({\n isVisible,\n setOpenPopover,\n actionIcon,\n content,\n}: CreateDatastorePopoverProps) {\n return (\n \n {\n e.stopPropagation();\n setOpenPopover(!isVisible);\n }}\n >\n {actionIcon}\n \n \n );\n}\n\nexport default CreateDatastorePopover;\n","import DeploymentsItem from '../../types/DeploymentsItem';\nimport styles from './BackupsListCreateDatastoreButton.module.less';\nimport { useEffect, useState } from 'react';\nimport { Button, Col, Row, Typography } from 'antd';\nimport { ExclamationCircleOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport { AddDeploymentV2Props } from '../../services/ProvisionService';\nimport { useHistory } from 'react-router';\nimport CreateDatastorePopover from './CreateDatastorePopover';\nimport { useAppDispatch, useAppSelector } from '../../redux/hooks';\nimport { restoreDatastoreFromBackup } from '../../slices/restore.slice';\nimport { Draft } from '@reduxjs/toolkit';\nimport { RootState } from '../../redux/store';\nimport useDataStoreServices from '../../core/hooks/useDataStoreServices';\nimport { useParams } from 'react-router';\nimport DbService from '../../types/DbService';\nimport AppLoading from '../AppLoading';\n\ntype BackupsListCreateDatastoreButtonProps = {\n deployment: Draft;\n record: any;\n actionIcon?: any;\n};\n\nexport type UrlProps = {\n dataStoreUuid: string;\n};\n\nexport default function BackupsListCreateDatastoreButton({\n deployment,\n record,\n actionIcon,\n}: BackupsListCreateDatastoreButtonProps) {\n const { dataStoreUuid } = useParams();\n const [openPopover, setOpenPopover] = useState(false);\n const history = useHistory();\n const dispatch = useAppDispatch();\n const { user } = useAppSelector((state: RootState) => state.user);\n const { services } = useDataStoreServices({\n dataStoreUuid,\n });\n\n const onCreateDatastore = async () => {\n try {\n const azs = getAzsFromNodes();\n const backupToCreateDatastore: AddDeploymentV2Props =\n deployment.getDatastoreCreationData(record.backupId, azs);\n dispatch(restoreDatastoreFromBackup(backupToCreateDatastore));\n\n history.push({\n pathname: `/projects/${user?.getOrganizationId()}/data-stores/add`,\n });\n } catch (e) {\n console.error('Oops errors!');\n }\n };\n\n const getAzsFromNodes = (): string[] => {\n const azs: string[] = [];\n services?.dbServices?.forEach((s: DbService) => {\n if (!azs.includes(s.getAvailabilityZone())) {\n azs.push(s.getAvailabilityZone());\n }\n });\n return azs;\n };\n\n const handleCancel = () => {\n setOpenPopover(!openPopover);\n };\n\n return (\n \n \n \n \n \n \n \n Do you want to create a datastore from the\n backup?\n \n \n The datastore is created on the same cloud and\n uses the same instance configuration.\n \n \n \n \n \n \n Cancel\n \n \n \n \n Create\n \n \n \n \n }\n />\n );\n}\n","import React from 'react';\nimport BackupsListCreateDatastoreButton from './BackupsListCreateDatastoreButton';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport { Menu } from 'antd';\nimport CcxIconPlusCircleOutlined from '../ccx/icons/CcxIconPlusCircleOutlined';\nimport styles from './IncrementalCreateDatastoreButton.module.less';\nimport { Draft } from '@reduxjs/toolkit';\n\ninterface IncrementalCreateDatastoreButtonProps {\n deployment: Draft;\n record: any;\n}\n\nconst IncrementalCreateDatastoreButton = ({\n deployment,\n record,\n}: IncrementalCreateDatastoreButtonProps) => {\n return (\n \n \n Create Datastore\n \n }\n />\n \n );\n};\n\nexport default IncrementalCreateDatastoreButton;\n","import { Spin } from 'antd';\nimport AppConfirmDialog from '../AppConfirmDialog';\nimport { RedoOutlined } from '@ant-design/icons';\nimport styles from './IncrementalRestoreButton.module.less';\n\ninterface IncrementalRestoreButtonProps {\n readonly restoring?: boolean;\n readonly onConfirmRestore: Function;\n}\n\nconst IncrementalRestoreButton = ({\n restoring,\n onConfirmRestore,\n}: IncrementalRestoreButtonProps) => {\n return (\n
\n {restoring ? (\n \n ) : (\n \n {' '}\n Restore\n \n }\n title={Restore a backup}\n content=\"You are going to restore your database using the selected backup.\"\n />\n )}\n
\n );\n};\n\nexport default IncrementalRestoreButton;\n","import { Button, Dropdown, Menu } from 'antd';\nimport CcxContextualMenuIcon from '../ccx/icons/CcxContextualMenuIcon';\nimport IncrementalCreateDatastoreButton from './IncrementalCreateDatastoreButton';\nimport IncrementalRestoreButton from './IncrementalRestoreButton';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport { Draft } from '@reduxjs/toolkit';\n\ninterface IncrementalListActionsProps {\n readonly record: any;\n readonly restoring?: boolean;\n readonly onConfirmRestore: Function;\n readonly deployment: Draft;\n}\n\nconst IncrementalListActions = ({\n record,\n restoring,\n deployment,\n onConfirmRestore,\n}: IncrementalListActionsProps) => {\n const menu = (\n \n {(deployment.isMariaDb() || deployment.isPercona()) && (\n \n )}\n \n \n \n \n );\n\n return (\n \n }\n />\n \n );\n};\n\nexport default IncrementalListActions;\n","import React, { ReactElement, useState } from 'react';\nimport styles from './IncrementalBackups.module.less';\nimport AppEmpty from '../AppEmpty';\nimport useBackupsIncremental from '../../core/hooks/useBackupsIncremental';\nimport AppTable from '../AppTable';\nimport AppLoading from '../AppLoading';\nimport FriendlyDateTime from '../../types/FriendlyDateTime';\nimport ExpandableText from '../ExpandableText';\nimport { Collapse } from 'antd';\nimport BackupStatus from './BackupStatus';\nimport BackupsModal from './BackupsModal';\nimport numbro from 'numbro';\nimport IncrementalListActions from './IncrementalListActions';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport { Draft } from '@reduxjs/toolkit';\n\ntype Props = {\n dataStoreUuid: string;\n parentId: number;\n restoring: boolean | undefined;\n deployment: Draft;\n};\n\nfunction IncrementalBackups({\n dataStoreUuid,\n parentId,\n restoring,\n deployment,\n}: Props): ReactElement {\n const [currentPage, setCurrentPage] = useState(1);\n const [currentPageSize, setCurrentPageSize] = useState(10);\n const { backups, loading, page, pageSize, total } = useBackupsIncremental(\n dataStoreUuid,\n parentId,\n currentPage,\n currentPageSize\n );\n const { Panel } = Collapse;\n\n const handleTableChange = async (pagination: any) => {\n setCurrentPage(pagination.current);\n };\n\n const [openRestore, setOpenRestore] = useState(false);\n const [restoreObj, setRestoreObj] = useState();\n\n const backupsColumns = [\n {\n title: 'Serial',\n key: 'serial',\n render: (_: string, record: any, index: number) => index + 1,\n },\n {\n title: 'Method',\n dataIndex: 'backupMethod',\n key: 'backupMethod',\n },\n {\n title: 'Type',\n dataIndex: 'backupType',\n key: 'backupType',\n },\n {\n title: 'Status',\n key: 'status',\n render: (text: string, record: any) => {\n return (\n \n );\n },\n },\n {\n title: 'Started',\n dataIndex: 'startedAt',\n key: 'startedAt',\n width: 230,\n render: (text: string, record: any) => {\n const a = new FriendlyDateTime({\n date: record.startedAt,\n });\n return (\n \n );\n },\n },\n {\n title: 'Duration',\n dataIndex: 'duration',\n key: 'duration',\n width: 140,\n render: (text: string, record: any) => {\n const from = new Date(record.startedAt);\n const to = new Date(record.endedAt);\n const diff = to.getTime() - from.getTime();\n const secs = diff / 1000;\n let duration;\n if (secs > 59) {\n duration = `${(secs / 60).toFixed()} mins`;\n } else {\n duration = `${secs.toFixed()} secs`;\n }\n\n return (\n \n );\n },\n },\n {\n title: 'Size',\n dataIndex: 'size',\n key: 'size',\n width: 100,\n render: (text: string, record: any) => {\n return numbro(parseInt(record.size, 10)).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 2,\n });\n },\n },\n {\n title: 'Actions',\n key: 'actions',\n width: 85,\n render: (text: string, record: any) => {\n const onConfirmRestore = () => {\n setOpenRestore(true);\n setRestoreObj(record);\n };\n return (\n \n );\n },\n },\n ];\n\n return (\n
\n setOpenRestore(false)}\n />\n\n {loading ? (\n \n ) : backups?.length > 0 ? (\n \n \n \n \n \n ) : (\n \n )}\n
\n );\n}\n\nexport default IncrementalBackups;\n","import { useEffect, useState } from 'react';\nimport Backup from '../../types/Backup';\nimport BackupService from '../../services/BackupService';\n\nexport default function useBackupsIncremental(\n uuid: string,\n parentId: number,\n page = 1,\n pageSize = 5\n) {\n const [loading, setLoading] = useState(true);\n const [updating, setUpdating] = useState(false);\n const [total, setTotal] = useState(null);\n const [error, setError] = useState(null);\n const [backups, setBackups] = useState(\n undefined\n );\n\n const load = async () => {\n if (uuid && parentId) {\n try {\n const details = await BackupService.getIncrementalBackups(\n uuid,\n parentId,\n page,\n pageSize\n );\n setBackups(details.backups);\n setTotal(details.total);\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n // get deployments for the given user\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, [uuid, parentId, page, pageSize]);\n\n return {\n backups,\n refresh,\n loading,\n updating,\n page,\n pageSize,\n total,\n error,\n };\n}\n","import React, { ReactElement } from 'react';\nimport { Tooltip } from 'antd';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport DotLabelStatus from '../ccx/common/DotLabelStatus';\nimport Restore from '../../types/Restore';\n\ninterface Props extends CcxComponentProps {\n restore?: Restore;\n updating?: boolean;\n}\n\nfunction RestoreStatus({\n restore,\n testId = 'RestoreStatus',\n updating = false,\n}: Props): ReactElement {\n let StatusComponent = null;\n if (restore?.isStatusOk()) {\n StatusComponent = (\n \n );\n } else if (restore?.isStatusError()) {\n StatusComponent = (\n \n );\n } else if (restore?.isStatusCompleted()) {\n StatusComponent = (\n \n );\n }\n\n if (restore?.isStatusError()) {\n return (\n \n {StatusComponent}{' '}\n \n );\n }\n return (\n \n {StatusComponent}{' '}\n \n );\n}\n\nexport default RestoreStatus;\n","import { Col } from 'antd';\nimport { Progress } from 'antd';\nimport { Row } from 'antd';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport numbro from 'numbro';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport Restore from '../../types/Restore';\nimport BackupColumns from './BackupColumns';\nimport RestoreStatus from './RestoreStatus';\n\nimport styles from './RestoringBackups.module.less';\n\ndayjs.extend(utc);\n\ninterface Props extends CcxComponentProps {\n currentRestore?: Restore;\n}\nfunction RestoringBackups({\n currentRestore,\n testId = 'RestoringBackups',\n}: Props) {\n const formatSize = (size: any) => {\n return numbro(size).format({\n output: 'byte',\n base: 'binary',\n spaceSeparated: true,\n mantissa: 2,\n });\n };\n\n const format = 'DD/MM/YYYY hh:mm A UTC';\n\n let progressBar = null;\n if (currentRestore?.isStatusOk()) {\n progressBar = (\n \n );\n } else if (currentRestore?.isStatusError()) {\n progressBar = (\n \n );\n } else if (currentRestore?.isStatusCompleted()) {\n progressBar = ;\n }\n\n const appendTime = () => {\n if (currentRestore?.isStatusCompleted()) {\n return (\n currentRestore?.endedAt && (\n <>\n Ended at{' '}\n {dayjs\n .unix(parseInt(currentRestore?.endedAt, 10))\n .utc()\n .format(format)}\n \n )\n );\n }\n\n return (\n currentRestore?.startedAt && (\n <>\n Started at{' '}\n {dayjs\n .unix(parseInt(currentRestore?.startedAt, 10))\n .utc()\n .format(format)}\n \n )\n );\n };\n\n return (\n
\n {currentRestore && (\n <>\n \n
\n

\n Restoring Backup\n {appendTime()}\n

\n \n \n \n \n \n \n {currentRestore?.backupSize && (\n \n \n \n )}\n \n \n }\n />\n \n \n \n \n \n \n )}\n \n );\n}\n\nexport default RestoringBackups;\n","import { Modal, Spin, notification } from 'antd';\nimport AppConfirmDialog from '../AppConfirmDialog';\nimport CcxIconCloseCircleTwoTone from '../ccx/icons/CcxIconCloseCircleTwoTone';\nimport CcxIconInfoCircleTwoTone from '../ccx/icons/CcxIconInfoCircleTwoTone';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport BackupService from '../../services/BackupService';\nimport useBackupRestores from '../../core/hooks/useBackupRestores';\nimport Restore from '../../types/Restore';\nimport styles from './BackupsListRestoreButton.module.less';\nimport { RedoOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport useDataStoreJobs from '../../core/hooks/useDataStoreJobs';\nimport { Draft } from '@reduxjs/toolkit';\n\ntype BackupsListRestoreButtonProps = {\n record: any;\n currentRestore?: Restore;\n deployment: Draft;\n setRestoreObj: (obj: any) => void;\n setOpenRestore: (value: boolean) => void;\n};\n\nexport default function BackupsListRestoreButton({\n record,\n deployment,\n setRestoreObj,\n currentRestore,\n setOpenRestore,\n}: BackupsListRestoreButtonProps) {\n const { refresh: refreshRestores } = useBackupRestores(\n deployment.dataStoreUuid\n );\n\n const { refresh: refreshJobs } = useDataStoreJobs({\n dataStoreUuid: deployment?.dataStoreUuid,\n });\n\n const onConfirmRestore = () => {\n if (deployment?.isRedis()) {\n return new Promise(async (resolve, reject) => {\n try {\n await BackupService.restoreBackup(\n deployment.dataStoreUuid,\n record?.backupId\n );\n\n notification.open({\n message: 'Restore Backup',\n description: 'The backup will be restored soon.',\n icon: ,\n });\n\n refreshRestores();\n\n refreshJobs();\n\n Modal.destroyAll();\n\n resolve(null);\n } catch (e) {\n notification.open({\n message: 'Restore Backup',\n description: `There was an error restoring the backup. ${e}`,\n icon: (\n \n ),\n });\n\n console.error(e);\n\n reject();\n }\n }).catch(() => console.log('Oops errors!'));\n } else {\n setOpenRestore(true);\n setRestoreObj(record);\n }\n };\n\n return (\n
\n {currentRestore &&\n !(\n currentRestore?.isStatusCompleted() ||\n currentRestore?.isStatusError()\n ) ? (\n \n ) : (\n \n Restore\n
\n }\n title={Restore a backup}\n content=\"You are going to restore your database using the selected backup.\"\n />\n )}\n \n );\n}\n","import CcxContextualMenuIcon from '../ccx/icons/CcxContextualMenuIcon';\nimport { Button, Dropdown, Menu } from 'antd';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport BackupsListRestoreButton from './BackupsListRestoreButton';\nimport Restore from '../../types/Restore';\nimport CcxIconPlusCircleOutlined from '../ccx/icons/CcxIconPlusCircleOutlined';\nimport BackupsListCreateDatastoreButton from './BackupsListCreateDatastoreButton';\nimport styles from './BackupsListCreateDatastoreButton.module.less';\nimport { Draft } from '@reduxjs/toolkit';\n\ntype BackupsListActionsMenuProps = {\n record: any;\n disabled?: boolean;\n currentRestore?: Restore;\n deployment: Draft;\n setRestoreObj: (obj: any) => void;\n setOpenRestore: (value: boolean) => void;\n};\n\nexport default function BackupsListActionsMenu({\n record,\n disabled,\n deployment,\n setRestoreObj,\n setOpenRestore,\n currentRestore,\n}: BackupsListActionsMenuProps) {\n const menu = (\n \n {(deployment.isMariaDb() ||\n deployment.isPostgreSql() ||\n deployment.isPercona()) && (\n \n \n Create Datastore\n \n }\n />\n \n )}\n \n \n \n \n );\n // @todo create common component for action menu and maybe reuse ActionMenu from bar-frontend-components\n return (\n \n \n ) : null}\n {showSubmitButton ? (\n \n {submitButtonText || 'Submit'}\n \n ) : null}\n {!extraLeft && children}\n \n \n );\n}\n","// @ts-nocheck\nimport { FormInstance } from 'antd/lib/form';\nimport FormFooter from '../../tmp/FormFooter';\nimport { DrawerProps, Modal } from 'antd';\n\nexport type BackupsFormModalProps = DrawerProps & {\n form: FormInstance;\n onCancel?: () => void;\n};\n\nexport default function BackupsFormModal({\n form,\n onCancel,\n ...rest\n}: BackupsFormModalProps) {\n const handleSubmit = async () => {\n try {\n await form.validateFields();\n } finally {\n form.submit();\n }\n };\n\n return (\n
\n \n }\n {...rest}\n />\n
\n );\n}\n","import { Alert, Form } from 'antd';\nimport CronFormat from '@severalnines/bar-frontend-components/build/lib/Format/CronFormat';\nimport React from 'react';\nimport { FormInstance } from 'antd/lib/form';\n\ntype BackupScheduleInfoProps = {\n form: FormInstance;\n message: string;\n};\nexport default function BackupScheduleInfo({\n form,\n message,\n}: BackupScheduleInfoProps) {\n return (\n \n {() => (\n \n {message}{' '}\n \n \n {form.getFieldValue('cron')}\n \n \n \n }\n />\n )}\n \n );\n}\n","import { Alert, Form, Radio, Select } from 'antd';\nimport { useMemo } from 'react';\nimport { FormInstance } from 'antd/lib/form';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport useBackupSettings from '../../core/hooks/useBackupSettings';\nimport CronFormat from '@severalnines/bar-frontend-components/build/lib/Format/CronFormat';\nimport AppLoading from '../AppLoading';\nimport Space from '../common/antd/Space';\nimport BackupScheduleInfo from './FormParts/BackupScheduleInfo';\nimport styles from './BackupsScheduleEditIncrementalForm.module.less';\nimport { Draft } from '@reduxjs/toolkit';\nimport { SelectFieldOptions } from '../../core/helpers';\n\nconst SCHEDULE_OPTIONS = [\n { label: '15 min', value: '*/15 * * * *' },\n { label: '30 min', value: '*/30 * * * *' },\n { label: '1 hour', value: '0 * * * *' },\n];\n\ntype BackupsScheduleEditIncrementalFormProps = {\n deployment: Draft;\n form: FormInstance;\n onSuccess?: () => void;\n nodesOptions?: SelectFieldOptions[];\n};\n\nexport default function BackupsScheduleEditIncrementalForm({\n deployment,\n form,\n onSuccess,\n nodesOptions,\n}: BackupsScheduleEditIncrementalFormProps) {\n const { backupSettings, update, loading }: any = useBackupSettings(\n deployment.dataStoreUuid\n );\n\n const inOptions = (value: string) => {\n return !!SCHEDULE_OPTIONS.find((option) => option.value === value);\n };\n const initialValues = useMemo(() => {\n if (loading) return undefined;\n if (!backupSettings) return undefined;\n let cron = backupSettings.incCron;\n if (!inOptions(cron)) {\n cron = SCHEDULE_OPTIONS[0].value;\n }\n return {\n cron,\n host: backupSettings.incHostName\n ? backupSettings.incHostName\n : 'auto',\n };\n }, [backupSettings, loading]);\n\n const handleSubmit = async ({ cron, host }: any) => {\n try {\n await update({\n incremental: {\n frequency: backupSettings.incFrequency,\n cron,\n host,\n },\n });\n onSuccess?.();\n } catch (e: any) {\n console.error(e);\n }\n };\n\n const invalidOption =\n backupSettings?.incCron && !inOptions(backupSettings?.incCron)\n ? backupSettings?.incCron\n : undefined;\n\n return loading ? (\n \n ) : (\n \n \n {invalidOption && (\n \n {() => (\n \n Current interval is{' '}\n \n \n {invalidOption}\n {' '}\n ({invalidOption})\n {' '}\n will be overridden by selected option (\n {form.getFieldValue('cron')})\n \n }\n type={'warning'}\n />\n )}\n \n )}\n\n \n \n \n\n {(deployment?.isPostgreSql() ||\n deployment?.isMariaDb() ||\n deployment?.isPercona()) && (\n \n \n {nodesOptions?.map((n: any) => (\n \n {n.label}\n \n ))}\n \n \n )}\n\n \n \n \n );\n}\n","import { Form, Select } from 'antd';\nimport { useMemo } from 'react';\nimport { FormInstance } from 'antd/lib/form';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport CronInput from '@severalnines/bar-frontend-components/build/lib/DataEntry/CronInput';\nimport useBackupSettings from '../../core/hooks/useBackupSettings';\nimport AppLoading from '../AppLoading';\nimport BackupScheduleInfo from './FormParts/BackupScheduleInfo';\nimport styles from './BackupsScheduleEditFullForm.module.less';\nimport { Draft } from '@reduxjs/toolkit';\nimport { SelectFieldOptions } from '../../core/helpers';\nimport { ControlOutlined } from '@ant-design/icons';\n\ntype BackupsScheduleEditFullFormProps = {\n deployment: Draft;\n testId?: string;\n form: FormInstance;\n onSuccess?: () => void;\n nodesOptions?: SelectFieldOptions[];\n};\nexport default function BackupsScheduleEditFullForm({\n deployment,\n form,\n onSuccess,\n nodesOptions,\n testId = 'BackupsScheduleEditFullForm',\n}: BackupsScheduleEditFullFormProps) {\n const { backupSettings, update, loading }: any = useBackupSettings(\n deployment.dataStoreUuid\n );\n\n const initialValues = useMemo(() => {\n if (loading) return undefined;\n if (!backupSettings) return undefined;\n return {\n cron: backupSettings.fullCron,\n host: backupSettings.fullHostName\n ? backupSettings.fullHostName\n : 'auto',\n };\n }, [backupSettings, loading]);\n\n const handleSubmit = async ({ cron, host }: any) => {\n try {\n await update({\n full: {\n frequency: backupSettings.fullFrequency,\n cron,\n host,\n },\n });\n onSuccess?.();\n } catch (e: any) {\n console.error(e);\n }\n };\n\n return loading ? (\n \n ) : (\n \n \n \n \n\n {(deployment?.isPostgreSql() ||\n deployment?.isMariaDb() ||\n deployment?.isPercona()) && (\n \n \n {nodesOptions?.map((n: any) => (\n \n {n.label}\n \n ))}\n \n \n )}\n\n \n \n );\n}\n","import BackupsFormModal, { BackupsFormModalProps } from './BackupsFormModal';\nimport { useEffect, useState } from 'react';\nimport { useForm } from 'antd/lib/form/Form';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport BackupSchedule from '../../types/BackupSchedule';\nimport BackupsScheduleEditIncrementalForm from './BackupsScheduleEditIncrementalForm';\nimport BackupsScheduleEditFullForm from './BackupsScheduleEditFullForm';\nimport { Draft } from '@reduxjs/toolkit';\nimport useDataStore from '../../core/hooks/useDataStore';\nimport { SelectFieldOptions } from '../../core/helpers';\n\ntype BackupsScheduleEditFullDrawerProps = Omit<\n BackupsFormModalProps,\n 'form'\n> & {\n deployment: Draft;\n schedule: BackupSchedule;\n onSuccess?: () => void;\n};\n\nexport default function BackupsScheduleEditDrawer({\n deployment,\n schedule,\n onSuccess,\n ...rest\n}: BackupsScheduleEditFullDrawerProps) {\n const [nodesOptions, setNodesOptions] = useState([]);\n const { dataStore } = useDataStore(deployment?.dataStoreUuid);\n const [form] = useForm();\n\n useEffect(() => {\n let nodesOptions: SelectFieldOptions[] = [\n {\n value: 'auto',\n label: 'Auto',\n },\n {\n value: 'auto_prefer_replica',\n label: 'Auto Select Replica',\n },\n ];\n setNodesOptions(nodesOptions);\n }, [dataStore]);\n\n return (\n \n {schedule.backupType === 'incremental' ? (\n \n ) : (\n \n )}\n \n );\n}\n","import BackupSchedule, { BackupScheduleType } from '../../types/BackupSchedule';\nimport { Button, ButtonProps } from 'antd';\nimport {\n PauseCircleOutlined,\n PlayCircleOutlined,\n} from '@severalnines/frontend_hub/libs/icons';\nimport {\n backupSettingsApiInterface,\n BackupSettingsPatchDTO,\n} from '../../sdk/BackupsApi';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport StretchedClick from '../common/StretchedClick';\nimport { Draft } from '@reduxjs/toolkit';\n\ntype BackupsScheduleSwitchButtonProps = ButtonProps & {\n deployment: Draft;\n schedule: BackupSchedule;\n onSuccess?: () => void;\n stretchedClick?: boolean;\n};\nexport default function BackupsScheduleSwitchButton({\n deployment,\n schedule,\n onSuccess,\n stretchedClick = false,\n ...rest\n}: BackupsScheduleSwitchButtonProps) {\n const applyEnabled = async (enabled: boolean) => {\n try {\n let settings: BackupSettingsPatchDTO | undefined = undefined;\n if (schedule.backupType === BackupScheduleType.FULL) {\n settings = {\n full: {\n frequency: enabled ? 1 : 0,\n cron: enabled ? schedule.getCronString() : undefined,\n host: schedule.hostName,\n },\n };\n } else if (schedule.backupType === BackupScheduleType.INCREMENTAL) {\n settings = {\n incremental: {\n frequency: enabled ? 1 : 0,\n cron: enabled ? schedule.getCronString() : undefined,\n host: schedule.hostName,\n },\n };\n }\n if (settings) {\n await backupSettingsApiInterface.settingsDatastoreUuidPatch(\n deployment.dataStoreUuid,\n settings\n );\n onSuccess?.();\n } else {\n throw new Error(`Unknown backup type: ${schedule.backupType}`);\n }\n } catch (e: any) {\n console.error(e);\n }\n };\n const handlePause = async () => {\n try {\n await applyEnabled(false);\n } catch (e: any) {\n console.error(e);\n }\n };\n\n const handleEnable = async () => {\n try {\n await applyEnabled(true);\n } catch (e: any) {\n console.error(e);\n }\n };\n return schedule.isActive() ? (\n <>\n {stretchedClick && }\n {\n if (stretchedClick) return;\n handlePause();\n }}\n icon={}\n type={'text'}\n >\n Pause\n \n \n ) : (\n <>\n {stretchedClick && }\n\n {\n if (stretchedClick) return;\n handleEnable();\n }}\n icon={}\n type={'text'}\n >\n Enable\n \n \n );\n}\n","import CcxContextualMenuIcon from '../ccx/icons/CcxContextualMenuIcon';\nimport { Button, Dropdown, Menu } from 'antd';\nimport { EditOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport ButtonWithOverlayDialog from '../common/ButtonWithOverlayDialog';\nimport BackupsScheduleEditDrawer from './BackupsScheduleEditDrawer';\nimport BackupSchedule from '../../types/BackupSchedule';\nimport BackupsScheduleSwitchButton from './BackupsScheduleSwitchButton';\nimport { Draft } from '@reduxjs/toolkit';\n\ntype BackupsScheduleActionsMenuProps = {\n disabled?: boolean;\n deployment: Draft;\n schedule: BackupSchedule;\n onActionPerformed?: () => void;\n};\nexport default function BackupsScheduleActionsMenu({\n disabled,\n deployment,\n schedule,\n onActionPerformed,\n}: BackupsScheduleActionsMenuProps) {\n const menu = (\n \n \n \n \n \n }\n type={'text'}\n >\n Edit\n \n }\n overlay={\n \n }\n />\n \n \n );\n // @todo create common component for action menu and maybe reuse ActionMenu from bar-frontend-components\n return (\n \n \n }\n overlay={\n \n }\n />\n \n )\n }\n activeKey={tab || 'backups'}\n onChange={(tabKey: any) => {\n const tab = tabKey === 'backups' ? '' : `/${tabKey}`;\n history.push(\n `/projects/${projectUuid}/data-stores/${dataStoreUuid}/backups${tab}`\n );\n }}\n items={items}\n />\n );\n}\n\nexport default Backups;\n","import { Tooltip } from 'antd';\nimport { ReactElement } from 'react';\nimport Job from '../../types/Job';\nimport DotLabelStatus from '../ccx/common/DotLabelStatus';\nimport SmallContainer from '../ccx/common/SmallContainer';\nimport CcxComponentProps from '../../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {\n job?: Job;\n type?: string;\n showTooltips?: boolean;\n testId?: string;\n updating?: boolean;\n}\n\nfunction EventStatus({\n job,\n type = 'normal',\n testId = 'EventStatus',\n updating = false,\n showTooltips = true,\n}: Props): ReactElement {\n const StatusComponent = (\n \n );\n\n let top = StatusComponent;\n\n if (showTooltips) {\n const tooltipTitle = job?.isStatusError()\n ? null\n : `${job?.getStatusText()}`;\n\n top = (\n \n {StatusComponent}{' '}\n \n );\n }\n\n return ;\n}\n\nexport default EventStatus;\n","import { DownloadOutlined, FileTextOutlined } from '@ant-design/icons';\nimport { Button, Dropdown, Menu } from 'antd';\nimport CcxContextualMenuIcon from '../ccx/icons/CcxContextualMenuIcon';\n\ninterface DataStoreLogsActionsProps {\n readonly disabled: boolean;\n readonly handleViewLogs: () => void;\n readonly downloadDataStoreLogs: () => void;\n readonly isLoading: boolean;\n}\n\nconst DataStoreLogsActions = ({\n disabled,\n isLoading,\n handleViewLogs,\n downloadDataStoreLogs,\n}: DataStoreLogsActionsProps) => {\n const menu = (\n \n \n View Log\n \n \n Download\n \n \n );\n\n return (\n \n
\n {\n setShowAllLogs(false);\n onCloseModal();\n }}\n >\n Close\n \n \n \n }\n >\n \n \n

Log Details

\n \n \n }\n onClick={downloadLogs}\n >\n Download\n \n \n \n \n \n
\n \n
\n \n \n \n \n

\n Last written date\n

\n

\n {moment(latestEntry?.timestamp).format(\n 'MMMM D, YYYY, HH:mm'\n )}\n

\n \n \n

\n Last fetched date\n

\n

\n {moment(latestEntry?.timestamp).format(\n 'MMMM D, YYYY, HH:mm'\n )}\n

\n \n \n

\n Log file name\n

\n

\n {latestEntry?.filename\n ? replaceIfRedis(latestEntry?.filename)\n : replaceIfRedis(fileName)}\n

\n \n \n \n \n
\n \n \n

Log Messages

\n \n \n Host\n handleHostnameChange(e)}\n >\n {hostNamesOptions.map((option) => (\n \n {option.label}\n \n ))}\n \n \n \n \n \n \n \n \n {filteredEntries.length >= 10 && (\n \n setShowAllLogs(!showAllLogs)}\n >\n {showAllLogs\n ? 'View less messages'\n : 'View more messages'}\n \n \n )}\n \n \n \n \n );\n}\n\nexport default DataStoreViewLogs;\n\nconst formatLogMessage = (message: string) => {\n message = replaceIfRedis(message);\n const dateRegex =\n /(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{6}Z)|(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,3})?(?:\\s?[A-Z]{3,4})?)|(\\d{1,2} \\w{3} \\d{4} \\d{2}:\\d{2}:\\d{2}\\.\\d{3})/;\n const dateMatch = message.match(dateRegex);\n\n if (dateMatch) {\n const date = dateMatch[0];\n const restOfLog = message.replace(date, '').trim();\n return restOfLog;\n } else {\n return message.trim();\n }\n};\n","import styles from './DatastoreLogs.module.less';\nimport AppTable from '../AppTable';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport DataStoreLogsActions from './DataStoreLogsActions';\nimport AppEmpty from '../AppEmpty';\nimport useDataStoreEntries from '../../core/hooks/useDataStoreEntries';\nimport DbLogs from '../../types/DbLogs';\nimport { useEffect, useState } from 'react';\nimport { DbLogsEntries } from '../../types/DbLogsEnteries';\nimport { DbLogEntry } from '../../types/DbLogEntry';\nimport moment from 'moment';\nimport LazyLoader from '../LazyLoader';\nimport DataStoreViewLogs from './DataStoreViewLogs';\nimport DataStoreLogsService from '../../services/DataStoreLogsService';\nimport { replaceIfRedis } from '../../core/helpers';\n\ninterface Props extends CcxComponentProps {\n readonly currentDeployment?: DeploymentsItem | null | undefined;\n readonly dataStoreUuid: string;\n readonly logs: DbLogs;\n readonly testId?: string;\n}\n\nconst DatastoreLogs = ({\n currentDeployment,\n dataStoreUuid,\n logs,\n testId = 'DatastoreLogs',\n}: Props) => {\n const [logsTable, setLogsTable] = useState();\n const { dataStoreEntries, loading } = useDataStoreEntries(\n dataStoreUuid,\n logs\n );\n const [showModal, setShowModal] = useState(false);\n const [logsFileName, setLogsFilename] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [entries, setEntries] = useState();\n const [isClicked, setIsClicked] = useState(false);\n\n useEffect(() => {\n if (dataStoreEntries) groupedLogs();\n }, [dataStoreEntries]);\n\n const onCloseModal = () => {\n setShowModal(false);\n setLogsFilename('');\n setEntries(undefined);\n };\n\n const groupedLogs = () => {\n let newData: any = [];\n const seenFiles = new Set();\n\n logs.files.forEach((log: any) => {\n dataStoreEntries?.forEach((entries: any) => {\n entries?.entries?.forEach((entry: any) => {\n if (entry.filename === log.name) {\n if (!seenFiles.has(log.name)) {\n newData.push({\n name: log.name,\n when: findLatestEntry(entries),\n });\n seenFiles.add(log.name);\n }\n }\n });\n });\n });\n\n logs.files.forEach((log: any) => {\n if (!seenFiles.has(log.name)) {\n newData.push({\n name: log.name,\n });\n }\n });\n\n setLogsTable(newData);\n };\n\n const findLatestEntry = (entries: DbLogsEntries | undefined) => {\n let latestEntry: DbLogEntry | undefined;\n\n entries?.entries.forEach((entry: DbLogEntry) => {\n if (!latestEntry) {\n latestEntry = entry;\n } else if (entry.timestamp > latestEntry.timestamp) {\n latestEntry = entry;\n }\n });\n\n return latestEntry?.timestamp;\n };\n\n const handleViewLogs = async (fileName: string) => {\n if (isClicked) return;\n setIsLoading(true);\n setLogsFilename(fileName);\n try {\n const response = await DataStoreLogsService.getDataStoreLogsEntries(\n dataStoreUuid,\n fileName\n );\n setEntries(response);\n setShowModal(true);\n } catch (e) {\n console.log('error', e);\n }\n setIsLoading(false);\n setIsClicked(false);\n };\n\n const downloadDataStoreLogs = async (fileName: string) => {\n setIsLoading(true);\n try {\n const response = await DataStoreLogsService.downloadDataStoreLogs(\n dataStoreUuid,\n fileName\n );\n\n const report = await response.blob();\n let filename = `${fileName}-DatastoreLogs`;\n const contentDisposition = response.headers.get(\n 'Content-Disposition'\n );\n\n if (contentDisposition) {\n const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n let matches = filenameRegex.exec(contentDisposition);\n if (matches != null && matches[1]) {\n filename = matches[1].replace(/['\"]/g, '');\n }\n }\n await downloadLogs(report, filename);\n } catch (error) {\n console.error('Error downloading logs:', error);\n }\n setIsLoading(false);\n };\n\n const downloadLogs = async (reportFile: any, fileName: string) => {\n const url = window.URL.createObjectURL(reportFile);\n const reportFileLink = document.createElement('a');\n reportFileLink.href = url;\n document.body.appendChild(reportFileLink);\n reportFileLink.download = fileName;\n reportFileLink.click();\n window.URL.revokeObjectURL(url);\n };\n\n const logsColumns = [\n {\n title: 'Name',\n key: 'name',\n dataIndex: 'name',\n render: (text: string) => {replaceIfRedis(text)},\n onCell: (record: any) => {\n return {\n onClick: () => {\n if (record?.when) {\n setIsClicked(true);\n handleViewLogs(record?.name);\n }\n },\n };\n },\n },\n {\n title: 'When',\n key: 'when',\n dataIndex: 'when',\n onCell: (record: any) => {\n return {\n onClick: (e: any) => {\n if (record?.when) {\n setIsClicked(true);\n handleViewLogs(record?.name);\n }\n },\n };\n },\n render: (timeStamp: string, record: any) => {\n return record?.when ? (\n
{moment(record?.when).format('YYYY-MM-DD HH:mm')}
\n ) : (\n <>\n );\n },\n },\n {\n title: 'Actions',\n key: 'action',\n dataIndex: 'actions',\n align: 'right',\n width: 100,\n render: (_: any, record: any) => {\n return (\n handleViewLogs(record?.name)}\n downloadDataStoreLogs={() =>\n downloadDataStoreLogs(record?.name)\n }\n />\n );\n },\n },\n ];\n\n return currentDeployment && logs ? (\n
\n

Logs

\n {loading ? (\n \n ) : (\n <>\n \n downloadDataStoreLogs(logsFileName)}\n entries={entries}\n />\n \n )}\n
\n ) : (\n \n );\n};\n\nexport default DatastoreLogs;\n","import { useEffect, useState } from 'react';\nimport DataStoreLogsService from '../../services/DataStoreLogsService';\nimport DbLogs from '../../types/DbLogs';\n\nexport default function useDataStoreLogs(dataStoreUuid?: string) {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n const [dataStoreLogs, setDataStoreLogs] = useState();\n\n const load = async () => {\n if (dataStoreUuid) {\n setLoading(true);\n\n try {\n const result = await DataStoreLogsService.getDataStoreLogs(\n dataStoreUuid\n );\n setDataStoreLogs(result);\n setLoading(false);\n setError(null);\n } catch (e: any) {\n setLoading(false);\n setError(e);\n }\n\n setLoading(false);\n }\n };\n\n const refresh = () => {\n setLoading(true);\n setTimeout(() => {\n load();\n }, 1000);\n };\n\n useEffect(() => {\n refresh();\n }, [dataStoreUuid]);\n\n return { dataStoreLogs, refresh, loading, error };\n}\n","import { Col, Row } from 'antd';\nimport AppTable from '../AppTable';\nimport styles from './EventsTable.module.css';\nimport Job from '../../types/Job';\n\ninterface EventsTableProps {\n eventColumns: any[];\n jobs: Job[];\n}\n\nconst EventsTable = ({ eventColumns, jobs }: EventsTableProps) => {\n return (\n <>\n \n
\n

Events

\n \n \n \n \n );\n};\n\nexport default EventsTable;\n","import { ReactElement } from 'react';\nimport AppEmpty from '../AppEmpty';\nimport { useParams } from 'react-router-dom';\nimport AppLoading from '../AppLoading';\nimport DeploymentsItem from '../../types/DeploymentsItem';\nimport useDataStoreJobs from '../../core/hooks/useDataStoreJobs';\nimport Job from '../../types/Job';\nimport FriendlyDateTime from '../../types/FriendlyDateTime';\nimport useDataStoreServices from '../../core/hooks/useDataStoreServices';\nimport DbService from '../../types/DbService';\nimport styles from './EventViewer.module.less';\nimport EventStatus from './EventStatus';\nimport DatastoreLogs from '../logs/DatastoreLogs';\nimport useDataStoreLogs from '../../core/hooks/useDataStoreLogs';\nimport EventsTable from './EventsTable';\nimport { Col, Row } from 'antd';\n\ninterface UrlProps {\n dataStoreUuid: string;\n}\n\ntype EventViewerProps = {\n currentDeployment?: DeploymentsItem;\n testId?: string;\n};\n\nfunction EventViewer({\n currentDeployment,\n testId = 'EventViewer',\n}: EventViewerProps): ReactElement {\n const { dataStoreUuid } = useParams();\n const { services: nodes, loading: loadingNodes } = useDataStoreServices({\n dataStoreUuid,\n });\n\n const { loading: loadingLogs, dataStoreLogs } =\n useDataStoreLogs(dataStoreUuid);\n\n const { jobs, loading } = useDataStoreJobs({\n dataStoreUuid,\n });\n\n const formatDate = (date: string) => {\n return new FriendlyDateTime({\n date,\n }).getDate();\n };\n\n const eventColumns = [\n {\n title: 'When',\n render: (record: Job) => {\n return formatDate(record.getDateForEventViewer());\n },\n sorter: (a: any, b: any) => {\n return (\n new Date(a.getDateForEventViewer()).getTime() -\n new Date(b.getDateForEventViewer()).getTime()\n );\n },\n key: 'when',\n },\n {\n title: 'Status',\n key: 'status',\n render: (record: Job) => {\n return (\n \n );\n },\n },\n {\n title: 'Initiated by',\n key: 'user',\n render: (record: Job) => {\n if (currentDeployment?.accountId === record.user) return 'User';\n\n return 'System';\n },\n },\n {\n title: 'Description',\n key: 'type',\n width: 600,\n render: (record: Job) => {\n const relatedNode = nodes?.dbServices?.find(\n (node: DbService) => {\n return (\n node.getServiceUuid() === record.data?.HostUUID ||\n node.getHostnameOrIP() === record.data?.HostName\n );\n }\n );\n\n return record.getDescription(relatedNode);\n },\n },\n ];\n\n return (\n
\n {loading || loadingNodes || loadingLogs ? (\n \n ) : jobs?.length && nodes?.dbServices?.length ? (\n \n ) : (\n \n )}\n <>\n {dataStoreLogs?.files.length ? (\n \n ) : (\n <>\n )}\n
\n );\n}\n\nexport default EventViewer;\n","import { ReactElement, Suspense, useEffect, useState } from 'react';\nimport { Badge, Tabs, TabsProps, Button, Row, Col } from 'antd';\nimport { useHistory, useParams } from 'react-router';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport Firewalls from '../../firewalls/Firewalls';\nimport LazyLoader from '../../LazyLoader';\nimport QueryStats from '../../queryStats/QueryStats';\nimport styles from './DataStore.module.less';\nimport DataStoreOverview from './overview/DataStoreOverview';\nimport ProjectBreadcrumb from '../ProjectBreadcrumb';\nimport DataStoreSettings from './settings/DataStoreSettings';\nimport DataStoreServices from './services/DataStoreServices';\nimport DeploymentDashboard from '../../deployments/dashboard/DeploymentDashboard';\nimport { hideHeader } from '../../../core/CcxEnv';\nimport NotFoundError404 from '../../errors/NotFoundError404';\nimport useThrowError from '../../errors/useThrowError';\nimport DbDatabases from '../../dbUsers/DbDatabase';\nimport DbUsers from '../../dbUsers/DbUsers';\nimport Backups from '../../backups/Backups';\nimport { useAppDispatch, useAppSelector } from '../../../redux/hooks';\nimport EventViewer from '../../eventViewer/EventViewer';\nimport useDataStoreJobs from '../../../core/hooks/useDataStoreJobs';\nimport Job from '../../../types/Job';\nimport usePrevious from '../../../core/hooks/usePrevious';\nimport {\n AlertInfoOutlined,\n ClusterOutlined,\n BoxOutlined,\n DatabaseOutlined,\n HomeOutlined,\n LineChartOutlined,\n SafetyCertificateOutlined,\n SettingOutlined,\n SnippetsOutlined,\n UserOutlined,\n} from '@severalnines/frontend_hub/libs/icons/src/lib/';\nimport { getCurrentDataStore } from '../../../slices/datastore.slice';\nimport usePiwikPro from '../../../core/hooks/usePiwikPro';\nimport { DATASTORE_TAB } from '../../../core/PiwikConstants';\n\ninterface UrlProps {\n activeTab: string;\n dataStoreUuid: string;\n projectUuid: string;\n}\n\ninterface Props extends CcxComponentProps {}\n\nfunction DataStore({ testId = 'DataStore' }: Props): ReactElement {\n const { throwError } = useThrowError();\n const history = useHistory();\n const { activeTab, dataStoreUuid, projectUuid } = useParams();\n const { trackPageView } = usePiwikPro();\n const [activeKey, setActiveKey] = useState('overview');\n const [dbCount, setDbCount] = useState(0);\n const [runningJobsCount, setRunningJobsCount] = useState(0);\n const dispatch = useAppDispatch();\n\n const { jobs } = useDataStoreJobs({\n dataStoreUuid,\n });\n\n const prevJobs = usePrevious(jobs);\n\n useEffect(() => {\n trackPageView(`${DATASTORE_TAB}${activeTab}`);\n }, [trackPageView, activeTab]);\n\n // Updating the datastores if any changes to the job state happens\n useEffect(() => {\n if (\n JSON.stringify(prevJobs) !== JSON.stringify(jobs) ||\n dataStoreUuid\n ) {\n dispatch(getCurrentDataStore({ dataStoreUuid }));\n }\n }, [dataStoreUuid, jobs]);\n\n useEffect(() => {\n if (jobs && !!jobs.length) {\n const runningJobsCount = jobs.filter((job: Job) =>\n job.isStatusRunning()\n ).length;\n\n setRunningJobsCount(runningJobsCount);\n }\n }, [jobs, setRunningJobsCount]);\n const {\n dataStore: deployment,\n isLoading,\n isError,\n } = useAppSelector((state) => state.dataStore);\n\n const switchTab = (tab: string) => {\n history.push(\n `/projects/${projectUuid}/data-stores/${dataStoreUuid}/${tab}`\n );\n };\n\n useEffect(() => {\n if (isError) {\n throwError(new NotFoundError404('Datastore not found'));\n }\n }, [isError]);\n\n useEffect(() => {\n setActiveKey(activeTab);\n }, [activeTab]);\n\n const cancel = () => {\n history.push({\n pathname: '/',\n });\n };\n\n const items: TabsProps['items'] = [\n {\n key: 'overview',\n label: (\n
\n Overview\n
\n ),\n children: (\n }>\n \n \n ),\n },\n {\n key: 'services',\n label: (\n
\n \n Nodes\n
\n ),\n children: (\n }>\n \n \n ),\n },\n deployment && {\n key: 'monitoring',\n label: (\n
\n {' '}\n Monitoring\n
\n ),\n children: (\n }>\n \n \n ),\n },\n deployment && {\n key: 'eventViewer',\n label: (\n
\n {' '}\n \n Events & Logs\n {runningJobsCount > 0 ? (\n \n ) : (\n ''\n )}\n
\n ),\n children: (\n }>\n \n \n ),\n },\n deployment &&\n !deployment.isRedis() && {\n key: 'queryStats',\n label: (\n
\n \n Query stats\n
\n ),\n children: (\n }>\n \n \n ),\n },\n deployment && {\n key: 'dbUsers',\n label: (\n
\n Users\n
\n ),\n children: (\n }>\n \n \n ),\n },\n deployment &&\n !deployment.isRedis() && {\n key: 'dbDatabases',\n label: (\n
\n {' '}\n Databases\n
\n ),\n children: (\n }>\n \n \n ),\n },\n {\n key: 'backups',\n label: (\n
\n Backups\n
\n ),\n children: (\n }>\n \n \n ),\n },\n deployment &&\n !deployment.isVMWare() &&\n !deployment.isKubevirt() && {\n key: 'firewall',\n label: (\n
\n {' '}\n Firewall\n
\n ),\n children: (\n }>\n \n \n ),\n },\n {\n key: 'settings',\n label: (\n
\n \n Settings\n {deployment?.can_upgrade_to ? (\n \n ) : (\n ''\n )}\n
\n ),\n children: (\n }>\n \n \n ),\n },\n ].filter((item) => !!item) as TabsProps['items'];\n if (isLoading && !deployment) return <>;\n return (\n
\n \n\n {\n history.push(\n `/projects/${projectUuid}/data-stores/${dataStoreUuid}/${tabKey}`\n );\n }}\n items={items}\n />\n\n {hideHeader && (\n \n
\n \n \n \n )}\n \n );\n}\n\nexport default DataStore;\n","import { useCallback, useState } from 'react';\n\ntype UseThrowErrorProps = {};\n\nexport default function useThrowError({}: UseThrowErrorProps = {}) {\n const [error, setError] = useState();\n if (error) {\n throw error;\n }\n const throwError = useCallback((error: Error) => {\n setError(error);\n }, []);\n\n return {\n throwError,\n };\n}\n","import { useEffect, useRef } from 'react';\n\nexport default function usePrevious(value: any) {\n const ref = useRef();\n\n useEffect(() => {\n ref.current = value;\n });\n\n return ref.current;\n}\n","import React from 'react';\nimport { Tabs } from 'antd';\n\nexport type WizardConfigurationStep = {\n step: string;\n title?: string | React.ReactElement;\n content: React.ReactElement;\n className?: string;\n};\nexport type WizardConfigurationProps = {\n steps: WizardConfigurationStep[];\n activeStep?: string;\n};\nexport default function WizardConfiguration({\n steps,\n activeStep,\n}: WizardConfigurationProps) {\n return (\n
}\n animated={false}\n >\n {steps.map(({ title = '', step, className, content }) => (\n \n {content}\n \n ))}\n \n );\n}\n","import './WizardSelectTypeStep.less';\nimport React, { DOMAttributes, useEffect, useState } from 'react';\nimport { Button, Col, Empty, Row, Space, Typography } from 'antd';\nimport BoxSelect from '@severalnines/bar-frontend-components/build/lib/DataEntry/BoxSelect';\n\nimport classNames from 'classnames';\nimport TypographyText from '@severalnines/bar-frontend-components/build/lib/General/TypographyText';\nimport {\n CheckCircleOutlined,\n DeploymentUnitOutlined,\n FileOutlined,\n} from '@severalnines/frontend_hub/libs/icons';\nimport TextFormat from '@severalnines/bar-frontend-components/build/lib/Format/TextFormat';\nimport getAntIconSvgFile from '@severalnines/bar-frontend-components/build/lib/helpers/getAntIconSvgFile';\nimport NoTopologySingle from '@severalnines/frontend_hub/libs/icons/src/lib/ilustrations/NoTopologySingle';\nimport {\n getStatusFormatColor,\n StatusFormatStatus,\n} from '@severalnines/bar-frontend-components/build/lib/Format/StatusFormat';\n\nimport { Tag } from 'antd';\nimport { Tooltip } from 'antd';\nimport styles from './WizardSelectTypeStep.less';\nimport { getThemeIllustrationColor } from '../core/helpers';\n\nexport type WizardSelectTypeStepIcon = {\n src: string;\n name: string;\n};\n\nexport type WizardSelectTypeStepItem = DOMAttributes & {\n name: string;\n key: string;\n value: string;\n icon?: string | JSX.Element | WizardSelectTypeStepIcon;\n description: string | React.ReactElement;\n extensions: React.ReactElement;\n documentationLink?: string;\n disabled?: boolean;\n selected?: boolean;\n beta?: boolean;\n extra?: string | React.ReactElement;\n defaultIconComponent?: React.ExoticComponent;\n dbVersion?: string;\n};\n\nexport type WizardSelectTypeStepItemDetail = {\n item?: WizardSelectTypeStepItem;\n dbVersion?: string;\n onContinue: () => void;\n selected?: boolean;\n implicitContinue?: boolean;\n emptyState?: React.ReactElement;\n defaultIconComponent?: React.ExoticComponent;\n};\nexport type WizardSelectTypeStepItemDetailEmptyState = {\n description?: React.ReactNode;\n src?: any;\n imgAlt?: string;\n};\n\nconst Item = ({\n name,\n icon,\n disabled,\n beta,\n selected = false,\n defaultIconComponent = DeploymentUnitOutlined as React.ExoticComponent,\n ...rest\n}: WizardSelectTypeStepItem) => {\n return (\n \n )) || \n }\n {...rest}\n >\n \n \n {name}{' '}\n {beta && (\n \n Beta\n \n )}\n \n {selected ? (\n \n \n \n ) : null}\n {disabled ? (\n Coming soon\n ) : null}\n \n \n );\n};\n\nconst DetailEmptyState = ({\n description,\n src,\n imgAlt,\n}: WizardSelectTypeStepItemDetailEmptyState) => {\n return (\n \n Choose a database on the left
that you want to\n deploy\n \n )\n }\n image={\n src ? (\n src\n ) : (\n
\n \n
\n )\n }\n />\n );\n};\n\nconst Detail = ({\n item,\n onContinue,\n selected = false,\n implicitContinue = false,\n emptyState,\n defaultIconComponent = DeploymentUnitOutlined as React.ExoticComponent,\n dbVersion,\n}: WizardSelectTypeStepItemDetail) => {\n const showExtension = (item: WizardSelectTypeStepItem) => {\n return (\n dbVersion && parseInt(dbVersion) >= 15 && item.name === 'PostgreSQL'\n );\n };\n\n return (\n
\n {item ? (\n <>\n
\n \n {(item.icon && (\n \n )) || (\n \n )}\n \n {item.name}\n \n \n {item.description}\n \n {showExtension(item) && item.extensions}\n \n
{item.extra}
\n\n <>\n {item?.documentationLink && (\n \n Learn more\n \n )}\n {implicitContinue && (\n \n Continue\n \n )}\n \n
\n \n
\n \n \n ) : (\n emptyState || \n )}\n
\n );\n};\n\nexport type WizardSelectTypeStepProps = {\n onSelect: (item: WizardSelectTypeStepItem) => void;\n onConfirm: (item: WizardSelectTypeStepItem) => void;\n footer: React.ReactElement;\n items: WizardSelectTypeStepItem[];\n defaultValue?: string;\n emptyState?: React.ReactElement;\n defaultIconComponent?: React.ExoticComponent;\n dbVersion?: string;\n};\ntype WizardSelectType = React.FC & {\n Item: React.FC;\n Detail: React.FC;\n DetailEmptyState: React.FC;\n};\nconst WizardSelectTypeStep: WizardSelectType = ({\n onConfirm,\n onSelect,\n footer,\n items,\n defaultValue,\n emptyState,\n defaultIconComponent,\n dbVersion,\n}: WizardSelectTypeStepProps) => {\n const [selectedItem, setSelectedItem] =\n useState();\n const [hoveredItem, setHoveredItem] = useState();\n\n const handleItemMouseOver = (item: WizardSelectTypeStepItem) => {\n if (!item.disabled) {\n setHoveredItem(item);\n }\n };\n const handleItemMouseOut = () => {\n setHoveredItem(undefined);\n };\n\n const handleChange = (key: string) => {\n const item = items.find((item) => item.key === key);\n if (item) {\n setSelectedItem(item);\n onSelect(item);\n }\n };\n const handleConfirm = () => {\n if (selectedItem) {\n onConfirm(selectedItem);\n }\n };\n const currentItem: WizardSelectTypeStepItem | undefined =\n hoveredItem || selectedItem;\n\n useEffect(() => {\n if (defaultValue) {\n handleChange(defaultValue);\n }\n }, [defaultValue]);\n\n return (\n \n
\n \n {items.map((item) => (\n handleItemMouseOver(item)}\n onMouseOut={handleItemMouseOut}\n defaultIconComponent={defaultIconComponent}\n />\n ))}\n \n \n \n \n \n {footer && {footer}}\n \n );\n};\n\ntype DefaultIconProps = {\n size: number;\n component: React.ExoticComponent;\n};\nfunction DefaultIcon({ size, component: Component }: DefaultIconProps) {\n return (\n \n );\n}\n\nfunction getDefaultIconSvgFile(Component: React.ExoticComponent) {\n return getAntIconSvgFile();\n}\n\n/**\n * require() icon svg file\n * @param icon - string with icon file name or ant design icon JSX\n */\nfunction getIconSvgFile(icon: string | JSX.Element | WizardSelectTypeStepIcon) {\n if ((icon as WizardSelectTypeStepIcon).src) {\n return (icon as WizardSelectTypeStepIcon).src;\n } else if (typeof icon === 'string') {\n return require(`@severalnines/bar-frontend-components/build/lib/General/icons/${icon}`);\n } else {\n return getAntIconSvgFile(icon as JSX.Element);\n }\n}\n\nWizardSelectTypeStep.Item = Item;\nWizardSelectTypeStep.Detail = Detail;\nWizardSelectTypeStep.DetailEmptyState = DetailEmptyState;\nexport default WizardSelectTypeStep;\n","import React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport styles from './AddServiceDatabaseVendorStep.module.less';\nimport WizardSelectTypeStep, {\n WizardSelectTypeStepItem,\n} from '../../../tmp/WizardSelectTypeStep';\nimport { Space } from 'antd';\nimport { Button } from 'antd';\nimport DatabaseVendor from '../../../types/DatabaseVendor';\ninterface Props extends CcxComponentProps {\n selectedTechType?: string;\n selectedTech?: DatabaseVendor;\n handleTechTypeSelect: Function;\n handleTechTypeContinueClick: any;\n handleBackClick: Function;\n actionType?: string;\n dbVendors?: WizardSelectTypeStepItem[];\n dbVersion?: string;\n}\n\nexport default function AddServiceDatabaseVendorStep({\n testId = 'AddServiceDatabaseVendorStep',\n selectedTechType,\n selectedTech,\n handleTechTypeSelect,\n handleTechTypeContinueClick,\n handleBackClick,\n actionType,\n dbVendors,\n dbVersion,\n}: Props): ReactElement {\n return (\n \n

Select a database

\n handleTechTypeSelect(item.key)}\n onConfirm={handleTechTypeContinueClick}\n dbVersion={dbVersion}\n footer={\n \n \n {selectedTech && (\n \n Continue\n \n )}\n \n }\n items={(actionType && dbVendors) || []}\n />\n \n );\n}\n","import { Alert, Button, Input, Tooltip } from 'antd';\nimport { Typography } from 'antd';\nimport { Select } from 'antd';\nimport { Radio } from 'antd';\nimport { Row } from 'antd';\nimport { Col } from 'antd';\nimport { Form } from 'antd';\nimport { FormInstance } from 'antd/lib/form';\nimport React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport DatabaseVendor from '../../../types/DatabaseVendor';\nimport DatabaseVendorType from '../../../types/DatabaseVendorType';\nimport DeploymentOptions from '../../../types/DeploymentOptions';\nimport AppFormTag from '../../ccx/common/AppFormTag';\nimport InfoIcon from '@severalnines/bar-frontend-components/build/lib/General/InfoIcon';\nimport styles from './WizardFormConfigurationStep1.module.less';\nimport AppFormEmailTag from '../../ccx/common/AppFormEmailTag';\nimport classNames from 'classnames';\nimport { DownOutlined, UpOutlined } from '@ant-design/icons';\nimport { mapDbParameterGroupsToOptions } from '../../../utils/dbParameterGroups';\nimport DbParameterGroupService from '../../../services/DbParameterGroupService';\nimport { DbParameterGroup } from '../../../types/DbParameterGroup';\nimport { AddDeploymentV2Props } from '../../../services/ProvisionService';\n\ninterface Props extends CcxComponentProps {\n selectedTech?: DatabaseVendor;\n handleDeselect: Function;\n handleTagChange: Function;\n handleVendorTypeChange: Function;\n deploymentOptions?: DeploymentOptions;\n databaseVendorType: string;\n handleNumberOfNodesChange: Function;\n numberOfNodes: number;\n saveEmailNotifications: Function;\n notificationEmails: string[] | undefined;\n form?: FormInstance;\n setValidNotificationEmails: Function;\n isBackupRestore: boolean;\n restoreDatastore?: AddDeploymentV2Props;\n}\n\nconst PER_PAGE = 100;\nconst PAGE = 1;\n\nexport function WizardFormConfigurationStep1({\n testId = 'WizardFormConfigurationStep1',\n handleTagChange,\n handleDeselect,\n handleVendorTypeChange,\n selectedTech,\n deploymentOptions,\n databaseVendorType,\n handleNumberOfNodesChange,\n numberOfNodes,\n saveEmailNotifications,\n notificationEmails,\n setValidNotificationEmails,\n form,\n isBackupRestore,\n restoreDatastore,\n}: Props): ReactElement {\n const { Text } = Typography;\n const [dbParametersList, setDbParametersList] = useState<\n DbParameterGroup[]\n >([]);\n const isMicrosoft = selectedTech?.code === 'microsoft';\n const [showAdvancedSettings, setShowAdvancedSettings] =\n useState(false);\n\n const mapDbParametersGroup = () => {\n if (selectedTech && form) {\n const { code } = selectedTech;\n const dbVersion = form.getFieldValue('version');\n return mapDbParameterGroupsToOptions(\n dbParametersList,\n code,\n dbVersion\n );\n }\n return [];\n };\n\n useEffect(() => {\n fetchDbParameters();\n }, []);\n\n const fetchDbParameters = async () => {\n try {\n const fetchDbParameters =\n await DbParameterGroupService.getDbParameterGroups(\n PER_PAGE,\n PAGE\n );\n setDbParametersList(fetchDbParameters.parameterGroups);\n } catch (e) {\n console.error(e);\n }\n };\n\n useEffect(() => {\n if (isBackupRestore && restoreDatastore) {\n const newNumberOfNodes =\n restoreDatastore.numberOfNodes > 3\n ? 2\n : restoreDatastore.numberOfNodes;\n handleVendorTypeChange({\n target: { value: restoreDatastore.databaseVendorType },\n });\n form?.setFieldsValue({\n numberOfNodes: newNumberOfNodes,\n databaseVendorType: restoreDatastore.databaseVendorType,\n });\n handleNumberOfNodesChange({\n target: { value: newNumberOfNodes },\n });\n } else {\n const vendorTypes = selectedTech?.getVendorTypes();\n\n if (\n vendorTypes &&\n selectedTech &&\n ['postgres', 'redis', 'microsoft'].includes(selectedTech?.code)\n ) {\n handleVendorTypeChange({\n target: { value: vendorTypes[0].code },\n });\n\n if (form) {\n form.setFieldsValue({\n databaseVendorType: vendorTypes[0].code,\n });\n }\n } else if (\n vendorTypes &&\n selectedTech &&\n ['mariadb', 'percona'].includes(selectedTech?.code)\n ) {\n handleVendorTypeChange({\n target: { value: vendorTypes[0]?.code },\n });\n\n if (form) {\n form.setFieldsValue({\n databaseVendorType: vendorTypes[0]?.code,\n });\n }\n }\n }\n }, [selectedTech, isBackupRestore]);\n\n useEffect(() => {\n if (databaseVendorType && selectedTech && !isBackupRestore) {\n if (\n selectedTech.isMariadb() ||\n selectedTech.isPercona() ||\n selectedTech.isPostgreSql()\n ) {\n handleNumberOfNodesChange({\n target: { value: 2 },\n });\n form?.setFieldValue('numberOfNodes', 2);\n } else if (selectedTech.isMssql()) {\n handleNumberOfNodesChange({\n target: { value: 2 },\n });\n form?.setFieldValue('numberOfNodes', 2);\n } else {\n handleNumberOfNodesChange({\n target: { value: 3 },\n });\n form?.setFieldValue('numberOfNodes', 3);\n }\n }\n }, [databaseVendorType, selectedTech, isBackupRestore]);\n\n const ConfigurationOptionSubInfo = [\n {\n code: 'galera',\n items: [\n 'Synchronous replication',\n 'Uses Galera technology',\n Requires a Primary Key in each table,\n 'Can read from every node',\n ],\n },\n {\n code: 'replication',\n items: [\n 'Asynchronous replication',\n 'Uses MySQL Replication',\n 'Multi-purpose',\n 'Recommended for most use cases',\n The replica is used failover and is read-only,\n ],\n },\n {\n code: 'mssql_single',\n items: ['Standalone server', 'This setup cannot be scaled'],\n },\n {\n code: 'mssql_ao_async',\n items: ['Uses Async commit mode', 'Standard license'],\n },\n {\n code: 'redis',\n items: [\n 'Primary / replica using Cache22 Sentinel',\n 'Can read from every node ',\n The replica is used failover and is read-only,\n ],\n },\n {\n code: 'postgres_streaming',\n items: [\n 'Primary / replica using Streaming replication',\n 'Uses sync_commit mode ',\n 'Can read from every node ',\n The replica is used failover and is read-only,\n ],\n },\n ];\n\n return (\n
\n

\n Name your datastore\n \n The name of the datastore can be changed later.\n \n }\n />\n

\n \n \n \n\n {selectedTech && (\n Configuration}\n rules={[\n {\n required: true,\n message: 'Select configuration',\n },\n ]}\n >\n \n \n {selectedTech\n ?.getSortedVendorTypes()\n .map(\n (\n databaseType: DatabaseVendorType,\n n: number\n ) => {\n return (\n \n \n {selectedTech.getVendorTypeName(\n databaseType.code\n )}\n \n {ConfigurationOptionSubInfo?.map(\n (item) => (\n \n {item.code ===\n databaseType.code &&\n item.items.map(\n (\n i\n ) => (\n \n {\n i\n }\n \n )\n )}\n \n )\n )}\n \n {!isBackupRestore &&\n databaseType.getRecommendedConfiguration() &&\n selectedTech.types\n .length > 1 && (\n \n Recommended\n \n )}\n \n \n );\n }\n )}\n \n \n \n )}\n\n {selectedTech && (\n <>\n {databaseVendorType && (\n \n Number of nodes\n \n The number of nodes can be\n scaled later. One node is\n strictly only for\n test/development purpose. More\n than one node is recommended for\n HA.\n \n }\n />\n \n }\n rules={[\n {\n required: true,\n message: 'Select number of nodes',\n },\n ]}\n >\n \n {deploymentOptions\n ?.getDatabaseVendors()\n .filter(\n (v: DatabaseVendor) =>\n v.code === selectedTech?.code\n )[0]\n .getSortedNumberOfNodes()\n .map((n: number) => {\n return selectedTech\n ?.getVendorTypeByCode(\n databaseVendorType\n )\n ?.getSizeHintsName(n) ? (\n \n \n {databaseVendorType\n ? selectedTech\n ?.getVendorTypeByCode(\n databaseVendorType\n )\n ?.getSizeHintsName(\n n\n )\n : n}\n \n \n ) : null;\n })}\n \n \n )}\n \n )}\n\n {form?.getFieldValue('numberOfNodes') === 1 && (\n \n )}\n\n
\n \n setShowAdvancedSettings(!showAdvancedSettings)\n }\n >\n \n Advanced Settings{' '}\n {showAdvancedSettings ? (\n \n ) : (\n \n )}\n \n \n
\n\n {showAdvancedSettings && (\n <>\n

\n \n Add tags to search or group your databases clusters{' '}\n (optional)\n \n

\n \n (\n \n )}\n placeholder=\"Enter tags separated by comma, i.e.: production, europe, client ABC\"\n tokenSeparators={[',']}\n >\n \n\n {!selectedTech?.isMssql() && (\n <>\n

\n DB Settings\n

\n \n \n form?.setFieldsValue({\n parameterGroup: value,\n })\n }\n options={mapDbParametersGroup()}\n />\n \n \n )}\n\n \n Email Notifications{' '}\n
\n ({\n validator(_, value) {\n if (value && value.length > 0) {\n const emailRegex =\n /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n const isValidEmail = value.every(\n (email: string) =>\n emailRegex.test(email)\n );\n if (!isValidEmail) {\n setValidNotificationEmails(true);\n return Promise.reject(\n new Error(\n 'All entries must be valid email addresses'\n )\n );\n }\n }\n setValidNotificationEmails(false);\n return Promise.resolve();\n },\n }),\n ]}\n wrapperCol={{ span: 24 }}\n extra={\n 'Use semicolon (;) to separate email addresses, remove all addresses to disable'\n }\n >\n (\n \n )}\n value={notificationEmails}\n tokenSeparators={[';']}\n maxTagCount={5}\n onChange={(value: string[]) =>\n saveEmailNotifications(value)\n }\n />\n \n \n )}\n \n );\n}\n","import { Col, Radio, RadioGroupProps, Row, Tooltip } from 'antd';\nimport React, { ReactElement } from 'react';\nimport { RadioButtonProps } from 'antd/lib/radio/radioButton';\nimport { TooltipProps } from 'antd/lib/tooltip';\nimport classNames from 'classnames';\nimport styles from './AppRadioGroupGrid.module.less';\n\ntype AppRadioGroupGridProps = RadioGroupProps & {\n items: ReactElement[];\n};\nexport default function AppRadioGroupGrid({\n items,\n ...rest\n}: AppRadioGroupGridProps) {\n return (\n \n \n {items.map((item) => (\n
\n {item}\n \n ))}\n \n \n );\n}\n\ntype AppRadioGridButtonProps = RadioButtonProps & {\n tooltip?: TooltipProps['title'];\n size?: 'large';\n};\n\nexport function AppRadioGridButton({\n children,\n tooltip,\n size,\n ...rest\n}: AppRadioGridButtonProps) {\n let button = {children};\n if (tooltip) {\n button = {button};\n }\n\n return (\n \n {button}\n \n );\n}\n","import { Col, Form, Row, Typography } from 'antd';\nimport { ReactElement, useEffect } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport { hideCloudProvider } from '../../../core/CcxEnv';\nimport CloudProvider from '../../../types/CloudProvider';\nimport CloudProviderRegion from '../../../types/CloudProviderRegion';\nimport AppFlagIcon from '../../ccx/common/AppFlagIcon';\nimport styles from './WizardFormConfigurationStep2.module.less';\nimport AppRadioGroupGrid, {\n AppRadioGridButton,\n} from '../../ccx/common/Form/AppRadioGroupGrid';\nimport { useAppSelector } from '../../../redux/hooks';\n\ninterface Props extends CcxComponentProps {\n handleCloudProviderChange: Function;\n cloudProviders?: CloudProvider[];\n regions?: CloudProviderRegion[];\n handleRegionChange: Function;\n form?: any;\n selectedCloudProvider?: CloudProvider;\n}\n\nexport function WizardFormConfigurationStep2({\n testId = 'WizardFormConfigurationStep2',\n handleCloudProviderChange,\n cloudProviders,\n regions,\n handleRegionChange,\n form,\n selectedCloudProvider,\n}: Props): ReactElement {\n const { Text } = Typography;\n const { deploymentOptions } = useAppSelector(\n (state) => state.deploymentOptions\n );\n const { isBackupRestore, restoreDatastore } = useAppSelector(\n (state) => state.restoreBackup\n );\n\n useEffect(() => {\n if (isBackupRestore && deploymentOptions && restoreDatastore) {\n const { cloudProvider, region } = form.getFieldsValue();\n if (cloudProvider && region) {\n return;\n }\n const cloudProviderDetails = deploymentOptions?.getCloudProvider(\n restoreDatastore?.cloudProvider\n );\n const cloudProviderRegionDetails =\n deploymentOptions?.getCloudRegionDetails(\n restoreDatastore?.cloudProvider,\n restoreDatastore.cloudRegion\n );\n\n handleCloudProviderChange({\n target: { value: cloudProviderDetails },\n });\n handleRegionChange({\n target: { value: cloudProviderRegionDetails },\n });\n form.setFieldsValue({\n cloudProvider: cloudProviderDetails,\n region: cloudProviderRegionDetails,\n });\n }\n }, [isBackupRestore, deploymentOptions]);\n\n useEffect(() => {\n if (cloudProviders && cloudProviders.length === 1) {\n form.setFieldsValue({\n cloudProvider: cloudProviders[0],\n });\n handleCloudProviderChange({ target: { value: cloudProviders[0] } });\n }\n }, [cloudProviders]);\n\n useEffect(() => {\n if (regions && regions.length === 1) {\n form.setFieldsValue({\n region: regions[0],\n });\n handleRegionChange({ target: { value: regions[0] } });\n }\n }, [regions]);\n\n return (\n
\n {!hideCloudProvider && (\n <>\n

\n Cloud service provider\n

\n\n \n {\n return (\n \n \n \n {p.name}\n
\n \n );\n }\n ) || []\n }\n />\n \n \n )}\n\n {regions?.length && (\n <>\n

\n Regions\n

\n\n \n {\n return (\n \n \n \n \n \n
\n
\n \n \n {\n p.displayCode\n }\n \n \n \n {p.city\n ? p.city\n : p.name}\n \n \n
\n
\n \n
\n \n );\n }\n ) || []\n }\n />\n \n \n )}\n \n );\n}\n","import { Alert, Col, Form, InputNumber, Row, Select, Space } from 'antd';\nimport InfoIcon from '@severalnines/bar-frontend-components/build/lib/General/InfoIcon';\nimport { useEffect, useState } from 'react';\nimport DeploymentOptions from '../../../../types/DeploymentOptions';\nimport InstanceVolumeType from '../../../../types/InstanceVolumeType';\nimport InstanceVolumeSize from '../../../../types/InstanceVolumeSize';\nimport InstanceVolumeIopsValue from '../../../../types/InstanceVolumeIopsValue';\nimport { FormInstance } from 'antd/lib/form';\nimport styles from './InstanceVolumeTypeForm.module.less';\nimport DatabaseVendor from '../../../../types/DatabaseVendor';\nimport { useAppSelector } from '../../../../redux/hooks';\nimport { StorageItem } from '../InstanceSizeForm';\nimport CloudProvider from '../../../../types/CloudProvider';\n\nexport type InstanceVolumeTypeFormProps = {\n form: FormInstance;\n selectedTech?: DatabaseVendor;\n deploymentOptions?: DeploymentOptions;\n\n // @todo remove this and handle change on this component, expose onVolumeTypeChange if it's required\n handleVolumeTypeChange: Function;\n // @todo user should be obtained from global state or context when it's implemented\n // @todo volumeSize, volumeType, volumeIops, enteredVolumeSize can be obtained from sate or context\n volumeSize?: InstanceVolumeSize;\n volumeType?: InstanceVolumeType;\n volumeTypes: InstanceVolumeType[];\n storageItems: StorageItem[];\n volumeIops?: InstanceVolumeIopsValue;\n enteredVolumeSize?: number;\n testId: string;\n onVolumeSizeChange?: (value?: number) => void;\n onIOPSChange?: (value?: number) => void;\n cloudProvider?: CloudProvider;\n};\nexport default function InstanceVolumeTypeForm({\n form,\n selectedTech,\n deploymentOptions,\n handleVolumeTypeChange,\n volumeSize,\n volumeType,\n volumeTypes,\n volumeIops,\n storageItems,\n cloudProvider,\n enteredVolumeSize,\n testId = 'InstanceVolumeTypeForm',\n onVolumeSizeChange,\n onIOPSChange,\n}: InstanceVolumeTypeFormProps) {\n const { isBackupRestore, restoreDatastore } = useAppSelector(\n (state) => state.restoreBackup\n );\n\n const [storageType, setStorageType] = useState(\n form.getFieldValue('storageType')\n );\n\n const handleIopsValidation = (rule: any, value: any) => {\n if (!value || !enteredVolumeSize || !volumeIops) {\n // resolve to avoid showing validation errors\n return Promise.resolve();\n }\n\n if (enteredVolumeSize * volumeIops?.maxPerGb >= value) {\n return Promise.resolve();\n }\n\n return Promise.reject(\n `Max allowed IOPS is ${volumeIops?.maxPerGb} per GB of volume size.`\n );\n };\n\n useEffect(() => {\n if (restoreDatastore && cloudProvider) {\n const localStorageType = cloudProvider?.isElastx()\n ? restoreDatastore?.volumeType\n ? 'volumes'\n : 'ephemeral'\n : restoreDatastore?.volumeType;\n setStorageType(localStorageType);\n form.setFieldsValue({\n storageType: localStorageType,\n volumeIops: restoreDatastore?.volumeIops,\n volumeSize: restoreDatastore?.volumeSize,\n });\n onIOPSChange?.(restoreDatastore?.volumeIops);\n }\n }, [restoreDatastore, volumeTypes]);\n\n useEffect(() => {\n if (storageType === 'ephemeral') {\n form.setFieldsValue({\n volumeType: undefined,\n volumeSize: undefined,\n volumeIops: undefined,\n });\n }\n }, [storageType]);\n\n return (\n
\n {volumeTypes.length > 0 && (\n
\n

\n Volume type\n

\n\n {selectedTech?.isRedis() && (\n }\n showIcon\n />\n )}\n\n \n
\n \n \n {volumeTypes.map(\n (t: InstanceVolumeType) => (\n \n \n \n \n {t.name}\n {' '}\n {t.info && (\n \n )}\n {' '}\n \n \n )\n )}\n \n \n \n \n\n {volumeSize && !selectedTech?.isRedis() && (\n <>\n

\n Storage size\n

\n {deploymentOptions?.getVolumeSizesInfo() && (\n \n )}\n \n The desired value must be in the range\n of{' '}\n {isBackupRestore\n ? restoreDatastore?.volumeSize === 0\n ? volumeSize?.min\n : restoreDatastore?.volumeSize\n : volumeSize?.min}\n GB and {volumeSize?.max}GB\n \n }\n >\n `${value}`}\n onChange={(value) => {\n onVolumeSizeChange?.(\n value || undefined\n );\n }}\n parser={\n ((value: string) =>\n value\n .replace(' ', '')\n .replace(\n volumeSize.unit,\n ''\n )) as any\n }\n data-testid={`${testId}VolumeSizeInput`}\n />\n \n \n )}\n\n {volumeType && volumeType.hasIops && volumeIops && (\n <>\n

\n IOPS\n

\n \n {\n onIOPSChange?.(value || undefined);\n }}\n size=\"large\"\n data-testid={`${testId}VolumeIopsInput`}\n />\n \n \n )}\n \n )}\n \n );\n}\n","import { Alert, Col, Form, Row, Select } from 'antd';\nimport InstanceSize from '../../../types/InstanceSize';\nimport InstanceVolumeTypeForm from './formParts/InstanceVolumeTypeForm';\nimport { ReactElement, useEffect, useMemo, useState } from 'react';\nimport DeploymentOptions from '../../../types/DeploymentOptions';\nimport CloudProvider from '../../../types/CloudProvider';\nimport { FormInstance } from 'antd/lib/form';\nimport InstanceVolumeSize from '../../../types/InstanceVolumeSize';\nimport InstanceVolumeType from '../../../types/InstanceVolumeType';\nimport InstanceVolumeIopsValue from '../../../types/InstanceVolumeIopsValue';\nimport InfoIcon from '@severalnines/bar-frontend-components/build/lib/General/InfoIcon';\nimport DatabaseVendor from '../../../types/DatabaseVendor';\nimport { useAppSelector } from '../../../redux/hooks';\nimport styles from './InstanceSizeForm.module.less';\n\nexport type Props = {\n testId: string;\n selectedTech?: DatabaseVendor;\n handleInstanceSizeChange: Function;\n deploymentOptions?: DeploymentOptions;\n cloudProvider: CloudProvider | undefined;\n handleVolumeTypeChange: Function;\n form: FormInstance;\n volumeSize: InstanceVolumeSize | undefined;\n volumeType: InstanceVolumeType | undefined;\n volumeIops: InstanceVolumeIopsValue | undefined;\n enteredVolumeSize: number | undefined;\n setEnteredVolumeSize: Function;\n setEnteredIOPS: Function;\n instance: InstanceSize | undefined;\n handleVolumeIopsChange: Function;\n setVolumeSize: React.Dispatch<\n React.SetStateAction\n >;\n};\n\nexport type StorageItem = {\n label?: string;\n info?: string;\n code?: string;\n volumeTypes?: InstanceVolumeType[];\n};\n\nexport default function InstanceSizeForm({\n testId,\n selectedTech,\n handleInstanceSizeChange,\n deploymentOptions,\n cloudProvider,\n form,\n handleVolumeTypeChange,\n volumeIops,\n volumeSize,\n volumeType,\n enteredVolumeSize,\n setEnteredVolumeSize,\n setEnteredIOPS,\n setVolumeSize,\n instance,\n handleVolumeIopsChange,\n}: Props): ReactElement {\n const { isBackupRestore, restoreDatastore } = useAppSelector(\n (state) => state.restoreBackup\n );\n const onVolumeSizeChange = (value?: number) => {\n setEnteredVolumeSize && setEnteredVolumeSize(value);\n };\n const [storageType, setStorageType] = useState(\n form.getFieldValue('storageType')\n );\n\n const [storageItems, volumeTypes] = useMemo(() => {\n const volumeTypes =\n deploymentOptions?.getVolumeTypes(cloudProvider) || [];\n const storageItems: StorageItem[] = [];\n const ephemeral = volumeTypes?.find((v) => v.name === 'Ephemeral');\n if (ephemeral) {\n storageItems.push({\n label: 'Volumes',\n code: 'volumes',\n volumeTypes: volumeTypes?.filter((v) => v.name !== 'Ephemeral'),\n });\n storageItems.push({\n label: ephemeral.name,\n info: ephemeral.info,\n code: 'ephemeral',\n volumeTypes: [],\n });\n }\n\n const localVolumeTypes =\n storageItems.length === 0\n ? volumeTypes\n : storageItems.find((s) => s.code === storageType)?.volumeTypes;\n\n return [storageItems, localVolumeTypes || []];\n }, [deploymentOptions, cloudProvider, storageType, instance]);\n\n const onIOPSChange = (value?: number) => {\n setEnteredIOPS && setEnteredIOPS(value);\n };\n\n useEffect(() => {\n if (\n isBackupRestore &&\n restoreDatastore &&\n deploymentOptions &&\n cloudProvider\n ) {\n let restoreVolumeType = '';\n storageItems.forEach((s: StorageItem) => {\n if (\n s.volumeTypes?.find(\n (v) => v.code === restoreDatastore?.volumeType\n )\n ) {\n restoreVolumeType = s.code || '';\n }\n });\n const instanceSizes =\n deploymentOptions.getInstanceSizes(cloudProvider);\n const selectedInstanceSize = instanceSizes.find(\n (size) => size.type === restoreDatastore.instanceSize\n );\n const availableVolumeTypes =\n deploymentOptions.getVolumeTypes(cloudProvider);\n const selectedVolumeType = availableVolumeTypes.find(\n (type) => type.code === restoreDatastore.volumeType\n );\n\n const defaultVolumeSize = deploymentOptions.getVolumeSize(\n cloudProvider,\n selectedVolumeType\n );\n\n setVolumeSize({\n ...defaultVolumeSize,\n default: restoreDatastore.volumeSize,\n });\n handleInstanceSizeChange({\n target: { value: selectedInstanceSize },\n });\n\n if (selectedVolumeType) {\n handleVolumeTypeChange({\n target: { value: selectedVolumeType },\n });\n }\n\n setEnteredVolumeSize(\n deploymentOptions?.getVolumeSize(\n cloudProvider,\n selectedVolumeType\n )\n );\n setStorageType(restoreVolumeType);\n\n form.setFieldsValue({\n instanceSize: selectedInstanceSize?.code,\n volumeType: selectedVolumeType?.code,\n volumeSize: restoreDatastore.volumeSize,\n volumeIops: restoreDatastore.volumeIops,\n });\n }\n }, [isBackupRestore, restoreDatastore, deploymentOptions, cloudProvider]);\n\n const handleStorageTypeChange = (e: any) => {\n setStorageType(e);\n };\n\n const instanceSizeFieldAlert =\n !form.getFieldValue('instanceSize') && storageItems.length === 0;\n\n const instanceSizeAndStorageFieldAlert =\n storageItems.length !== 0 &&\n (!form.getFieldValue('storageType') ||\n !form.getFieldValue('instanceSize'));\n\n return (\n <>\n

\n Instance and Storage\n \n Select the instance matching your needs. Instances\n types can be changed later.\n \n }\n />\n

\n \n
\n \n \n {cloudProvider &&\n deploymentOptions\n ?.getInstanceSizes(cloudProvider)\n .map((s: InstanceSize) => (\n \n \n \n {s.name}\n \n \n CPU: {s.cpu} | RAM: {s.ram}\n \n \n \n ))}\n \n \n \n {storageItems.length > 0 && (\n \n \n \n {storageItems.map((t: StorageItem) => (\n \n \n \n {t.label}{' '}\n {t.info && (\n \n )}\n \n \n \n ))}\n \n \n \n )}\n \n\n {(instanceSizeFieldAlert || instanceSizeAndStorageFieldAlert) && (\n \n )}\n\n {(!instanceSizeFieldAlert || !instanceSizeAndStorageFieldAlert) && (\n \n )}\n \n );\n}\n","import { FormInstance } from 'antd/lib/form';\nimport { ReactElement, useEffect } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CloudProvider from '../../../types/CloudProvider';\nimport DeploymentOptions from '../../../types/DeploymentOptions';\nimport InstanceVolumeIopsValue from '../../../types/InstanceVolumeIopsValue';\nimport InstanceVolumeSize from '../../../types/InstanceVolumeSize';\nimport InstanceVolumeType from '../../../types/InstanceVolumeType';\nimport User from '../../../types/User';\nimport InstanceSizeForm from './InstanceSizeForm';\nimport DatabaseVendor from '../../../types/DatabaseVendor';\nimport styles from './WizardFormConfigurationStep3.module.less';\nimport InstanceSize from '../../../types/InstanceSize';\ninterface Props extends CcxComponentProps {\n selectedTech?: DatabaseVendor;\n handleInstanceSizeChange: Function;\n deploymentOptions?: DeploymentOptions;\n cloudProvider: CloudProvider | undefined;\n user?: User;\n handleVolumeTypeChange: Function;\n volumeSize?: InstanceVolumeSize;\n volumeType?: InstanceVolumeType;\n volumeIops?: InstanceVolumeIopsValue;\n enteredVolumeSize?: number;\n setEnteredVolumeSize: Function;\n setEnteredIOPS: Function;\n instance: InstanceSize | undefined;\n form: FormInstance;\n StepsExtra: Function;\n handleVolumeIopsChange: (\n value: InstanceVolumeIopsValue | undefined\n ) => void;\n isBackupRestore: boolean;\n setVolumeSize: React.Dispatch<\n React.SetStateAction\n >;\n}\n\nexport function WizardFormConfigurationStep3({\n testId = 'WizardFormConfigurationStep3',\n selectedTech,\n handleInstanceSizeChange,\n deploymentOptions,\n cloudProvider,\n instance,\n user,\n handleVolumeTypeChange,\n volumeSize,\n volumeType,\n volumeIops,\n setVolumeSize,\n enteredVolumeSize,\n setEnteredVolumeSize,\n setEnteredIOPS,\n form,\n StepsExtra,\n handleVolumeIopsChange,\n isBackupRestore,\n}: Props): ReactElement {\n useEffect(() => {\n if (!volumeType?.hasIops && !isBackupRestore) {\n form.setFieldsValue({\n volumeIops: undefined,\n });\n }\n }, [volumeType]);\n\n useEffect(() => {\n if (volumeSize) {\n setEnteredVolumeSize && setEnteredVolumeSize(volumeSize?.default);\n }\n }, [volumeSize]);\n\n useEffect(() => {\n if (volumeType?.hasIops && volumeIops) {\n setEnteredIOPS && setEnteredIOPS(volumeIops?.default);\n } else {\n setEnteredIOPS && setEnteredIOPS(undefined);\n }\n }, [volumeIops]);\n\n useEffect(() => {\n if (cloudProvider && deploymentOptions) {\n const instanceSizes =\n deploymentOptions?.getInstanceSizes(cloudProvider);\n\n if (instanceSizes?.length === 1) {\n form.setFieldsValue({\n instanceSize: instanceSizes[0],\n });\n handleInstanceSizeChange({\n target: { value: instanceSizes[0] },\n });\n }\n\n const volumeTypes =\n deploymentOptions?.getVolumeTypes(cloudProvider);\n\n if (volumeTypes?.length === 1) {\n form.setFieldsValue({\n volumeType: volumeTypes[0].code,\n });\n handleVolumeTypeChange({\n target: { value: volumeTypes[0].code },\n });\n }\n }\n }, [cloudProvider, deploymentOptions]);\n\n return (\n
\n \n
\n \n
\n
\n );\n}\n","import React, { ReactElement } from 'react';\nimport { Form, Radio } from 'antd';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport styles from './CardContentAvailabilityZoneMulti.module.less';\nimport { Select } from 'antd';\nimport { Typography } from 'antd';\n\ninterface Props extends CcxComponentProps {\n availabilityZones?: any[];\n onChange?: Function;\n selectedZones?: any[];\n radio?: boolean;\n numberOfNodes: number;\n}\n\nfunction CardContentAvailabilityZoneMulti({\n availabilityZones,\n onChange,\n selectedZones,\n testId = 'CardContentAvailabilityZoneMulti',\n radio = true,\n numberOfNodes,\n}: Props): ReactElement {\n const handleOnChange1 = (e: any) => {\n onChange && onChange(0, radio ? e.target.value : e);\n };\n const handleOnChange2 = (e: any) => {\n onChange && onChange(1, radio ? e.target.value : e);\n };\n const handleOnChange3 = (e: any) => {\n onChange && onChange(2, radio ? e.target.value : e);\n };\n\n const getOnChange = (i: number) => {\n if (i === 1) return handleOnChange1;\n if (i === 2) return handleOnChange2;\n if (i === 3) return handleOnChange3;\n return null;\n };\n\n const { Text } = Typography;\n\n return (\n \n {Array.from({ length: numberOfNodes }, (_, index) => index + 1).map(\n (i: number) => {\n return (\n
\n \n {!radio && *}{' '}\n Instance {i}\n
\n \n {radio ? (\n \n {availabilityZones?.map((az: any) => {\n return (\n \n {az.name}\n \n );\n })}\n \n ) : (\n \n \n {availabilityZones?.map(\n (az: any) => {\n return (\n \n {az.name}\n \n );\n }\n )}\n \n \n )}\n \n \n );\n }\n )}\n \n );\n}\n\nexport default CardContentAvailabilityZoneMulti;\n","import {\n EyeInvisibleOutlined,\n EyeOutlined,\n InfoCircleOutlined,\n} from '@severalnines/frontend_hub/libs/icons';\nimport { Radio } from 'antd';\nimport { Row } from 'antd';\nimport { Form } from 'antd';\nimport { Tooltip } from 'antd';\nimport { Select } from 'antd';\nimport { Input } from 'antd';\nimport { Col } from 'antd';\nimport { Alert } from 'antd';\nimport { FormInstance } from 'antd/lib/form';\nimport { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport CloudProvider from '../../../types/CloudProvider';\nimport DeploymentOptions from '../../../types/DeploymentOptions';\nimport Vpc from '../../../types/Vpc';\nimport CardContentAvailabilityZoneMulti from '../../ccx/common/CardContentAvailabilityZoneMulti';\nimport styles from './WizardFormConfigurationStep4.module.less';\nimport { useAppSelector } from '../../../redux/hooks';\nimport { RootState } from '../../../redux/store';\n\ninterface Props extends CcxComponentProps {\n deploymentOptions?: DeploymentOptions;\n cloudProvider?: CloudProvider;\n handleNetworkChange: Function;\n network: any;\n selectedNetwork: any;\n setNetwork: Function;\n handleNetworkTypeChange: Function;\n networkType: any;\n numberOfNodes: number;\n handleVpcChange: Function;\n vpcs?: Vpc[];\n availabilityZones: any;\n zones: any;\n handleAvailabilityZoneChange: Function;\n form: FormInstance;\n StepsExtra: Function;\n}\n\nexport function WizardFormConfigurationStep4({\n testId = 'WizardFormConfigurationStep4',\n deploymentOptions,\n cloudProvider,\n handleNetworkChange,\n network,\n selectedNetwork,\n setNetwork,\n handleNetworkTypeChange,\n networkType,\n numberOfNodes,\n handleVpcChange,\n vpcs,\n availabilityZones,\n zones,\n handleAvailabilityZoneChange,\n form,\n StepsExtra,\n}: Props): ReactElement {\n const { isBackupRestore, restoreDatastore } = useAppSelector(\n (state: RootState) => state.restoreBackup\n );\n const [localAz, setLocalAz] = useState();\n const [localNetworkType, setLocalNetworkType] =\n useState(networkType);\n\n useEffect(() => {\n if (networkType !== localNetworkType) {\n form.setFieldsValue({\n networkType,\n });\n setLocalNetworkType(networkType);\n }\n }, [networkType]);\n\n useEffect(() => {\n const {\n availabilityZones: selectedAvailabilityZones,\n networkCode: selectedNetworkCode,\n networkType: selectedNetworkType,\n vpcUuid,\n availabilityZones1,\n availabilityZones2,\n availabilityZones3,\n } = form.getFieldsValue();\n if (!selectedAvailabilityZones && !selectedNetworkType) {\n setRestoreBackupValues();\n } else {\n const tempNetworkType =\n selectedNetworkType || localNetworkType || networkType;\n setLocalNetworkType(tempNetworkType);\n setLocalAz(zones?.[0]);\n form.setFieldsValue({\n availabilityZones: selectedAvailabilityZones,\n networkType: tempNetworkType,\n networkCode: selectedNetworkCode,\n vpcUuid,\n availabilityZones1,\n availabilityZones2,\n availabilityZones3,\n });\n }\n }, [isBackupRestore, cloudProvider]);\n\n const setRestoreBackupValues = () => {\n if (\n isBackupRestore &&\n cloudProvider &&\n restoreDatastore?.cloudProvider === cloudProvider.code\n ) {\n const selectedVpc = vpcs?.find((v: Vpc) => {\n return v.id === restoreDatastore?.vpcUuid;\n });\n\n const restoreNetworkType =\n restoreDatastore?.availabilityZones?.every(\n (az: any) => az === restoreDatastore?.availabilityZones?.[0]\n );\n setLocalNetworkType(restoreNetworkType ? 'regular' : 'ha');\n const availabilityZones = restoreDatastore?.availabilityZones || [];\n const availabilityZoneFields = availabilityZones.reduce(\n (acc: any, az: any, i: number) => {\n acc[`availabilityZones${i + 1}`] = az;\n return acc;\n },\n {}\n );\n\n if (restoreNetworkType) {\n setLocalAz(restoreDatastore?.availabilityZones?.[0]);\n }\n form.setFieldsValue({\n networkCode: restoreDatastore?.networkType,\n vpcUuid: selectedVpc?.id,\n networkType: restoreNetworkType ? 'regular' : 'ha',\n availabilityZones: availabilityZones,\n ...availabilityZoneFields,\n });\n\n handleNetworkChange({\n target: {\n value: restoreDatastore?.networkType,\n },\n });\n handleVpcChange(selectedVpc?.id);\n onAvailabilityZoneChange({\n target: { value: restoreDatastore?.availabilityZones },\n });\n }\n };\n\n const onAvailabilityZoneChange = (e: any) => {\n handleAvailabilityZoneChange &&\n handleAvailabilityZoneChange(0, e.target.value);\n if (e.target.value && e.target.value instanceof Array) {\n setLocalAz(e.target.value[0]);\n } else {\n setLocalAz(e.target.value);\n }\n };\n\n const handleMultiAvailabilityZoneChange = (\n instance: number,\n value: any\n ) => {\n handleAvailabilityZoneChange &&\n handleAvailabilityZoneChange(instance, value);\n };\n\n const onChangeNetworkType = (e: any) => {\n const isRegular = e.target.value === 'regular';\n setLocalNetworkType(e.target.value);\n handleNetworkTypeChange(e);\n if (isBackupRestore && restoreDatastore && isRegular) {\n form.setFieldsValue({\n availabilityZones: [restoreDatastore.availabilityZones?.[0]],\n });\n }\n };\n\n return cloudProvider ? (\n
\n

\n Network type\n

\n \n Network type cannot be changed after\n deployment.\n \n }\n type=\"warning\"\n showIcon\n />\n\n \n \n \n {deploymentOptions\n ?.getNetworks(cloudProvider)\n ?.map((n: any) => {\n return (\n \n \n \n \n \n \n \n \n {n.name === 'Public' ? (\n \n ) : (\n \n )}\n {n.name}\n
\n \n \n );\n })}\n \n \n \n\n {selectedNetwork?.code && (\n <>\n {numberOfNodes > 1 && (\n <>\n

\n \n Availability zone{' '}\n \n \n \n \n

\n \n onChangeNetworkType(e)}\n >\n \n
\n \n \n Single AZ\n \n \n \n \n \n \n Multi AZ\n \n \n \n \n \n \n \n )}\n\n {network?.vpc_available && localNetworkType && (\n \n \n {vpcs?.map((v: Vpc) => {\n return (\n {`${v.getName()} - ${v.getCidrIpv4Block()}`}\n );\n })}\n \n Create new VPC\n \n \n \n )}\n\n {localNetworkType &&\n (availabilityZones.length ||\n restoreDatastore?.availabilityZones?.length) >\n 1 && (\n <>\n

Select a zone

\n \n {localNetworkType === 'regular' ? (\n \n \n {availabilityZones?.map(\n (az: any) => {\n return (\n \n \n \n \n {\n az.name\n }\n \n \n \n \n );\n }\n )}\n \n \n ) : (\n \n )}\n \n \n \n )}\n \n )}\n\n
\n \n
\n \n ) : (\n <>\n );\n}\n\nexport function isOnlyPublicNetworkEnabled(networks: any[]) {\n const availableNetworks = networks.filter((n) => n.enabled);\n return (\n availableNetworks.length === 1 && availableNetworks[0].code === 'public'\n );\n}\n","import { Divider } from 'antd';\nimport { Col } from 'antd';\nimport { Checkbox } from 'antd';\nimport { Tooltip } from 'antd';\nimport { Row } from 'antd';\nimport { FormInstance } from 'antd/lib/form';\nimport { ReactElement, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport { eulaEnabled, EULALink } from '../../../core/CcxEnv';\nimport CloudProvider from '../../../types/CloudProvider';\nimport DatabaseVendor from '../../../types/DatabaseVendor';\nimport Vpc from '../../../types/Vpc';\nimport AppFlagIcon from '../../ccx/common/AppFlagIcon';\nimport AppFormTag from '../../ccx/common/AppFormTag';\nimport styles from './WizardFormConfigurationStep5.module.less';\nimport DeploymentOptions from '../../../types/DeploymentOptions';\nimport Space from '../../common/antd/Space';\nimport { useAppSelector } from '../../../redux/hooks';\nimport { capitalizeFirstLetter } from '../../../core/helpers';\n\ninterface Props extends CcxComponentProps {\n logo: any;\n providerLogo: any;\n form: FormInstance;\n selectedTech?: DatabaseVendor;\n vpc?: Vpc;\n deploymentOptions?: DeploymentOptions;\n cloudProvider?: CloudProvider;\n version?: string;\n setEULA: Function;\n eula: boolean;\n StepsExtra: Function;\n hideCloudProviderStep: boolean;\n}\n\nexport function WizardFormConfigurationStep5({\n testId = 'WizardFormConfigurationStep5',\n logo,\n providerLogo,\n selectedTech,\n form,\n vpc,\n version,\n cloudProvider,\n deploymentOptions,\n setEULA,\n eula,\n StepsExtra,\n hideCloudProviderStep,\n}: Props): ReactElement {\n const [instanceDetails, setInstanceDetails] = useState();\n\n const handleEulaChange = () => {\n setEULA && setEULA(!eula);\n };\n const showNetwork = deploymentOptions && cloudProvider;\n const { isBackupRestore, restoreDatastore } = useAppSelector(\n (state) => state.restoreBackup\n );\n\n const getNetworkType = () => {\n if (form.getFieldValue('network')) {\n return capitalizeFirstLetter(form.getFieldValue('network').name);\n } else if (isBackupRestore && restoreDatastore?.networkType) {\n return capitalizeFirstLetter(restoreDatastore?.networkType);\n } else {\n return 'Public';\n }\n };\n\n return (\n
\n

\n Database\n

\n\n \n \n {logo}\n {`${selectedTech?.name} ${\n version ? version : selectedTech?.version\n }`}{' '}\n {selectedTech?.beta && ` (Beta)`}\n \n \n\n \n\n

\n Configuration\n

\n\n \n \n Name: {' '}\n \n {form.getFieldValue('deploymentName')?.length > 38\n ? ` ${form\n .getFieldValue('deploymentName')\n .substring(0, 39)}...`\n : ` ${form.getFieldValue('deploymentName')}`}\n \n \n\n
\n \n {form.getFieldValue('tags')\n ? form\n .getFieldValue('tags')\n ?.map((t: string, i: number) => (\n \n ))\n : null}\n \n \n\n {form.getFieldValue('databaseVendorType') && (\n \n Configuration:{' '}\n {form\n .getFieldValue('databaseVendor')\n ?.getVendorTypeNameByCode(\n form.getFieldValue('databaseVendorType')\n )}\n \n )}\n\n \n Number of nodes:{' '}\n {form.getFieldValue('databaseVendorType')\n ? selectedTech\n ?.getVendorTypeByCode(\n form.getFieldValue('databaseVendorType')\n )\n ?.getSizeHintsName(\n form.getFieldValue('numberOfNodes')\n )\n : form.getFieldValue('numberOfNodes')}\n \n \n Email Notifications:{' '}\n {form.getFieldValue('notificationRecipients')?.join(', ') ||\n 'Disabled'}\n \n \n\n \n\n {hideCloudProviderStep && (\n <>\n

\n Cloud service\n

\n\n \n \n Cloud service provider:\n {providerLogo}\n {deploymentOptions?.getFullName(\n form?.getFieldValue('cloudProvider')?.code\n )}\n \n\n \n Region and zone:\n {\n \n }{' '}\n {form.getFieldValue('region')?.displayCode} (\n {form.getFieldValue('region')?.city})\n \n \n\n \n \n )}\n\n

\n Instance\n

\n\n \n {form.getFieldValue('instanceSize') && (\n \n Instance:{' '}\n {`${\n deploymentOptions?.getInstanceSizeInfo(\n form.getFieldValue('cloudProvider'),\n form.getFieldValue('instanceSize')\n ).cpu\n }vCPU, ${\n deploymentOptions?.getInstanceSizeInfo(\n form.getFieldValue('cloudProvider'),\n form.getFieldValue('instanceSize')\n ).ram\n } GB RAM`}\n \n )}\n\n {form.getFieldValue('volumeType') === undefined &&\n form.getFieldValue('storageType') && (\n \n Storage type:{' '}\n {\n deploymentOptions?.getInstanceStorageType(\n form.getFieldValue('cloudProvider'),\n form.getFieldValue('storageType')\n )?.name\n }\n \n )}\n\n {form.getFieldValue('volumeType') && (\n \n Storage type:{' '}\n {form.getFieldValue('volumeType')?.info} (\n {\n deploymentOptions?.getVolumeTypeInfo(\n form.getFieldValue('cloudProvider'),\n form.getFieldValue('volumeType')\n )?.name\n }\n )\n \n )}\n\n {form.getFieldValue('volumeSize') && (\n \n Storage size:{' '}\n {form.getFieldValue('volumeSize')} GB\n \n )}\n {form.getFieldValue('volumeIops') && (\n \n Volume IOPS:{' '}\n {form.getFieldValue('volumeIops')}{' '}\n \n )}\n \n {showNetwork && (\n <>\n \n\n

\n Network settings\n

\n\n \n \n Network type: {getNetworkType()}\n \n\n {form.getFieldValue('availabilityZones')?.length && (\n \n Availability zone:{' '}\n {form.getFieldValue('networkType') === 'ha'\n ? 'Multi AZ'\n : 'Single AZ'}\n \n )}\n\n {vpc && (\n \n VPC:{' '}\n {`${vpc?.getName()} - ${vpc?.getCidrIpv4Block()}`}\n \n )}\n\n {(form.getFieldValue('availabilityZones')?.length ||\n 0) > 1 && (\n \n Zones:\n
\n {form\n .getFieldValue('availabilityZones')\n .map((az: any, index: number) => {\n return (\n
\n Instance {index + 1} -{' '}\n {deploymentOptions?.getAvailabilityZoneName(\n cloudProvider,\n form.getFieldValue(\n 'region'\n ),\n az\n )}\n
\n );\n })}\n
\n \n )}\n
\n \n )}\n {eulaEnabled && (\n <>\n \n

\n EULA\n

\n \n \n \n I have read and I hereby agree to the{' '}\n \n EULA\n \n \n \n \n \n )}\n
\n \n
\n \n );\n}\n","import {\n DeleteOutlined,\n LockOutlined,\n} from '@severalnines/frontend_hub/libs/icons';\nimport { Elements } from '@stripe/react-stripe-js';\nimport { loadStripe } from '@stripe/stripe-js/pure';\nimport { Typography } from 'antd';\nimport { Col } from 'antd';\nimport { Modal } from 'antd';\nimport { notification } from 'antd';\nimport { Row } from 'antd';\nimport { Input } from 'antd';\nimport { Button } from 'antd';\nimport { Form } from 'antd';\nimport { message } from 'antd';\nimport { Alert } from 'antd';\nimport { FormInstance } from 'antd/lib/form';\nimport { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport { billingDisabled, StripePK } from '../../../core/CcxEnv';\nimport useCards from '../../../core/hooks/useCards';\nimport BillingService from '../../../services/BillingService';\nimport CountryService from '../../../services/CountryService';\nimport Address from '../../../types/Address';\nimport BillingUserData from '../../../types/BillingUserData';\nimport Card from '../../../types/Card';\nimport Country from '../../../types/Country';\nimport Coupon from '../../../types/Coupon';\nimport AddCard from '../../account/AddCard';\nimport AppTable from '../../AppTable';\nimport AppFlagIcon from '../../ccx/common/AppFlagIcon';\nimport CcxIconCheckCircle from '../../ccx/icons/CcxIconCheckCircle';\nimport CcxIconCloseCircleTwoTone from '../../ccx/icons/CcxIconCloseCircleTwoTone';\nimport BillingForm from './BillingForm';\nimport styles from './WizardFormConfigurationStep6.module.less';\n\ninterface Props extends CcxComponentProps {\n setCheckedCoupon: Function;\n checkedCoupon?: Coupon;\n setSelectedCard: Function;\n selectedCard?: Card;\n subscription: any;\n billingForm: FormInstance;\n setCardToken: Function;\n handleCreateUser: Function;\n cardToken: any;\n isCardAttached: boolean;\n subscriptionUser: any;\n}\n\nexport function WizardFormConfigurationStep6({\n testId = 'WizardFormConfigurationStep6',\n setCheckedCoupon,\n checkedCoupon,\n setSelectedCard,\n selectedCard,\n subscription,\n billingForm,\n setCardToken,\n handleCreateUser,\n cardToken,\n subscriptionUser,\n isCardAttached,\n}: Props): ReactElement {\n const stripePromise = !billingDisabled ? loadStripe(StripePK) : null;\n const { Text } = Typography;\n const [form] = Form.useForm();\n\n const [promo, setPromo] = useState(false);\n const [addNewCard, setAddNewCard] = useState(false);\n const [editAddress, setEditAddress] = useState(false);\n const [row, setRow] = useState();\n\n const { cards, billingUser, refresh } = useCards();\n\n const [validCards, setValidCards] = useState();\n\n const [errorFields, setErrorFields] = useState([]);\n\n const [countries, setCountries] = useState([]);\n\n const [loading, setLoading] = useState(false);\n\n const onAddPromoCode = async () => {\n const formCoupon = form.getFieldValue('coupon');\n if (formCoupon) {\n try {\n const { coupon } = await BillingService.checkCoupon(formCoupon);\n\n if (!coupon || !coupon.isValid()) {\n throw 'Coupon not valid.';\n } else {\n setCheckedCoupon(coupon);\n\n setRow({\n title: coupon.name,\n coupon: coupon.coupon,\n });\n\n form.resetFields();\n }\n } catch (e) {\n message.error(e);\n throw e;\n }\n }\n };\n\n const tableColumns = [\n {\n title: 'Coupon',\n dataIndex: 'coupon',\n key: 'coupon',\n },\n {\n title: 'Title',\n key: 'title',\n render: (text: string, record: any) => (\n
\n {record.title}\n }\n onClick={() => setRow(undefined)}\n />\n
\n ),\n },\n ];\n\n const selectCard = (card: Card) => {\n setSelectedCard(card);\n };\n\n const fieldsSetup = [\n {\n name: ['firstName'],\n required: true,\n label: 'First name',\n placeholder: 'Enter your first name',\n testId: `${testId}FirstName`,\n type: 'input',\n onChange: async (v: any) => {\n setErrorFields([]);\n },\n },\n {\n name: ['lastName'],\n required: true,\n label: 'Last name',\n placeholder: 'Enter your last name',\n testId: `${testId}LastName`,\n type: 'input',\n onChange: async (v: any) => {\n setErrorFields([]);\n },\n },\n {\n name: ['country'],\n required: true,\n label: 'Country',\n testId: `${testId}Country`,\n placeholder: 'Select your country',\n type: 'select',\n options: [],\n onChange: async (v: any, o: any) => {\n setErrorFields([]);\n await form.setFieldsValue({ country: v });\n },\n },\n {\n name: ['state'],\n required: false,\n label: 'State',\n testId: `${testId}State`,\n placeholder: 'Enter your billing address',\n type: 'input',\n },\n {\n name: ['city'],\n required: false,\n label: 'City',\n testId: `${testId}City`,\n placeholder: 'Enter your City',\n type: 'input',\n },\n {\n name: ['postalCode'],\n required: false,\n label: 'Postal code',\n testId: `${testId}PostalCode`,\n placeholder: 'Enter your postal code',\n type: 'input',\n },\n {\n name: ['line1'],\n required: true,\n label: 'Address 1',\n testId: `${testId}AddressLine1`,\n placeholder: 'Enter your billing address',\n type: 'input',\n onChange: async (v: any) => {\n setErrorFields([]);\n },\n },\n {\n name: ['line2'],\n required: false,\n label: 'Address 2',\n testId: `${testId}AddressLine2`,\n placeholder: 'Enter your billing address',\n type: 'input',\n },\n {\n name: ['companyName'],\n required: false,\n label: 'Company name',\n testId: `${testId}CompanyName`,\n placeholder: 'Time travel agency Ltd.',\n type: 'input',\n },\n {\n name: ['vat'],\n required: false,\n label: 'EU VAT number',\n placeholder: 'ROU25775505',\n testId: `${testId}Vat`,\n type: 'input',\n tips: (\n
Only for countries in the EU for reverse charge rule
\n ),\n },\n ];\n\n useEffect(() => {\n if (cards && cards.length) {\n setValidCards(cards.filter((card: Card) => card.isValid()));\n }\n }, [cards]);\n\n const [fields, setFields] = useState(fieldsSetup);\n\n const handleCancel = () => {\n billingForm.resetFields();\n setErrorFields([]);\n setEditAddress(false);\n };\n\n const validateForm = async () => {\n try {\n const a = await billingForm.validateFields();\n return true;\n } catch (e: any) {\n setErrorFields(e.errorFields);\n message.error(\n 'One or more fields have errors. Please double check and try again.'\n );\n return false;\n }\n };\n\n const onSubmitCreateUser = async () => {\n const stepValid = await validateForm();\n\n if (stepValid) {\n setLoading(true);\n try {\n await handleCreateUser(billingForm);\n } catch (e) {\n console.log('error e=', e);\n }\n setLoading(false);\n }\n };\n\n const onSubmitButtonClick = async () => {\n const stepValid = await validateForm();\n\n if (stepValid) {\n setLoading(true);\n try {\n await onSubmit();\n handleCancel();\n } catch (e) {\n console.log('error e=', e);\n }\n setLoading(false);\n }\n };\n\n const onSubmit = async () => {\n try {\n const data = {\n address: new Address({\n country: billingForm.getFieldValue('country'),\n state: billingForm.getFieldValue('state'),\n city: billingForm.getFieldValue('city'),\n line_1: billingForm.getFieldValue('line1'),\n line_2: billingForm.getFieldValue('line2'),\n postal_code: billingForm.getFieldValue('postalCode'),\n }),\n userData: new BillingUserData({\n company_name: billingForm.getFieldValue('companyName'),\n eu_vat_id: billingForm.getFieldValue('vat'),\n first_name: billingForm.getFieldValue('firstName'),\n last_name: billingForm.getFieldValue('lastName'),\n }),\n };\n\n const uuid = subscription?.billingUser?.uuid;\n\n await BillingService.editUserSubscription(data, uuid);\n\n notification.open({\n message: 'Edit Address',\n description: `Address successfully edited!`,\n icon: ,\n });\n\n setLoading(false);\n } catch (e) {\n notification.open({\n message: 'Edit Address',\n description: `There was an error editing your Address. ${e}`,\n icon: ,\n });\n\n console.error(e);\n setLoading(false);\n\n throw e;\n }\n };\n\n useEffect(() => {\n const load = async () => {\n const response = await CountryService.listCountries();\n setCountries(response);\n };\n\n load();\n }, []);\n\n useEffect(() => {\n if (fields && countries && countries.length > 0) {\n const newStep1 = fields.map((f: any) => {\n if (f.name && f.name[0] === 'country') {\n f.options = countries.map((c: Country) => {\n return {\n value: c.code,\n label: c.name,\n content: (\n
\n \n {c.name}\n
\n ),\n };\n });\n }\n return f;\n });\n const newFields = newStep1;\n setFields(newFields);\n }\n }, [countries]);\n\n return (\n
\n

\n Billing info\n

\n \n To be able to create a datastore or VPC, first, you have\n to add a valid
credit or debit card to your\n account.\n \n }\n type=\"info\"\n showIcon\n />\n\n

\n Billing address\n

\n\n {subscription?.valid ? (\n
\n {billingUser?.addressData?.line1 &&\n billingUser?.addressData?.country && (\n

{`${billingUser?.addressData?.line1}, ${billingUser?.addressData?.country}`}

\n )}\n \n\n \n
\n *Required\n \n \n \n Cancel\n \n\n \n Save\n \n \n \n }\n >\n \n \n \n ) : (\n <>\n \n \n {subscriptionUser\n ? `User Added`\n : `Create new user`}\n \n \n \n )}\n\n
\n

\n Card information\n

\n
\n {stripePromise && (\n \n {isCardAttached ? (\n Card info recorded\n ) : (\n \n )}\n \n )}\n\n

\n \n \n \n We will store your data securely.\n \n \n

\n
\n\n

\n Promo codes\n

\n\n {promo ? (\n \n \n \n \n \n \n ) : (\n setPromo(true)}>\n \n I have a promo code\n \n \n )}\n\n {row && (\n <>\n

Added promo codes

\n \n \n )}\n \n );\n}\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport DatabaseVendor from '../../../types/DatabaseVendor';\nimport styles from './AddServiceCreateDatastoreStep.module.less';\nimport WizardFormConfiguration from '@severalnines/bar-frontend-components/build/lib/Navigation/Wizard/WizardFormConfiguration';\nimport { Divider } from 'antd';\nimport DeploymentOptions from '../../../types/DeploymentOptions';\nimport CloudProvider from '../../../types/CloudProvider';\nimport CloudProviderRegion from '../../../types/CloudProviderRegion';\nimport User from '../../../types/User';\nimport InstanceVolumeSize from '../../../types/InstanceVolumeSize';\nimport { WizardFormConfigurationStep1 } from './WizardFormConfigurationStep1';\nimport { WizardFormConfigurationStep2 } from './WizardFormConfigurationStep2';\nimport { WizardFormConfigurationStep3 } from './WizardFormConfigurationStep3';\nimport {\n isOnlyPublicNetworkEnabled,\n WizardFormConfigurationStep4,\n} from './WizardFormConfigurationStep4';\nimport Vpc from '../../../types/Vpc';\nimport { WizardFormConfigurationStep5 } from './WizardFormConfigurationStep5';\nimport { WizardFormConfigurationStep6 } from './WizardFormConfigurationStep6';\nimport Coupon from '../../../types/Coupon';\nimport Card from '../../../types/Card';\nimport ProvisionService from '../../../services/ProvisionService';\nimport { useHistory } from 'react-router-dom';\nimport { notification } from 'antd';\nimport CcxIconCloseCircleTwoTone from '../../ccx/icons/CcxIconCloseCircleTwoTone';\nimport { Form } from 'antd';\nimport {\n billingDisabled,\n eulaEnabled,\n hideCloudProvider,\n} from '../../../core/CcxEnv';\nimport CcxIconInfoCircleTwoTone from '../../ccx/icons/CcxIconInfoCircleTwoTone';\nimport InstanceVolumeIopsValue from '../../../types/InstanceVolumeIopsValue';\nimport InstanceVolumeType from '../../../types/InstanceVolumeType';\nimport PrettyNumber from '../../ccx/common/PrettyNumber';\nimport { FormInstance } from 'antd/lib/form';\nimport SetupIntent from '../../../types/SetupIntent';\nimport { message } from 'antd';\nimport { useAppDispatch, useAppSelector } from '../../../redux/hooks';\nimport DataStoreEmailNotificationsSettings from '../../../types/DataStoreEmailNotifications';\nimport { setInitialState } from '../../../slices/restore.slice';\nimport InstanceSize from '../../../types/InstanceSize';\nimport usePiwikPro from '../../../core/hooks/usePiwikPro';\nimport {\n CLICK_EVENT,\n CREATE_NEW_DATASTORE_ERROR,\n CREATE_NEW_DATASTORE_SUCCESS,\n} from '../../../core/PiwikConstants';\n\ninterface Props extends CcxComponentProps {\n selectedTech?: DatabaseVendor;\n form: FormInstance;\n databaseVendorType: string;\n handleDeselect: Function;\n handleTagChange: Function;\n handleVendorTypeChange: Function;\n handleCloudProviderChange: Function;\n deploymentOptions?: DeploymentOptions;\n cloudProvider?: CloudProvider;\n availabilityZones: any;\n zones: any;\n handleAvailabilityZoneChange: Function;\n regions?: CloudProviderRegion[];\n handleRegionChange: Function;\n handleInstanceSizeChange: Function;\n user?: User;\n handleVolumeTypeChange: Function;\n handleNetworkChange: Function;\n network: any;\n selectedNetwork: any;\n setNetwork: Function;\n setStep: Function;\n volumeSize?: InstanceVolumeSize;\n volumeType?: InstanceVolumeType;\n volumeIops?: InstanceVolumeIopsValue;\n handleNumberOfNodesChange: Function;\n numberOfNodes: number;\n handleNetworkTypeChange: Function;\n networkType: any;\n handleVpcChange: Function;\n vpcs?: Vpc[];\n vpc?: Vpc;\n logo: any;\n providerLogo: any;\n createUserSubscription: Function;\n handleOnValuesChange: Function;\n enteredVolumeSize?: number;\n setEnteredVolumeSize: Function;\n setEnteredIOPS: Function;\n monthlyCost: number;\n version?: string;\n subscriptionUser: any;\n handleCreateUser: Function;\n handleSetupIntent: Function;\n intentResponse?: SetupIntent;\n setSelectedTechType: Function;\n setSelectedTech: Function;\n setVersion: Function;\n showCloudProviderStep: Function;\n saveEmailNotifications: Function;\n notificationEmails: string[] | undefined;\n region?: CloudProviderRegion;\n selectedCloudProvider?: CloudProvider;\n handleVolumeIopsChange: (\n value: InstanceVolumeIopsValue | undefined\n ) => void;\n instance?: InstanceSize;\n setVolumeSize: React.Dispatch<\n React.SetStateAction\n >;\n}\n\nexport default function AddServiceCreateDatastoreStep({\n testId = 'AddServiceCreateDatastoreStep',\n selectedTech,\n form,\n databaseVendorType,\n handleTagChange,\n handleDeselect,\n handleVendorTypeChange,\n deploymentOptions,\n handleCloudProviderChange,\n cloudProvider,\n availabilityZones,\n zones,\n handleAvailabilityZoneChange,\n regions,\n handleRegionChange,\n handleInstanceSizeChange,\n user,\n handleVolumeTypeChange,\n handleNetworkChange,\n setStep,\n volumeSize,\n volumeType,\n volumeIops,\n setVolumeSize,\n network,\n selectedNetwork,\n setNetwork,\n handleNetworkTypeChange,\n networkType,\n handleNumberOfNodesChange,\n numberOfNodes,\n handleVpcChange,\n vpcs,\n vpc,\n logo,\n providerLogo,\n createUserSubscription,\n handleOnValuesChange,\n enteredVolumeSize,\n setEnteredVolumeSize,\n setEnteredIOPS,\n monthlyCost,\n version,\n subscriptionUser,\n handleCreateUser,\n handleSetupIntent,\n intentResponse,\n setSelectedTechType,\n setSelectedTech,\n setVersion,\n showCloudProviderStep,\n saveEmailNotifications,\n notificationEmails,\n selectedCloudProvider,\n region,\n handleVolumeIopsChange,\n instance,\n}: Props): ReactElement {\n const { trackPageView, trackEvent } = usePiwikPro();\n const [checkedCoupon, setCheckedCoupon] = useState();\n const [selectedCard, setSelectedCard] = useState();\n const [billingForm] = Form.useForm();\n const [cardToken, setCardToken] = useState();\n const [validNotificationEmails, setValidNotificationEmails] =\n useState(false);\n\n const [submitDisabled, setSubmitDisabled] = useState(false);\n\n const [eula, setEULA] = useState(false);\n\n const history = useHistory();\n const { isBackupRestore, restoreDatastore } = useAppSelector(\n (state) => state.restoreBackup\n );\n const dispatch = useAppDispatch();\n\n useEffect(() => {\n if (cardToken) {\n handleSetupIntent(cardToken.id);\n }\n }, [cardToken]);\n\n const handleStepChange = (step: number) => {\n if (step === 0 && !isBackupRestore) {\n setSelectedTech(undefined);\n setVersion(undefined);\n form.setFieldsValue({\n version: undefined,\n });\n setStep('databaseVendor');\n }\n };\n\n const { subscription } = useAppSelector((state) => state.user);\n\n useEffect(() => {\n form.setFieldValue('numberOfNodes', numberOfNodes);\n }, []);\n\n const handleSubmit = async () => {\n try {\n if (eulaEnabled) {\n if (!eula) {\n message.error('Please agree to EULA to proceed');\n return;\n }\n }\n\n setSubmitDisabled(true);\n if (!billingDisabled && !subscription?.valid) {\n if (subscriptionUser && intentResponse) {\n await createUserSubscription(\n billingForm,\n intentResponse.paymentMethodID\n );\n } else {\n message.error(\n 'Please complete \"Billing address\" and \"Card information\" sections'\n );\n return;\n }\n }\n\n let selectedRegion = form.getFieldValue('region')?.code;\n\n if (\n hideCloudProvider ||\n deploymentOptions?.hasOnlyOneCloudProviderAndRegion()\n ) {\n selectedRegion = cloudProvider?.getDefaultRegion().code;\n }\n\n const volumeType =\n form.getFieldValue('volumeType') ??\n form.getFieldValue('storageType') ??\n '';\n\n const datastoreData: any = {\n clusterName: form.getFieldValue('deploymentName'),\n numberOfNodes: form.getFieldValue('numberOfNodes'),\n databaseVendor: form.getFieldValue('databaseVendor')?.code,\n databaseVendorType: form.getFieldValue('databaseVendorType'),\n tags: form.getFieldValue('tags'),\n cloudProvider: cloudProvider?.code,\n cloudRegion: selectedRegion,\n instanceSize: deploymentOptions?.getInstanceSizeInfo(\n form.getFieldValue('cloudProvider'),\n form.getFieldValue('instanceSize')\n )?.code,\n volumeType: deploymentOptions?.getVolumeTypeInfo(\n form.getFieldValue('cloudProvider'),\n volumeType\n )?.code,\n volumeSize: form.getFieldValue('volumeSize'),\n volumeIops: form.getFieldValue('volumeIops'),\n networkType: form.getFieldValue('network')?.code,\n haEnabled: form.getFieldValue('networkType') === 'ha',\n vpcUuid: form.getFieldValue('vpcUuid'),\n availabilityZones: form.getFieldValue('availabilityZones'),\n version: form.getFieldValue('version'),\n notifications: new DataStoreEmailNotificationsSettings({\n enabled: notificationEmails\n ? notificationEmails.length > 0\n : false,\n emails: notificationEmails || [],\n }),\n backupId: restoreDatastore?.backupId,\n dataStoreUuid: restoreDatastore?.dataStoreUuid,\n parameterGroupId: form.getFieldValue('parameterGroup'),\n };\n\n await ProvisionService.addDeploymentV2(datastoreData);\n\n form.resetFields();\n\n setSubmitDisabled(false);\n trackEvent(CLICK_EVENT, CREATE_NEW_DATASTORE_SUCCESS);\n history.push({\n pathname: '/',\n state: { deploying: true },\n });\n\n notification.open({\n message: 'Creating datastore',\n description: `Your datastore will get deployed shortly.`,\n icon: ,\n });\n } catch (e: any) {\n setSubmitDisabled(false);\n trackEvent(CLICK_EVENT, CREATE_NEW_DATASTORE_ERROR);\n\n notification.open({\n message: 'Add datastore',\n description: `There was an error creating your datastore. ${e}`,\n icon: ,\n });\n }\n };\n\n const showNetworkStep =\n deploymentOptions &&\n cloudProvider &&\n region &&\n availabilityZones?.length > 1;\n\n const networkStep = showNetworkStep ? (\n \n \n !billingDisabled && (\n \n
Estimated cost:
\n $}\n value={monthlyCost}\n sufix={' / month'}\n />\n \n )\n }\n />\n \n ) : undefined;\n\n const steps = [\n !isBackupRestore && (\n \n
\n
\n ),\n \n \n ,\n showCloudProviderStep() && (\n \n \n \n ),\n \n {cloudProvider && (\n \n !billingDisabled && (\n \n
Estimated cost:
\n $}\n value={monthlyCost}\n sufix={' / month'}\n />\n \n )\n }\n />\n )}\n ,\n networkStep,\n \n \n !billingDisabled && (\n \n
Estimated cost:
\n $}\n value={monthlyCost}\n sufix={' / month'}\n />\n \n )\n }\n />\n ,\n \n \n ,\n ].filter((step): step is ReactElement => !!step);\n\n if (billingDisabled || subscription?.valid) {\n steps.pop();\n }\n\n return (\n \n

\n Creating a{' '}\n {`${selectedTech?.name} ${\n version ? version : selectedTech?.version\n }`}{' '}\n datastore\n

\n \n {\n dispatch(setInitialState());\n history.goBack();\n }}\n onSubmit={handleSubmit}\n onValuesChange={() => handleOnValuesChange()}\n defaultActiveStep=\"1\"\n steps={steps}\n stepsExtra={(stepKey: string, stepIndex: number) =>\n ((!billingDisabled && stepIndex >= 3) ||\n (!billingDisabled &&\n isBackupRestore &&\n stepIndex >= 2)) && (\n \n
Estimated cost:
\n $}\n value={monthlyCost}\n sufix={' / month'}\n />\n \n )\n }\n />\n \n );\n}\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport styles from './AddServiceCreateVPCStep.module.less';\nimport WizardFormConfiguration from '@severalnines/bar-frontend-components/build/lib/Navigation/Wizard/WizardFormConfiguration';\nimport { Divider } from 'antd';\nimport { Form } from 'antd';\nimport { message } from 'antd';\nimport { WizardFormConfigurationStep2 } from './WizardFormConfigurationStep2';\nimport useContentProviders from '../../../core/hooks/useContentProviders';\nimport useContentCidrs from '../../../core/hooks/useContentCidrs';\nimport { Input } from 'antd';\nimport { Select } from 'antd';\nimport CloudProviderRegion from '../../../types/CloudProviderRegion';\nimport { Row } from 'antd';\nimport { Col } from 'antd';\nimport AppFlagIcon from '../../ccx/common/AppFlagIcon';\nimport { WizardFormConfigurationStep6 } from './WizardFormConfigurationStep6';\nimport Coupon from '../../../types/Coupon';\nimport Card from '../../../types/Card';\nimport { useHistory } from 'react-router-dom';\nimport { notification } from 'antd';\nimport CcxIconCloseCircleTwoTone from '../../ccx/icons/CcxIconCloseCircleTwoTone';\nimport CloudProvider from '../../../types/CloudProvider';\nimport { FormInstance } from 'antd/lib/form';\nimport SetupIntent from '../../../types/SetupIntent';\nimport { useAppSelector } from '../../../redux/hooks';\nimport usePiwikPro from '../../../core/hooks/usePiwikPro';\nimport {\n CLICK_EVENT,\n CREATE_NEW_VPC_ERROR,\n CREATE_NEW_VPC_SUCCESS,\n} from '../../../core/PiwikConstants';\n\ninterface Props extends CcxComponentProps {\n form: FormInstance;\n vpcContext: any;\n doApiRequest: Function;\n validateForm: Function;\n providerLogo: Function;\n createUserSubscription: Function;\n subscriptionUser: any;\n handleCreateUser: Function;\n handleSetupIntent: Function;\n intentResponse?: SetupIntent;\n}\n\nexport default function AddServiceCreateVPCStep({\n testId = 'AddServiceCreateVPCStep',\n form,\n vpcContext,\n doApiRequest,\n validateForm,\n providerLogo,\n createUserSubscription,\n subscriptionUser,\n handleCreateUser,\n handleSetupIntent,\n intentResponse,\n}: Props): ReactElement {\n const { cloudProviders, loading: loadingProviders } = useContentProviders();\n const { cidrs, loading: loadingCidrs } = useContentCidrs();\n const { trackPageView, trackEvent } = usePiwikPro();\n\n const [regions, setRegions] = useState();\n const [region, setRegion] = useState();\n\n const [checkedCoupon, setCheckedCoupon] = useState();\n const [selectedCard, setSelectedCard] = useState();\n const [billingForm] = Form.useForm();\n const [cardToken, setCardToken] = useState();\n\n const [submitDisabled, setSubmitDisabled] = useState(false);\n\n const history = useHistory();\n\n useEffect(() => {\n if (cardToken) {\n handleSetupIntent(cardToken.id);\n }\n }, [cardToken]);\n\n const handleCancel = () => {\n history.goBack();\n };\n\n const { subscription } = useAppSelector((state) => state.user);\n\n const onSubmitButtonClick = async () => {\n const stepValid = await validateForm(form);\n\n if (stepValid) {\n try {\n form.getFieldValue('cloudProvider') &&\n form.getFieldValue('region') &&\n (await doApiRequest(\n {\n vpcName: form.getFieldValue('vpcName'),\n cidrIpv4Block: form.getFieldValue('cidrIpv4Block'),\n },\n form.getFieldValue('cloudProvider'),\n form.getFieldValue('region')\n ));\n } catch (e) {\n console.log('error e=', e);\n message.error('There was an error.' + e);\n }\n }\n };\n\n const handleSubmit = async () => {\n try {\n setSubmitDisabled(true);\n\n if (!subscription?.valid) {\n if (subscriptionUser && intentResponse) {\n await createUserSubscription(\n billingForm,\n intentResponse.paymentMethodID\n );\n } else {\n message.error(\n 'Please complete \"Billing address\" and \"Card information\" sections'\n );\n return;\n }\n }\n\n await onSubmitButtonClick();\n\n form.resetFields();\n\n vpcContext.refresh && (await vpcContext.refresh());\n trackEvent(CLICK_EVENT, CREATE_NEW_VPC_SUCCESS);\n\n history.push({\n pathname: '/',\n });\n } catch (e: any) {\n trackEvent(CLICK_EVENT, CREATE_NEW_VPC_ERROR);\n notification.open({\n message: 'Create VPC',\n description: `There was an error creating your VPC. ${e}`,\n icon: ,\n });\n } finally {\n setSubmitDisabled(false);\n }\n };\n\n const steps = [\n \n
\n \n \n \n\n {cidrs && (\n \n \n {cidrs?.map((c: string) => {\n return (\n \n {c}\n \n );\n })}\n \n \n )}\n
\n ,\n \n {\n // only show AWS for now\n return c.isAws();\n })}\n regions={regions}\n handleCloudProviderChange={() =>\n setRegions(form.getFieldValue('cloudProvider').regions)\n }\n handleRegionChange={(e: any) => {\n setRegion(e.target.value);\n }}\n form={form}\n />\n ,\n \n
\n

\n Configuration\n

\n\n \n \n Name: {' '}\n {` ${form.getFieldValue('vpcName')}`}\n \n \n IPv4 CIDR block: {' '}\n {` ${form.getFieldValue('cidrIpv4Block')}`}\n \n \n \n\n

\n Cloud service\n

\n\n \n {form.getFieldValue('cloudProvider') && (\n \n Cloud service provider:{' '}\n {providerLogo(form.getFieldValue('cloudProvider'))}\n \n )}\n\n {form.getFieldValue('region') && (\n \n Region:{' '}\n {' '}\n {form.getFieldValue('region').displayCode} (\n {form.getFieldValue('region').city})\n \n )}\n \n
\n ,\n \n \n ,\n ];\n\n if (subscription?.valid) {\n steps.pop();\n }\n\n return (\n \n

\n Create a virtual private cloud\n

\n \n \n \n );\n}\n","import { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nexport const usePageTracking = (): void => {\n const location = useLocation();\n\n useEffect(() => {\n (window as any).gtag('event', 'page_view', {\n page_path: location.pathname + location.search + location.hash,\n page_search: location.search,\n page_hash: location.hash,\n });\n }, [location]);\n};\n","import {\n ReactElement,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport WizardConfiguration from '../../../tmp/WizardConfiguration';\nimport styles from './AddService.module.less';\nimport {\n Typography,\n Button,\n Row,\n Col,\n Form,\n message,\n Tooltip,\n Modal,\n notification,\n Spin,\n Radio,\n} from 'antd';\nimport DatabaseVendor from '../../../types/DatabaseVendor';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport { CDN_URL, hideCloudProvider } from '../../../core/CcxEnv';\nimport CloudProvider from '../../../types/CloudProvider';\nimport CloudProviderRegion from '../../../types/CloudProviderRegion';\nimport InstanceSize from '../../../types/InstanceSize';\nimport User from '../../../types/User';\nimport InstanceVolumeType from '../../../types/InstanceVolumeType';\nimport AddServiceDatabaseVendorStep from './AddServiceDatabaseVendorStep';\nimport AddServiceCreateDatastoreStep from './AddServiceCreateDatastoreStep';\nimport { WizardSelectTypeStepIcon } from '../../../tmp/WizardSelectTypeStep';\nimport InstanceVolumeSize from '../../../types/InstanceVolumeSize';\nimport { useHistory, useParams } from 'react-router-dom';\nimport useVpcs from '../../../core/hooks/useVpcs';\nimport Vpc from '../../../types/Vpc';\nimport useContentCidrs from '../../../core/hooks/useContentCidrs';\nimport { InfoCircleOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport AppForm from '../../ccx/common/AppForm';\nimport VpcService from '../../../services/VpcService';\nimport CcxIconCheckCircle from '../../ccx/icons/CcxIconCheckCircle';\nimport { VpcsContext } from '../../../core/context/VpcsContext';\nimport CcxIconCloseCircleTwoTone from '../../ccx/icons/CcxIconCloseCircleTwoTone';\nimport AppLogoBrandMardiaDb from '../../ccx/common/AppLogoBrandMardiaDb';\nimport AppLogoBrandPostgreSql from '../../ccx/common/AppLogoBrandPostgreSql';\nimport AppLogoBrandPercona from '../../ccx/common/AppLogoBrandPercona';\nimport AppLogoBrandRedis from '../../ccx/common/AppLogoBrandRedis';\nimport AddServiceCreateVPCStep from './AddServiceCreateVPCStep';\nimport Address from '../../../types/Address';\nimport BillingUserData from '../../../types/BillingUserData';\nimport BillingService from '../../../services/BillingService';\nimport InstanceVolumeIopsValue from '../../../types/InstanceVolumeIopsValue';\nimport { FormInstance } from 'antd/lib/form';\nimport SetupIntent from '../../../types/SetupIntent';\nimport { usePageTracking } from '../../../core/hooks/usePageTracking';\nimport AppLogoBrandMssql from '../../ccx/common/AppLogoBrandMssql';\nimport { isOnlyPublicNetworkEnabled } from './WizardFormConfigurationStep4';\nimport { getCloudProviderLogo } from '../../projects/dataStores/DataStoreCloudProviderLogo';\nimport { useAppDispatch, useAppSelector } from '../../../redux/hooks';\nimport {\n excludeFakeAddresses,\n getStripeErrorMessage,\n replaceIfRedis,\n} from '../../../core/helpers';\nimport { RootState } from '../../../redux/store';\nimport usePiwikPro from '../../../core/hooks/usePiwikPro';\nimport { INITIATED_ADDING_NEW_DATASTORE } from '../../../core/PiwikConstants';\n\ninterface Props extends CcxComponentProps {\n user?: User;\n}\n\ninterface UrlProps {\n service: 'vpc' | 'datastore';\n}\n\nexport default function AddService({\n testId = 'AddService',\n user,\n}: Props): ReactElement {\n usePageTracking();\n\n const { Text } = Typography;\n const { trackPageView } = usePiwikPro();\n const { service } = useParams();\n\n const { deploymentOptions, isLoading: loading } = useAppSelector(\n (state) => state.deploymentOptions\n );\n const [dbVendors, setDbVendors] = useState();\n\n const [form] = Form.useForm();\n const [vpcForm] = Form.useForm();\n const [vpcWizardForm] = Form.useForm();\n const vpcContext = useContext(VpcsContext);\n\n const [step, setStep] = useState(\n service === 'vpc' ? 'createVPC' : 'databaseVendor'\n );\n const [actionType] = useState('datastore');\n const [selectedTechType, setSelectedTechType] = useState();\n const [selectedTech, setSelectedTech] = useState();\n const [databaseVendorType, setDatabaseVendorType] = useState('');\n const [cloudProvider, setCloudProvider] = useState();\n const [selectedCloudProvider, setSelectedCloudProvider] =\n useState();\n const [regions, setRegions] = useState();\n const [region, setRegion] = useState();\n const [instance, setInstance] = useState();\n const [volumeType, setVolumeType] = useState();\n const [network, setNetwork] = useState(undefined);\n const [networkType, setNetworkType] = useState(undefined);\n const [numberOfNodes, setNumberOfNodes] = useState(1);\n const [volumeSize, setVolumeSize] = useState<\n InstanceVolumeSize | undefined\n >(undefined);\n const [volumeIops, setVolumeIops] = useState<\n InstanceVolumeIopsValue | undefined\n >(undefined);\n const [monthlyCost, setMonthlyCost] = useState(0);\n const [version, setVersion] = useState();\n\n const { vpcs, refresh: refreshVpcs } = useVpcs(\n cloudProvider?.code,\n region?.code\n );\n\n const [vpc, setVpc] = useState(undefined);\n\n const [availabilityZones, setAvailabilityZones] = useState(undefined);\n const [zones, setZones] = useState(undefined);\n\n const [vpcModal, setVpcModal] = useState(false);\n\n const [enteredVolumeSize, setEnteredVolumeSize] = useState<\n number | undefined\n >(undefined);\n\n const [enteredIOPS, setEnteredIOPS] = useState(\n undefined\n );\n const [selectedNetwork, setSelectedNetwork] = useState();\n\n useEffect(() => {\n trackPageView(INITIATED_ADDING_NEW_DATASTORE);\n }, []);\n\n useEffect(() => {\n if (deploymentOptions && cloudProvider) {\n const allNetworks = deploymentOptions\n ?.getNetworks(cloudProvider)\n ?.filter((value: any) => value.enabled);\n\n if (allNetworks?.length === 1) {\n const networkDefault = allNetworks[0];\n\n form.setFieldsValue({\n networkCode: networkDefault?.code,\n });\n setSelectedNetwork(networkDefault);\n setNetworkType('regular');\n }\n }\n }, [deploymentOptions, cloudProvider]);\n\n const { cidrs } = useContentCidrs();\n const dispatch = useAppDispatch();\n const getLogo = (v: DatabaseVendor, isString = true): any => {\n if (isString) {\n if (v.isMariadb())\n return `${CDN_URL}vendor-mariadb-brand-logo-short.svg`;\n if (v.isPostgreSql())\n return `${CDN_URL}vendor-postgresql-brand-logo-short.svg`;\n if (v.isPercona())\n return `${CDN_URL}vendor-mysql-brand-logo-short.svg`;\n if (v.isRedis()) return `${CDN_URL}Cache22-icon.svg`;\n if (v.isMssql()) return `${CDN_URL}vendor-mssql-brand-logo.svg`;\n return '';\n } else {\n if (v.isMariadb())\n return ;\n if (v.isPostgreSql())\n return (\n \n );\n if (v.isPercona())\n return ;\n if (v.isRedis())\n return ;\n if (v.isMssql())\n return ;\n return null;\n }\n };\n\n const fieldsSetup = {\n step1: [\n {\n name: ['vpcName'],\n testId: 'CreateVpcButtonVpcName',\n required: true,\n label: 'Name',\n placeholder: 'Name your VPC',\n type: 'input',\n },\n {\n name: ['cidrIpv4Block'],\n testId: 'CreateVpcButtonCidrIpv4Block',\n required: true,\n label: (\n <>\n IPv4 CIDR block\n \n \n \n \n ),\n validationName: 'IPv4 CIDR block',\n placeholder: 'Select a CIDR block from the list',\n type: 'select',\n options: [],\n },\n ],\n };\n\n const [fields, setFields] = useState(fieldsSetup);\n const [errorFields, setErrorFields] = useState([]);\n\n const [subscriptionUser, setSubscriptionUser] = useState(false);\n const [notificationEmails, setNotificationEmails] = useState<\n string[] | undefined\n >(undefined);\n const [intentResponse, setIntentResponse] = useState();\n\n const history = useHistory();\n\n const { isBackupRestore, restoreDatastore } = useAppSelector(\n (state: RootState) => state.restoreBackup\n );\n\n useEffect(() => {\n const instanceMonthlyPrice = instance?.getMonthlyPrice() || 0;\n const instanceNumber = numberOfNodes || 0;\n const storageMonthlyPrice =\n (volumeType && volumeType?.getMonthlyPrice()) || 0;\n const numberOfGB = enteredVolumeSize || 0;\n const iopsMonthlyPrice = volumeType?.getMonthlyIOPSPrice() || 0;\n const numberOfIOPS = enteredIOPS || 0;\n\n const monthlyPriceEstimate =\n instanceMonthlyPrice * instanceNumber +\n storageMonthlyPrice * instanceNumber * numberOfGB +\n iopsMonthlyPrice * instanceNumber * numberOfIOPS;\n\n setMonthlyCost(parseFloat(monthlyPriceEstimate.toFixed(2)));\n }, [instance, numberOfNodes, volumeType, enteredVolumeSize, enteredIOPS]);\n\n useEffect(() => {\n if (fields && cloudProvider && region) {\n const newFields = fields;\n setFields(newFields);\n }\n }, [cloudProvider, fields, region]);\n\n useEffect(() => {\n if (fields && cidrs && cidrs.length > 0) {\n const newStep1 = fields.step1.map((f: any) => {\n if (f.name && f.name[0] === 'cidrIpv4Block') {\n f.options =\n cidrs?.map((c: string) => {\n return { label: c, value: c };\n }) || [];\n }\n\n return f;\n });\n const newFields = fields;\n newFields.step1 = newStep1;\n setFields(newFields);\n }\n }, [cidrs, fields]);\n\n const networks = useMemo(() => {\n if (cloudProvider && deploymentOptions) {\n return deploymentOptions?.getNetworks(cloudProvider);\n }\n return undefined;\n }, [cloudProvider, deploymentOptions]);\n\n useEffect(() => {\n if (\n deploymentOptions?.getDatabaseVendors() &&\n deploymentOptions?.getDatabaseVendors().length > 0\n ) {\n setDbVendors(\n deploymentOptions\n ?.getDatabaseVendors()\n .map((v: DatabaseVendor) => {\n const icon: WizardSelectTypeStepIcon = {\n name: v.name,\n src: getLogo(v),\n };\n return {\n name: v.name,\n key: v.code,\n icon,\n value: '',\n beta: v.beta,\n description: replaceIfRedis(v.info),\n documentationLink: '',\n extensions:\n v.extensions.length > 0 ? (\n
\n The following extensions are supported:\n
    \n {v.extensions.map((e: string) => (\n
  • {e}
  • \n ))}\n
\n
\n ) : (\n <>\n ),\n extra:\n v.versions && v.versions.length > 0 ? (\n
\n * Version:{' '}\n {getVersionButtons(v)}\n
\n ) : null,\n };\n })\n );\n }\n }, [deploymentOptions]);\n\n useEffect(() => {\n if (selectedCloudProvider) {\n setRegions(selectedCloudProvider.regions);\n setInstance(undefined);\n setVolumeType(undefined);\n setVolumeSize(undefined);\n\n const networks = deploymentOptions?.getNetworks(\n selectedCloudProvider\n );\n let network = undefined;\n if (networks && isOnlyPublicNetworkEnabled(networks)) {\n network = networks.find((n: any) => n.code === 'public');\n }\n\n form.setFieldsValue({\n instanceSize: undefined,\n volumeType: undefined,\n volumeSize: undefined,\n network,\n });\n\n setDefaultRegion();\n }\n }, [selectedCloudProvider]);\n\n useEffect(() => {\n if (deploymentOptions?.hasOnlyOneCloudProviderAndRegion()) {\n setDefaultRegion();\n }\n\n if (cloudProvider && region) {\n setAvailabilityZones(\n deploymentOptions?.getAvailabilityZones(cloudProvider, region)\n );\n setZones(undefined);\n }\n }, [cloudProvider, region]);\n\n useEffect(() => {\n form.setFieldsValue({\n databaseVendor: selectedTech,\n databaseVendorType: undefined,\n });\n setDatabaseVendorType('');\n }, [selectedTech]);\n\n useEffect(() => {\n if (user) {\n const emails = excludeFakeAddresses([user?.login]);\n\n form.setFieldsValue({\n notificationRecipients: emails,\n });\n\n setNotificationEmails(emails);\n }\n }, [form, user]);\n\n useEffect(() => {\n const vs =\n cloudProvider &&\n volumeType &&\n deploymentOptions?.getVolumeSize(cloudProvider, volumeType);\n\n // Don't set volume size in case of redis. That will be computed dynamically on backend\n if (selectedTech?.code !== 'redis') {\n if (\n !form.getFieldValue('volumeSize') ||\n (vs &&\n (form.getFieldValue('volumeSize') < vs?.min ||\n form.getFieldValue('volumeSize') > vs?.max))\n ) {\n form.setFieldsValue({\n volumeSize: vs?.default,\n });\n }\n setVolumeSize(vs);\n }\n }, [cloudProvider, volumeType]);\n\n useEffect(() => {\n if (vpcs && vpcs.length === 1 && network?.code === 'private') {\n setVpc(vpcs[0]);\n form.setFieldsValue({ vpcUuid: vpcs[0]?.id });\n } else {\n setVpc(undefined);\n form.setFieldsValue({ vpcUuid: undefined });\n }\n }, [vpcs]);\n\n const handleVolumeIopsChange = (\n value: InstanceVolumeIopsValue | undefined\n ) => {\n setVolumeIops(value);\n };\n\n const handleOnValuesChange = () => {\n const localNetwork = networks?.find(\n (item) => item.code === form.getFieldValue('networkCode')\n );\n setNumberOfNodes(form.getFieldValue('numberOfNodes'));\n setNetwork(localNetwork);\n setSelectedTech(form.getFieldValue('databaseVendor'));\n setDatabaseVendorType(form.getFieldValue('databaseVendorType'));\n if (form.getFieldValue('volumeType')) {\n setVolumeType(\n deploymentOptions?.getVolumeTypeInfo(\n form.getFieldValue('cloudProvider'),\n form.getFieldValue('volumeType')\n )\n );\n }\n setNetworkType(form.getFieldValue('networkType'));\n\n const cp = form.getFieldValue('cloudProvider');\n if (cp) {\n // check if the selected provider has only 1 volumeType\n if (deploymentOptions?.getVolumeTypes(cp)?.length === 1) {\n form.setFieldsValue({\n volumeType: deploymentOptions.getVolumeTypes(cp)[0].code,\n });\n }\n }\n\n if (\n form.getFieldValue('cloudProvider') &&\n cloudProvider &&\n region &&\n volumeType\n ) {\n const vt = deploymentOptions?.getVolumeTypeInfo(\n cloudProvider,\n volumeType?.code\n );\n const vs = deploymentOptions?.getVolumeSize(cloudProvider, vt);\n const vi = deploymentOptions?.getVolumeIops(\n cloudProvider,\n form.getFieldValue('volumeType')\n );\n // Don't set volume size in case of redis. That will be computed dynamically on backend\n if (selectedTech?.code !== 'redis') {\n if (!form.getFieldValue('volumeSize')) {\n form.setFieldsValue({\n volumeSize: vs?.default,\n });\n setVolumeSize(vs);\n }\n }\n\n if (!form.getFieldValue('volumeIops')) {\n form.setFieldsValue({\n volumeIops: vi?.default,\n });\n }\n\n setVolumeSize(vs);\n handleVolumeIopsChange(vi);\n }\n\n if (\n form.getFieldValue('cloudProvider') &&\n cloudProvider &&\n region &&\n form.getFieldValue('cloudRegion')\n ) {\n setAvailabilityZones(\n deploymentOptions?.getAvailabilityZones(\n cloudProvider,\n form.getFieldValue('cloudRegion')\n )\n );\n }\n\n // reset vpc, networkType, and availabilityZones formvalues when network is set to 'public'\n if (\n localNetwork?.code === 'public' &&\n network?.code !== localNetwork?.code\n ) {\n form.setFieldsValue({ vpcUuid: undefined });\n setVpc(undefined);\n updateFormValues(localNetwork.code);\n } else if (\n localNetwork?.code === 'private' &&\n !form.getFieldValue('networkType') &&\n localNetwork?.code !== network?.code\n ) {\n updateFormValues(localNetwork.code);\n }\n\n if (form.getFieldValue('instanceSize')) {\n setInstance(\n deploymentOptions?.getInstanceSizeInfo(\n form.getFieldValue('cloudProvider'),\n form.getFieldValue('instanceSize')\n )\n );\n }\n };\n\n const updateFormValues = (localNetworkCode: string) => {\n const isHaAvailable =\n numberOfNodes > 1 && availabilityZones?.length > 1;\n form.setFieldsValue({\n networkType: isHaAvailable ? undefined : 'regular',\n });\n setNetworkType(isHaAvailable ? undefined : 'regular');\n\n if (\n !form.getFieldValue('availabilityZones') &&\n availabilityZones?.length === 1\n ) {\n handleAvailabilityZoneChange?.(0, availabilityZones[0]?.code);\n }\n\n if (\n localNetworkCode === 'private' &&\n !form.getFieldValue('vpcUuid') &&\n vpcs?.length === 1\n ) {\n handleVpcChange?.(vpcs[0]?.id);\n }\n };\n\n const showCloudProviderStep = (): boolean => {\n return !(\n hideCloudProvider ||\n deploymentOptions?.hasOnlyOneCloudProviderAndRegion()\n );\n };\n\n const handleTechTypeSelect = (type: string) => {\n if (!showCloudProviderStep()) {\n setDefaultCloudProvider();\n }\n setSelectedTechType(type);\n setSelectedTech(deploymentOptions?.getDatabaseVendorByCode(type));\n };\n\n const handleTechTypeContinueClick = () => {\n setStep('createDatastore');\n };\n\n const setDefaultCloudProvider = () => {\n const defaultCloudProvider =\n deploymentOptions?.getDefaultCloudProviders();\n setCloudProvider(defaultCloudProvider);\n form.setFieldsValue({\n cloudProvider: defaultCloudProvider,\n });\n };\n\n const setDefaultRegion = () => {\n const defaultRegion = cloudProvider?.getDefaultRegion();\n if (!showCloudProviderStep()) {\n setRegion(defaultRegion);\n form.setFieldsValue({\n region: defaultRegion,\n });\n } else if (!isBackupRestore) {\n setRegion(undefined);\n form.setFieldsValue({\n region: undefined,\n });\n }\n };\n\n const handleBackClick = () => {\n history.push({\n pathname: '/',\n });\n };\n\n const handleDeselect = (a: any) => {\n message.info(`Tag \"${a}\" was removed`);\n };\n\n const handleTagChange = (values: any) => {\n const tags = values\n ?.map((tag: string) => tag.trim())\n .filter((tag: string) => tag !== '');\n const uniqueTags = Array.from(new Set(tags));\n\n if (form) {\n form.setFieldsValue({\n tags: uniqueTags,\n });\n }\n\n if (values.length > 12) {\n values.pop();\n message.warning('You may only add up to 12 tags');\n }\n };\n\n const handleVendorTypeChange = (e: any) => {\n setDatabaseVendorType(e.target.value);\n const selectedNumberOfNodes =\n selectedTech?.getSelectedNode(e.target.value) ||\n form.getFieldValue('numberOfNodes');\n\n setNumberOfNodes(selectedNumberOfNodes || 1);\n form.setFieldsValue({\n numberOfNodes: selectedNumberOfNodes || 1,\n });\n };\n\n const handleCloudProviderChange = (e: any) => {\n if (!(cloudProvider && cloudProvider.logo === e.target.value.logo)) {\n setCloudProvider(e.target.value);\n form.setFieldValue('cloudProvider', e.target.value);\n setSelectedCloudProvider(e.target.value);\n setRegion(undefined);\n setVolumeSize(undefined);\n setVolumeType(undefined);\n setVolumeIops(undefined);\n setAvailabilityZones(undefined);\n setZones(undefined);\n form.setFieldsValue({\n region: undefined,\n volumeSize: undefined,\n volumeType: undefined,\n volumeIops: undefined,\n availabilityZones: undefined,\n availabilityZones1: undefined,\n availabilityZones2: undefined,\n availabilityZones3: undefined,\n });\n }\n };\n\n const handleInstanceSizeChange = (e: any) => {\n setInstance(e.target.value);\n const seletedInstanceVolumeType = deploymentOptions?.getVolumeTypeInfo(\n form.getFieldValue('cloudProvider'),\n e.target.value\n );\n\n setVolumeType(seletedInstanceVolumeType);\n };\n\n const handleVersionChange = (e: any) => {\n setVersion(e.target.value);\n form.setFieldsValue({\n version: e.target.value,\n });\n };\n\n const getVersionButtons = useCallback(\n (vendor: DatabaseVendor) => {\n return (\n vendor.versions &&\n vendor.versions.length > 0 && (\n \n {vendor.versions.map((versionOpt: string) => (\n \n {versionOpt}\n \n ))}\n \n )\n );\n },\n [version, handleVersionChange, testId]\n );\n\n useEffect(() => {\n setVersion(selectedTech?.version);\n\n form.setFieldsValue({\n version: selectedTech?.version,\n });\n }, [selectedTechType]);\n\n const handleVolumeTypeChange = (e: any) => {\n if (!!form.getFieldValue('cloudProvider')) {\n const selectedVolumeType: InstanceVolumeType | undefined =\n deploymentOptions?.getVolumeTypeInfo(\n form.getFieldValue('cloudProvider'),\n e.target.value\n );\n if (selectedVolumeType) {\n setVolumeType(selectedVolumeType);\n }\n }\n };\n\n const handleNetworkChange = (e: any) => {\n const network = networks?.find((item) => item.code === e.target.value);\n setNetwork(network);\n setSelectedNetwork(network);\n form.setFieldsValue({\n network,\n });\n };\n\n const handleNetworkTypeChange = (e: any) => {\n setNetworkType(e.target.value);\n form.setFieldsValue({\n availabilityZones: undefined,\n networkType: e.target.value,\n availabilityZones1: undefined,\n availabilityZones2: undefined,\n availabilityZones3: undefined,\n });\n setZones(undefined);\n };\n\n const handleVpcChange = (vpcUuid: string) => {\n if (vpcUuid === 'new') {\n setVpcModal(true);\n return;\n }\n const vpc = vpcs?.find((v: Vpc) => v.id === vpcUuid);\n form.setFieldsValue({ vpcUuid: vpc?.id });\n setVpc(vpc);\n };\n\n const handleAvailabilityZoneChange = (\n instance: number,\n value: string | string[]\n ) => {\n let azs: any = zones || [];\n if (typeof value !== 'string') {\n setZones(value);\n } else {\n azs[instance] = value;\n form.setFieldsValue({\n availabilityZones: azs,\n [`availabilityZones${instance + 1}`]: value,\n });\n setZones(azs);\n }\n };\n\n const handleNumberOfNodesChange = (e: any) => {\n const newNumberOfNodes = e.target.value;\n if (newNumberOfNodes !== numberOfNodes) {\n setNetworkType(undefined);\n setNetwork(undefined);\n setSelectedNetwork(undefined);\n form.setFieldsValue({\n networkType: undefined,\n network: undefined,\n networkCode: undefined,\n });\n setNumberOfNodes(newNumberOfNodes);\n }\n };\n\n const saveEmailNotifications = (emails: string[]) => {\n setNotificationEmails(emails);\n };\n\n const handleRegionChange = (e: any) => {\n const tempCloudProviders = deploymentOptions?.cloud.cloudProviders;\n if (!isBackupRestore) {\n let selectedProvider: CloudProvider | null = null;\n tempCloudProviders?.forEach((provider: CloudProvider) => {\n const isInList = provider.regions.find(\n (r: CloudProviderRegion) => {\n return r.code === e.target.value.code;\n }\n );\n if (isInList) {\n selectedProvider = provider;\n }\n });\n if (selectedProvider) setCloudProvider(selectedProvider);\n form.setFieldValue('cloudProvider', selectedProvider);\n }\n setRegion(e.target.value);\n };\n\n const handleCancel = () => {\n setVpcModal(false);\n vpcForm.resetFields();\n setErrorFields([]);\n };\n\n const validateForm = async (form: FormInstance) => {\n try {\n const a = await form.validateFields();\n return true;\n } catch (e: any) {\n setErrorFields(e.errorFields);\n message.error(\n 'One or more fields have errors. Please double check and try again.'\n );\n return false;\n }\n };\n\n const onSubmitButtonClick = async () => {\n const stepValid = await validateForm(vpcForm);\n if (stepValid) {\n try {\n cloudProvider &&\n region &&\n (await doApiRequest(\n vpcForm.getFieldsValue(),\n cloudProvider,\n region\n ));\n handleCancel();\n } catch (e) {\n message.error('There was an error.' + e);\n }\n }\n };\n\n const doApiRequest = async (\n { cidrIpv4Block, vpcName }: any,\n cloudProvider: CloudProvider,\n region: CloudProviderRegion\n ) => {\n try {\n await VpcService.createVpc({\n cloud: cloudProvider.code,\n region: region.code,\n cidrIpv4Block,\n vpcName,\n });\n\n notification.open({\n message: 'Create VPC',\n description: `New VPC successfully created!`,\n icon: ,\n });\n\n vpcContext.refresh && (await vpcContext.refresh());\n\n refreshVpcs();\n\n return true;\n } catch (e) {\n notification.open({\n message: 'Create VPC',\n description: `There was an error creating your VPC. ${e}`,\n icon: ,\n });\n\n console.error(e);\n }\n };\n\n const createUserSubscription = async (\n billingForm: any,\n paymentMethod: any\n ) => {\n const data = {\n address: new Address({\n country: billingForm.getFieldValue('country'),\n state: billingForm.getFieldValue('state'),\n city: billingForm.getFieldValue('city'),\n line_1: billingForm.getFieldValue('line1'),\n line_2: billingForm.getFieldValue('line2'),\n postal_code: billingForm.getFieldValue('postalCode'),\n }),\n paymentMethod,\n coupon: form.getFieldValue('coupon'),\n userData: new BillingUserData({\n company_name: billingForm.getFieldValue('companyName'),\n eu_vat_id: billingForm.getFieldValue('vat'),\n first_name: billingForm.getFieldValue('firstName'),\n last_name: billingForm.getFieldValue('lastName'),\n }),\n };\n\n await BillingService.createUserSubscription(data);\n };\n\n const handleSetupIntent = async (cardToken: any) => {\n try {\n const intent = await BillingService.createBillingIntent(cardToken);\n\n setIntentResponse(intent);\n notification.open({\n message: 'Add subscription intent',\n description: 'Intent added successfully.',\n icon: ,\n });\n } catch (e: any) {\n setIntentResponse(undefined);\n const errorMessage = getStripeErrorMessage(e);\n\n notification.open({\n message: 'Add subscription intent',\n description: `There was an error adding subscription intent. ${errorMessage}`,\n icon: ,\n });\n }\n };\n\n const handleCreateUser = async (billingForm: any) => {\n try {\n const data = {\n address: new Address({\n country: billingForm.getFieldValue('country'),\n state: billingForm.getFieldValue('state'),\n city: billingForm.getFieldValue('city'),\n line_1: billingForm.getFieldValue('line1'),\n line_2: billingForm.getFieldValue('line2'),\n postal_code: billingForm.getFieldValue('postalCode'),\n }),\n coupon: form.getFieldValue('coupon'),\n userData: new BillingUserData({\n company_name: billingForm.getFieldValue('companyName'),\n eu_vat_id: billingForm.getFieldValue('vat'),\n first_name: billingForm.getFieldValue('firstName'),\n last_name: billingForm.getFieldValue('lastName'),\n }),\n };\n\n await BillingService.createBillingUser(data);\n\n setSubscriptionUser(true);\n notification.open({\n message: 'Add billing user',\n description: 'User added successfully.',\n icon: ,\n });\n } catch (e: any) {\n setSubscriptionUser(false);\n\n notification.open({\n message: 'Add billing user',\n description: `There was an error adding billing user. ${e}`,\n icon: ,\n });\n }\n };\n\n useEffect(() => {\n if (isBackupRestore && deploymentOptions) {\n setStep('createDatastore');\n backupRestoreWizardInitialStep();\n }\n }, [isBackupRestore, deploymentOptions]);\n\n const backupRestoreWizardInitialStep = () => {\n if (restoreDatastore && deploymentOptions) {\n const selectedDBVendor = deploymentOptions.getDatabaseVendorByCode(\n restoreDatastore.databaseVendor\n );\n const maxNumberOfNodes = 3;\n const recommendedNumberOfNodes = 2;\n const restoreNumberOfNodes =\n restoreDatastore.numberOfNodes > maxNumberOfNodes\n ? recommendedNumberOfNodes\n : restoreDatastore.numberOfNodes;\n setSelectedTech(selectedDBVendor);\n setDatabaseVendorType(restoreDatastore.databaseVendorType);\n setNumberOfNodes(restoreNumberOfNodes);\n\n if (hideCloudProvider) {\n setCloudProvider(\n deploymentOptions?.getCloudProvider(\n restoreDatastore.cloudProvider\n )\n );\n setRegion(\n deploymentOptions?.getCloudRegion(\n restoreDatastore.cloudProvider,\n restoreDatastore.cloudRegion\n )\n );\n }\n setVersion(restoreDatastore.version);\n form.setFieldsValue({\n deploymentName: restoreDatastore.clusterName,\n databaseVendorType: restoreDatastore.databaseVendorType,\n version: restoreDatastore.version,\n numberOfNodes: restoreNumberOfNodes,\n tags: Array.from(new Set(restoreDatastore.tags)),\n databaseVendor: restoreDatastore.databaseVendor,\n });\n }\n };\n\n return (\n
\n \n \n ),\n },\n {\n step: 'createDatastore',\n content: (\n \n ),\n },\n {\n step: 'createVPC',\n content: (\n \n ),\n },\n ]}\n />\n \n\n \n
\n *Required\n \n \n \n Back\n \n\n \n Create\n \n \n \n }\n >\n \n \n \n \n \n );\n}\n","import React, { ReactElement } from 'react';\nimport { Button, Space } from 'antd';\nimport styles from './Error404.module.less';\nimport TypographyText from '../../tmp/TypographyText';\nimport NotFound from '@severalnines/frontend_hub/libs/icons/src/lib/ilustrations/NotFound';\nimport { getThemeIllustrationColor } from '../../core/helpers';\n\ntype Error404Props = {\n onHomeClick?: () => void;\n testId?: string;\n};\n\n/**\n * Error 404 Page\n */\nfunction Error404({ onHomeClick, testId }: Error404Props): ReactElement {\n return (\n \n \n \n

Page not found

\n \n \n The content you're looking for doesn't exist. Either it\n was removed, or you mistyped the link.\n \n \n \n
\n \n );\n}\n\nexport default Error404;\n","import Error404 from './Error404';\nimport React, { useEffect } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport usePiwikPro from '../../core/hooks/usePiwikPro';\nimport { ERROR_404_PAGE } from '../../core/PiwikConstants';\n\ninterface Props {\n testId?: string;\n}\n\nexport default function Error404Page({ testId = 'Error404Page' }: Props) {\n const { trackPageView } = usePiwikPro();\n\n useEffect(() => {\n trackPageView(ERROR_404_PAGE);\n }, []);\n\n const history = useHistory();\n const handleHomeClick = () => {\n history.push({\n pathname: '/',\n });\n };\n\n return ;\n}\n","import { InfoCircleFilled } from '@ant-design/icons';\nimport { Popover, Space, Row, Col, Button } from 'antd';\nimport styles from './DeleteOrganizationPopover.module.less';\n\ninterface DeleteOrganizationPopoverProps {\n handleOk: () => void;\n isDeleteVisible: boolean;\n setIsDeleteVisible: React.Dispatch>;\n testId?: string;\n}\n\nconst DeleteOrganizationPopover = ({\n handleOk,\n isDeleteVisible,\n setIsDeleteVisible,\n testId = 'DeleteOrganizationPopover',\n}: DeleteOrganizationPopoverProps) => {\n const handleSubmit = () => {\n setIsDeleteVisible(false);\n handleOk();\n };\n\n return (\n \n \n
\n \n \n \n
Are you sure?
\n
\n Are you sure you want to delete this\n organization?\n
\n \n \n\n \n \n handleSubmit()}\n >\n Yes\n \n \n \n \n \n }\n trigger=\"click\"\n onOpenChange={() => setIsDeleteVisible(!isDeleteVisible)}\n >\n );\n};\n\nexport default DeleteOrganizationPopover;\n","import { Modal, Form, Input, Button, Row, Col } from 'antd';\nimport styles from './OrganizationModal.module.less';\nimport { useEffect, useState } from 'react';\nimport Organization from '../../../types/Organization';\n\ninterface OrganizationModalProps {\n visible: boolean;\n onClose: () => void;\n onSubmit: (values: { name: string; identifier: string }) => void;\n record: Organization;\n isEditing: boolean;\n testId?: string;\n isLoading?: boolean;\n}\n\nconst OrganizationModal = ({\n record,\n visible,\n onClose,\n onSubmit,\n isEditing,\n isLoading,\n testId = 'OrganizationModal',\n}: OrganizationModalProps) => {\n const [form] = Form.useForm();\n const [isValueUpdated, setIsValueUpdated] = useState(true);\n const [identifier, setIdentifier] = useState();\n\n const onFinish = async (values: any) => {\n try {\n await form.validateFields();\n onSubmit(values);\n } catch (error) {\n console.error('Failed to submit:', error);\n }\n };\n\n useEffect(() => {\n if (record && visible) {\n form.setFieldsValue({\n name: record.name,\n identifier: record.id,\n });\n }\n }, [record, form, visible]);\n\n const onCancel = () => {\n form.resetFields();\n onClose();\n };\n\n const onIdentifierChange = (e: any) => {\n formatText(e.target.value);\n setIdentifier(e.target.value);\n };\n\n const formatText = (inputString: string) => {\n if (!identifier) {\n let identifierValue = inputString.toLowerCase();\n identifierValue = identifierValue.replace(/'/g, '');\n identifierValue = identifierValue.replace(/\\s+/g, '-');\n identifierValue = identifierValue.replace(/[^a-z0-9-]/g, '');\n identifierValue = identifierValue.replace(/^-+|-+$/g, '');\n form.setFieldValue('identifier', identifierValue);\n form.validateFields();\n }\n };\n\n return (\n <>\n \n \n \n Cancel\n \n onFinish(form.getFieldsValue())}\n type=\"primary\"\n loading={isLoading}\n disabled={isValueUpdated}\n >\n {isEditing ? 'Update' : 'Create'}\n \n \n \n }\n >\n setIsValueUpdated(false)}\n onFinish={onFinish}\n >\n \n formatText(e.target.value)}\n />\n \n\n \n onIdentifierChange(e)}\n />\n \n \n \n \n );\n};\n\nexport default OrganizationModal;\n","export interface OrganizationInterface {\n id: string;\n name: string;\n}\n\nexport type OrganizationProps = {\n id: string;\n name: string;\n};\nexport default class Organization implements OrganizationInterface {\n readonly id: string;\n readonly name: string;\n\n constructor(props: OrganizationProps) {\n this.id = props.id;\n this.name = props.name;\n }\n}\n","import Organization, { OrganizationProps } from './Organization';\nimport { OrganizationInterface } from './Organization';\n\nexport interface OrganizationsInterface {\n organizations: OrganizationInterface[];\n total: number;\n}\n\nexport type OrganizationsProps = {\n orgs: OrganizationProps[];\n total: number;\n};\n\nexport default class Organizations implements OrganizationsInterface {\n readonly organizations: Organization[];\n readonly total: number;\n\n constructor(props: OrganizationsProps) {\n this.organizations = props.orgs.map((org) => new Organization(org));\n this.total = props.total;\n }\n}\n","import ApiService from './ApiService';\nimport { API_AUTH, ORGANIZATIONS } from '../core/CcxEnv';\nimport Organizations from '../types/Organizations';\nimport Organization from '../types/Organization';\n\n// constants\nconst API_URL = API_AUTH;\n\nexport default class OrganizationsService extends ApiService {\n /**\n * Get list of all firewall rules.\n * @param {string} uuid\n */\n static async getAllOrganizations(): Promise {\n const response = await this.request('GET', ORGANIZATIONS);\n return new Organizations(response);\n }\n\n static async getOrganization(orgId: string): Promise {\n const response = await this.request('GET', `${ORGANIZATIONS}/${orgId}`);\n return new Organization(response);\n }\n\n static async addNewOrganization(org: {\n id: string;\n name: string;\n }): Promise {\n const requestData = {\n data: {\n ...org,\n },\n };\n const response = await this.request('POST', ORGANIZATIONS, requestData);\n return response;\n }\n\n static async updateOrganization(org: {\n id: string | number;\n name: string;\n }): Promise {\n const requestData = {\n data: {\n ...org,\n },\n };\n const response = await this.request(\n 'PATCH',\n `${ORGANIZATIONS}/${org.id}`,\n requestData\n );\n return response;\n }\n\n static async deleteOrganization(org: {\n id: string | number;\n }): Promise {\n const response = await this.request(\n 'DELETE',\n `${ORGANIZATIONS}/${org.id}`\n );\n return response;\n }\n\n /**\n * Add a Firewall rule\n * @param {AddRuleProps} props\n */\n\n protected static getApiUrl() {\n return API_URL;\n }\n}\n","import { useState } from 'react';\nimport { Dropdown, Button, Menu, notification } from 'antd';\nimport DeleteOrganizationPopover from './DeleteOrganizationPopover';\nimport CcxContextualMenuIcon from '../../ccx/icons/CcxContextualMenuIcon';\nimport OrganizationModal from './OrganizationModal';\nimport OrganizationsService from '../../../services/OrganizationsService';\nimport {\n DeleteOutlined,\n EditOutlined,\n UserAddOutlined,\n UserOutlined,\n} from '@ant-design/icons';\nimport styles from './OrganizationsActionsList.module.less';\nimport { userCheck } from '../../../slices/user.slice';\nimport { useAppDispatch } from '../../../redux/hooks';\nimport { Link } from 'react-router-dom';\nimport Organization from '../../../types/Organization';\n\nexport interface OrganizationRecord extends Organization {\n isAdmin: boolean;\n totalInvites: number;\n totalMembers: number;\n}\n\ninterface OrganizationsActionsListProps {\n record: OrganizationRecord;\n refresh: () => void;\n setOrganizationData: React.Dispatch<\n React.SetStateAction\n >;\n}\n\nconst OrganizationsActionsList = ({\n record,\n refresh,\n setOrganizationData,\n}: OrganizationsActionsListProps) => {\n const [isEditVisible, setIsEditVisible] = useState(false);\n const [isDeleteVisible, setIsDeleteVisible] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n\n const dispatch = useAppDispatch();\n\n const handleEdit = () => {\n if (!isEditVisible) setIsEditVisible(true);\n };\n\n const handleDelete = () => {\n if (!isDeleteVisible) setIsDeleteVisible(true);\n };\n\n const handleUpdateOrganization = async (values: { name: string }) => {\n setIsLoading(true);\n try {\n await OrganizationsService.updateOrganization({\n id: record.id,\n name: values.name,\n });\n notification.success({\n message: 'Organization Updated',\n description: 'The organization has been updated successfully.',\n });\n dispatch(userCheck());\n } catch (e: any) {\n notification.error({\n message: 'Organization Update Failed',\n description: 'There was an error updating the organization.',\n });\n } finally {\n setIsLoading(false);\n setIsEditVisible(false);\n refresh();\n }\n };\n\n const handleDeleteOrganization = async () => {\n setIsLoading(true);\n try {\n await OrganizationsService.deleteOrganization({\n id: record.id,\n });\n setOrganizationData((prev: OrganizationRecord[]) =>\n prev.filter((org) => org.id !== record.id)\n );\n notification.success({\n message: 'Organization Deleted',\n description: 'The organization has been deleted successfully.',\n });\n refresh();\n dispatch(userCheck());\n } catch (e: any) {\n notification.error({\n message: 'Organization Delete Failed',\n description: 'There was an error deleting the organization.',\n });\n } finally {\n setIsLoading(false);\n }\n };\n const handleClose = () => {\n setIsEditVisible(false);\n };\n\n const menu = (\n \n {record.isAdmin && (\n \n {' '}\n }\n >\n Edit\n \n \n )}\n \n \n }\n >\n Users\n \n \n \n {record.isAdmin && (\n \n }\n >\n Delete\n \n \n )}\n \n );\n\n return (\n <>\n \n \n \n \n \n \n \n \n setIsAddOrganizationModalVisible(false)}\n onSubmit={AddNewOrganization}\n isEditing={false}\n isLoading={isAddingOrganization}\n testId=\"OrganizationModal\"\n />\n \n );\n};\n\nexport default Organizations;\n","import { useEffect, useState } from 'react';\nimport OrganizationsService from '../../services/OrganizationsService';\n\nexport default function useOrganization() {\n const [loading, setLoading] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [organization, setOrganization] = useState(undefined);\n\n const load = async () => {\n try {\n const response = await OrganizationsService.getAllOrganizations();\n setOrganization(response);\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, []);\n\n return { organization, refresh, loading, updating, error };\n}\n","import { Tabs } from 'antd';\nimport { ReactElement, useEffect } from 'react';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport styles from './Organization.module.less';\nimport usePiwikPro from '../../core/hooks/usePiwikPro';\nimport { ORGANIZATIONS_PAGE } from '../../core/PiwikConstants';\nimport Organizations from './organizationInfo/Organizations';\n\ninterface Props extends CcxComponentProps {}\n\nfunction Organization({ testId = 'Organization' }: Props): ReactElement {\n const { trackPageView } = usePiwikPro();\n\n useEffect(() => {\n trackPageView(ORGANIZATIONS_PAGE);\n }, []);\n\n return (\n
\n

\n Manage Organizations And Users\n

\n\n \n
\n );\n}\n\nexport default Organization;\n","import { Modal, Form, Input, Button, Row, Col, Select } from 'antd';\nimport styles from './AddNewMemberModal.module.less';\nimport { useEffect, useState } from 'react';\n\ninterface MemberFormModalProps {\n visible: boolean;\n onClose: () => void;\n onSubmit: (values: any) => Promise;\n record?: any;\n isEditing: boolean;\n testId?: string;\n isLoading?: boolean;\n}\n\nconst MemberFormModal = ({\n record,\n visible,\n onClose,\n onSubmit,\n isEditing,\n isLoading,\n testId = 'MemberFormModal',\n}: MemberFormModalProps) => {\n const [form] = Form.useForm();\n const [isValueUpdated, setIsValueUpdated] = useState(true);\n\n const handleFormSubmit = async (values: any) => {\n if (isEditing) {\n values = {\n ...values,\n userId: record.id,\n };\n }\n\n try {\n await form.validateFields();\n onSubmit({ ...values });\n } catch (error) {\n console.log('Failed to submit:', error);\n throw error;\n }\n };\n\n const formatEmail = (text: string) => {\n if (text.includes('(')) {\n return text.split('(')[1].split(')')[0];\n } else {\n return text;\n }\n };\n\n useEffect(() => {\n if (record) {\n form.setFieldsValue({\n email: formatEmail(record.user),\n role: record.role,\n });\n }\n }, [record, form]);\n\n const onCancel = () => {\n form.resetFields();\n onClose();\n };\n\n return (\n <>\n \n
\n \n Cancel\n \n \n handleFormSubmit(form.getFieldsValue())\n }\n type=\"primary\"\n loading={isLoading}\n disabled={isValueUpdated}\n >\n {isEditing ? 'Update Role' : 'Send invite'}\n \n \n \n }\n >\n setIsValueUpdated(false)}\n >\n \n \n \n \n {\n form.setFieldValue('role', value);\n }}\n >\n {['Read', 'Write'].map((role) => (\n \n {role}\n \n ))}\n \n \n \n \n \n );\n};\n\nexport default MemberFormModal;\n","import { InfoCircleFilled } from '@ant-design/icons';\nimport { Popover, Space, Row, Col, Button } from 'antd';\nimport styles from './DeleteOrganizationPopover.module.less';\nimport { MemberRecord } from './MembersActionsList';\n\ninterface MemberDeletePopoverProps {\n isAdmin: boolean;\n testId?: string;\n record: MemberRecord;\n handleOk: () => void;\n isDeleteVisible: boolean;\n setIsDeleteVisible: React.Dispatch>;\n}\n\nconst MemberDeletePopover = ({\n handleOk,\n isDeleteVisible,\n setIsDeleteVisible,\n record,\n testId = 'MemberDeletePopover',\n isAdmin,\n}: MemberDeletePopoverProps) => {\n const handleSubmit = () => {\n setIsDeleteVisible(false);\n handleOk();\n };\n\n const getDeletePopoverMessage = () => {\n if (isAdmin && record.status !== 'Pending') {\n return `Are you sure that you want to remove ${record.user} from organization`;\n }\n if (record.status === 'Pending') {\n return `Are you sure that you want to revoke member's invitation?`;\n }\n if (!isAdmin)\n return `Are you sure that you want to leave organization?`;\n };\n\n return (\n \n \n \n \n \n \n
Are you sure?
\n
{getDeletePopoverMessage()}
\n \n \n\n \n \n handleSubmit()}\n >\n Yes\n \n \n \n \n \n }\n trigger=\"click\"\n onOpenChange={() => setIsDeleteVisible(!isDeleteVisible)}\n >\n );\n};\n\nexport default MemberDeletePopover;\n","import { useMemo, useState } from 'react';\nimport { Dropdown, Button, Menu, notification } from 'antd';\nimport CcxContextualMenuIcon from '../../ccx/icons/CcxContextualMenuIcon';\nimport {\n EditOutlined,\n LogoutOutlined,\n UserDeleteOutlined,\n} from '@ant-design/icons';\nimport styles from './OrganizationsActionsList.module.less';\nimport MembersService from '../../../services/MembersService';\nimport MemberFormModal from './MemberFormModal';\nimport { useAppSelector } from '../../../redux/hooks';\nimport { RootState } from '../../../redux/store';\nimport { isActiveUser } from '../../../core/helpers';\nimport InviteMemberService from '../../../services/InvitesService';\nimport MemberDeletePopover from './MemberDeletePopover';\nimport { useHistory } from 'react-router';\n\ninterface MembersActionsListProps {\n record: MemberRecord;\n refresh: () => void;\n refreshInvites: () => void;\n isAdmin: boolean;\n orgId: string;\n}\n\nexport interface MemberRecord {\n id: string;\n role: string;\n status: string;\n email?: string;\n userId?: string;\n user?: string;\n}\n\nconst MembersActionsList = ({\n record,\n refresh,\n refreshInvites,\n isAdmin,\n orgId,\n}: MembersActionsListProps) => {\n const { user } = useAppSelector((state: RootState) => state.user);\n const [isEditVisible, setIsEditVisible] = useState(false);\n const [isDeleteVisible, setIsDeleteVisible] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const history = useHistory();\n\n const handleEdit = () => {\n if (!isEditVisible) setIsEditVisible(true);\n };\n\n const handleDelete = () => {\n if (!isDeleteVisible) setIsDeleteVisible(true);\n };\n\n const handleUpdateMember = async (values: {\n email: string;\n role: string;\n userId: string;\n }) => {\n setIsLoading(true);\n try {\n await MembersService.updateMember(\n orgId,\n values.userId,\n values.role\n );\n notification.success({\n message: 'Member Updated',\n description: 'The member has been updated successfully.',\n });\n refresh();\n } catch (e: any) {\n notification.error({\n message: 'Member Update Failed',\n description: 'There was an error updating the member.',\n });\n } finally {\n setIsLoading(false);\n setIsEditVisible(false);\n }\n };\n\n const handleDeleteMember = async () => {\n if (isAdmin && record.status === 'Active') {\n handleRemoveMember();\n } else if (record.status !== 'Active') {\n handleDeleteInvite();\n } else {\n handleLeaveOrg();\n }\n return;\n };\n\n const handleClose = () => {\n setIsEditVisible(false);\n };\n\n const handleRemoveMember = async () => {\n setIsLoading(true);\n try {\n await MembersService.deleteMember(orgId, record.id);\n notification.success({\n message: 'Member Removed',\n description: 'The member has been removed successfully.',\n });\n refresh();\n } catch (e: any) {\n notification.error({\n message: 'Member Removal Failed',\n description: 'There was an error removing the member.',\n });\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleLeaveOrg = async () => {\n try {\n await MembersService.leaveOrganization(orgId);\n notification.success({\n message: 'Left Organization',\n description: 'You have left the organization successfully.',\n });\n history.push(`/organizations`);\n } catch (e: any) {\n notification.error({\n message: 'Failed to Leave Organization',\n description: 'There was an error leaving the organization.',\n });\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleDeleteInvite = async () => {\n try {\n await InviteMemberService.deleteInvite(orgId, record.id);\n notification.success({\n message: 'Invite Deleted',\n description: 'The invite has been deleted successfully.',\n });\n refresh();\n refreshInvites();\n } catch (e: any) {\n notification.error({\n message: 'Invite Delete Failed',\n description: 'There was an error deleting the invite.',\n });\n } finally {\n setIsLoading(false);\n }\n };\n\n const menu = useMemo(\n () => (\n \n {isAdmin && record.status === 'Active' && (\n \n {' '}\n }\n >\n Edit\n \n \n )}\n \n \n ) : (\n \n )\n }\n >\n {isAdmin && record.status !== 'Active'\n ? 'Delete'\n : isAdmin\n ? 'Remove'\n : 'Leave'}\n \n \n \n ),\n [isAdmin, record.status, record.role]\n );\n\n return (\n <>\n \n \n \n )}\n \n \n \n \n \n \n handleClose()}\n onSubmit={handleSubmit}\n isEditing={false}\n isLoading={isLoading}\n />\n \n );\n};\n\nexport default Members;\n","import { useEffect, useState } from 'react';\nimport MembersService from '../../services/MembersService';\nimport Members from '../../types/Members';\n\nexport default function useMembers(orgId: string) {\n const [loading, setLoading] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [members, setMembers] = useState();\n\n const load = async () => {\n try {\n const response = await MembersService.getAllMembers(orgId);\n setMembers(response);\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, []);\n\n return { members, refresh, loading, updating, error };\n}\n","import { useEffect, useState } from 'react';\nimport InvitesMemberService from '../../services/InvitesService';\nimport Invites from '../../types/Invites';\n\nexport default function useOrganizationInvites(orgId: string) {\n const [loading, setLoading] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [invites, setInvites] = useState();\n\n const load = async () => {\n if (!orgId) {\n setLoading(false);\n throw new Error('Organization ID is required');\n }\n try {\n const response = await InvitesMemberService.getOrgInvites(orgId);\n setInvites(response);\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, []);\n\n return { invites, refresh, loading, updating, error };\n}\n","import { Breadcrumb } from 'antd';\nimport { Link, useLocation } from 'react-router-dom';\nimport { ORGANIZATIONS_PAGE_HEADING } from '../../../core/CcxEnv';\nimport styles from './OrganizationMembers.module.less';\nimport Members from './Members';\n\ninterface OrganizationMembersProps {\n testId?: string;\n}\n\nconst OrganizationMembers = ({\n testId = 'OrganizationMembers',\n}: OrganizationMembersProps): JSX.Element => {\n const { state: locationState } = useLocation();\n\n return (\n
\n \n \n \n {ORGANIZATIONS_PAGE_HEADING}\n \n \n \n {locationState.organizationName}\n \n \n\n \n
\n );\n};\n\nexport default OrganizationMembers;\n","import React, { Suspense, ReactElement } from 'react';\nimport { Switch, Route, Redirect } from 'react-router-dom';\nimport LazyLoader from './components/LazyLoader';\nimport DeploymentCompare from './components/deployments/compare/DeploymentCompare';\nimport VpcPeers from './components/vpc/VpcPeers';\nimport Account from './components/account/Account';\nimport Projects from './components/projects/Projects';\nimport DataStore from './components/projects/dataStores/DataStore';\nimport AddService from './components/deployments/services/AddService';\nimport Error404Page from './components/errors/Error404Page';\nimport Organization from './components/organization/Organization';\nimport OrganizationMembers from './components/organization/organizationInfo/OrganizationMembers';\nimport { useAppSelector } from './redux/hooks';\nimport { RootState } from './redux/store';\nimport { getLocalStorage } from './core/helpers';\n\n/**\n * Routes definitions\n */\n\nfunction AppRoute(): ReactElement {\n const { user: userReducer } = useAppSelector(\n (state: RootState) => state.user\n );\n const org = getLocalStorage('org');\n\n return (\n }>\n \n \n {/* */}\n {/* @TODO: Remove the redirection */}\n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n }>\n \n \n \n\n \n \n \n\n \n \n \n\n \n }>\n \n \n \n\n {/* No match */}\n \n \n \n \n \n );\n}\n\nexport default AppRoute;\n","import styles from './AppContentTemplate.module.less';\nimport React from 'react';\nimport { Content } from 'antd/lib/layout/layout';\n\ntype AppContentTemplateProps = {\n children?: React.ReactNode;\n alert?: React.ReactNode;\n};\nexport default function AppContentTemplate({\n children,\n alert,\n}: AppContentTemplateProps) {\n return (\n \n \n {alert}\n {children}\n \n \n );\n}\n","export type DatabaseVendorTypeClassProps = {\n code: string;\n name: string;\n size_hints: any;\n};\n\nexport interface DatabaseVendorTypeInterface {\n code: string;\n name: string;\n sizeHints: any;\n getSizeHintsByNumber: Function;\n}\n\nexport default class DatabaseVendorType implements DatabaseVendorTypeInterface {\n readonly code: string;\n readonly name: string;\n readonly sizeHints: any;\n\n constructor(props: DatabaseVendorTypeClassProps) {\n this.code = props.code;\n this.name = props.name;\n this.sizeHints = props.size_hints;\n }\n\n getSizeHintsByNumber(value: number): string {\n return this.sizeHints ? this.sizeHints[value] || undefined : undefined;\n }\n\n getSizeHintsName(value: number): string {\n if (this.sizeHints[value]?.name?.includes('master')) {\n return this.sizeHints[value]?.name?.replaceAll('master', 'primary');\n } else\n return this.sizeHints\n ? this.sizeHints[value]?.name || undefined\n : undefined;\n }\n\n getSizeHintsInfoByNumber(value: number): string {\n return this.sizeHints\n ? this.sizeHints[value]?.info || undefined\n : undefined;\n }\n\n getRecommendedConfiguration(): boolean {\n return [\n 'redis',\n 'postgres_streaming',\n 'replication',\n 'mssql_ao_async',\n ].includes(this.code);\n }\n}\n","import { isThemeElastx, replaceIfRedis } from '../core/helpers';\nimport DatabaseVendorType, {\n DatabaseVendorTypeClassProps,\n} from './DatabaseVendorType';\n\nexport const DB_VENDOR_MARIADB = 'mariadb';\nexport const DB_VENDOR_POSTGRESQL = 'postgres';\nexport const DB_VENDOR_PERCONA = 'percona';\nexport const DB_VENDOR_REDIS = 'redis';\nexport const DB_VENDOR_MSSQL = 'microsoft';\n\nexport type DatabaseVendorClassProps = {\n beta: boolean;\n code: string;\n enabled: boolean;\n info: string;\n name: string;\n num_nodes: number[];\n type: string;\n types: any;\n version: string;\n versions: string[];\n extensions: string[];\n};\n\nexport interface DatabaseVendorInterface {\n beta: boolean;\n code: string;\n enabled: boolean;\n info: string;\n name: string;\n numberOfNodes: number[];\n type: string;\n types: any;\n version: string;\n versions: string[];\n extensions: string[];\n\n getVendorNameWithVersion: Function;\n isPostgreSql: Function;\n isMariadb: Function;\n isPercona: Function;\n isRedis: Function;\n isBeta: Function;\n isDisabled: Function;\n getVendorTypes: Function;\n getVendorTypeNameByCode: Function;\n}\n\nexport default class DatabaseVendor implements DatabaseVendorInterface {\n readonly beta: boolean;\n readonly code: string;\n readonly enabled: boolean;\n readonly info: string;\n readonly name: string;\n readonly numberOfNodes: number[];\n readonly type: string;\n readonly types: any;\n readonly version: string;\n readonly versions: string[];\n readonly extensions: string[];\n\n constructor(props: DatabaseVendorClassProps) {\n this.beta = props.beta;\n this.code = props.code;\n this.enabled = props.enabled;\n this.info = props.info;\n this.name = replaceIfRedis(props.name);\n this.numberOfNodes = props.num_nodes;\n this.type = props.type;\n this.types = props.types.map((v: DatabaseVendorTypeClassProps) => {\n return new DatabaseVendorType(v);\n });\n this.version = props.version;\n this.versions = props.versions;\n this.extensions = this.getExtensionTypes();\n }\n\n getVendorNameWithVersion(): string {\n return `${this.name} ${this.version}`;\n }\n\n isPostgreSql(): boolean {\n return this.code === DB_VENDOR_POSTGRESQL;\n }\n\n isMariadb(): boolean {\n return this.code === DB_VENDOR_MARIADB;\n }\n\n isPercona(): boolean {\n return this.code === DB_VENDOR_PERCONA;\n }\n\n isRedis(): boolean {\n return this.code === DB_VENDOR_REDIS;\n }\n\n isMssql(): boolean {\n return this.code === DB_VENDOR_MSSQL;\n }\n\n isBeta(): boolean {\n return this.beta;\n }\n\n isDisabled(): boolean {\n return this.enabled === false;\n }\n\n getVendorTypes(): any[] {\n return this.types;\n }\n\n getExtensionTypes(): string[] {\n if (this.isPostgreSql()) {\n return ['pgvector (from version 15)', 'postgis (from version 15)'];\n }\n return [];\n }\n\n getSortedVendorTypes(): DatabaseVendorType[] {\n const priorityOrder: string[] = [\n 'redis',\n 'postgres_streaming',\n 'replication',\n 'mssql_ao_async',\n ];\n const customSort = (\n a: DatabaseVendorType,\n b: DatabaseVendorType\n ): number => {\n const indexA = priorityOrder.indexOf(a.code);\n const indexB = priorityOrder.indexOf(b.code);\n\n if (indexA !== -1 && indexB !== -1) {\n return indexA - indexB;\n } else if (indexA !== -1) {\n return -1;\n } else if (indexB !== -1) {\n return 1;\n } else {\n return a.code.localeCompare(b.code);\n }\n };\n\n return this.types.sort(customSort);\n }\n getVendorTypeByCode(code: string): DatabaseVendorType {\n const type = this.getVendorTypes().find(\n (t: DatabaseVendorType) => t.code === code\n );\n\n return type;\n }\n\n getSelectedNode(code: string): number | undefined {\n const vendorType: DatabaseVendorType = this.getVendorTypeByCode(code);\n if (vendorType) {\n const sizeHintsKeys = Object.keys(vendorType.sizeHints);\n if (sizeHintsKeys.length === 1) {\n return parseInt(sizeHintsKeys[0], 10);\n }\n }\n return undefined;\n }\n getVendorTypeNameByCode(code: string): string {\n const type = this.getVendorTypes().find(\n (t: DatabaseVendorType) => t.code === code\n );\n\n return type?.name || 'N/A';\n }\n\n getVendorTypeName(code: string): string {\n const type = this.getVendorTypes().find(\n (t: DatabaseVendorType) => t.code === code\n );\n if (type?.name.includes('Master')) {\n return type?.name?.replace('Master', 'Primary');\n } else {\n return type?.name || 'N/A';\n }\n }\n\n getSortedNumberOfNodes(): number[] {\n if (isThemeElastx()) {\n return this.numberOfNodes.sort((a, b) => {\n if (a === 1) return 1;\n if (b === 1) return -1;\n return a - b;\n });\n }\n return this.numberOfNodes;\n }\n}\n","export type InstanceVolumeIopsValueClassProps = {\n default: number;\n max: number;\n max_per_gb: number;\n min: number;\n};\n\nexport interface InstanceVolumeIopsValueInterface {\n default: number;\n max: number;\n maxPerGb: number;\n min: number;\n}\n\nexport default class InstanceVolumeIopsValue\n implements InstanceVolumeIopsValueInterface\n{\n readonly default: number;\n readonly max: number;\n readonly maxPerGb: number;\n readonly min: number;\n\n constructor(props: InstanceVolumeIopsValueClassProps) {\n this.default = props.default;\n this.max = props.max;\n this.maxPerGb = props.max_per_gb;\n this.min = props.min;\n }\n}\n","import InstanceVolumeIopsValue from './InstanceVolumeIopsValue';\n\nexport type InstanceVolumeIopsClassProps = {\n [provider: string]: any;\n};\n\nexport interface InstanceVolumeIopsInterface {\n [provider: string]: any;\n}\n\nexport default class InstanceVolumeIops implements InstanceVolumeIopsInterface {\n [provider: string]: any;\n\n constructor(props: InstanceVolumeIopsClassProps) {\n for (const provider in props) {\n if (Object.prototype.hasOwnProperty.call(props, provider)) {\n this[provider] = props[provider];\n\n if (this[provider]) {\n Object.keys(this[provider]).map(\n (k: any) =>\n (this[provider][k] = new InstanceVolumeIopsValue(\n this[provider][k]\n ))\n );\n } else {\n this[provider] = {};\n }\n }\n }\n }\n}\n","export type InstanceVolumeTypeClassProps = {\n code: string;\n has_iops: boolean;\n info?: string;\n name: string;\n verified_level: number;\n iops_price: number;\n price: number;\n};\n\nexport interface InstanceVolumeTypeInterface {\n code: string;\n hasIops: boolean;\n info?: string;\n name: string;\n verifiedLevel: number;\n iopsPrice: number;\n price: number;\n}\n\nexport default class InstanceVolumeType implements InstanceVolumeTypeInterface {\n readonly code: string;\n readonly hasIops: boolean;\n readonly info?: string;\n readonly name: string;\n readonly verifiedLevel: number;\n readonly iopsPrice: number;\n readonly price: number;\n\n constructor(props: InstanceVolumeTypeClassProps) {\n this.code = props.code;\n this.hasIops = props.has_iops;\n this.info = props.info;\n this.name = props.name;\n this.verifiedLevel = props.verified_level;\n this.iopsPrice = props.iops_price ? props.iops_price : 0;\n this.price = props.price ? props.price : 0;\n }\n\n getMonthlyPrice(): number {\n return this.price / 100;\n }\n\n getMonthlyIOPSPrice(): number {\n return this.iopsPrice / 100;\n }\n}\n","import InstanceVolumeType, {\n InstanceVolumeTypeClassProps,\n} from './InstanceVolumeType';\n\nexport type InstanceVolumeTypesClassProps = {\n [provider: string]: InstanceVolumeTypeClassProps[];\n};\n\nexport interface InstanceVolumeTypesInterface {\n [provider: string]: InstanceVolumeType[];\n}\n\nexport default class InstanceVolumeTypes\n implements InstanceVolumeTypesInterface\n{\n [provider: string]: InstanceVolumeType[];\n\n constructor(props: InstanceVolumeTypesClassProps) {\n for (const provider in props) {\n if (Object.prototype.hasOwnProperty.call(props, provider)) {\n this[provider] = (props[provider] || []).map(\n (vt: InstanceVolumeTypeClassProps) =>\n new InstanceVolumeType(vt)\n );\n }\n }\n }\n}\n","export type InstanceVolumeSizeClassProps = {\n default: number;\n max: number;\n min: number;\n unit: string;\n};\n\nexport interface InstanceVolumeSizeInterface {\n default: number;\n max: number;\n min: number;\n unit: string;\n}\n\nexport default class InstanceVolumeSize implements InstanceVolumeSizeInterface {\n readonly default: number;\n readonly max: number;\n readonly min: number;\n readonly unit: string;\n\n constructor(props: InstanceVolumeSizeClassProps) {\n this.default = props.default;\n this.max = props.max;\n this.min = props.min;\n this.unit = props.unit;\n }\n}\n","import InstanceVolumeSize from './InstanceVolumeSize';\n\nexport type InstanceVolumeSizesClassProps = {\n [provider: string]: any;\n};\n\nexport interface InstanceVolumeSizesInterface {\n [provider: string]: any;\n}\n\nexport default class InstanceVolumeSizes\n implements InstanceVolumeSizesInterface\n{\n [provider: string]: any;\n\n constructor(props: InstanceVolumeSizesClassProps) {\n for (const provider in props) {\n if (Object.prototype.hasOwnProperty.call(props, provider)) {\n this[provider] = props[provider];\n\n if (this[provider]) {\n Object.keys(this[provider]).map(\n (k: any) =>\n (this[provider][k] = new InstanceVolumeSize(\n this[provider][k]\n ))\n );\n } else {\n this[provider] = {};\n }\n }\n }\n }\n}\n","export type InstanceSizeClassProps = {\n code: string;\n type: string;\n cpu: number;\n ram: number;\n name: string;\n verified_level: number;\n price: number;\n disk_size: number;\n};\n\nexport interface InstanceSizeInterface {\n code: string;\n type: string;\n cpu: number;\n ram: number;\n name: string;\n verifiedLevel: number;\n price: number;\n diskSize: number;\n}\n\nexport default class InstanceSize implements InstanceSizeInterface {\n readonly code: string;\n readonly type: string;\n readonly cpu: number;\n readonly ram: number;\n readonly name: string;\n readonly verifiedLevel: number;\n readonly price: number;\n readonly diskSize: number;\n\n constructor(props: InstanceSizeClassProps) {\n this.code = props.code;\n this.type = props.type;\n this.cpu = props.cpu;\n this.ram = props.ram;\n this.name = props.name;\n this.verifiedLevel = props.verified_level;\n this.price = props.price ? props.price : 0;\n this.diskSize = props.disk_size;\n }\n\n getMonthlyPrice(): number {\n return (this.price / 100) * 730;\n }\n}\n","import InstanceSize, { InstanceSizeClassProps } from './InstanceSize';\n\nexport type InstanceSizesClassProps = {\n [provider: string]: InstanceSizeClassProps[];\n};\n\nexport interface InstanceSizesInterface {\n [provider: string]: InstanceSize[];\n}\n\nexport default class InstanceSizes implements InstanceSizesInterface {\n [provider: string]: InstanceSize[];\n\n constructor(props: InstanceSizesClassProps) {\n for (const provider in props) {\n if (Object.prototype.hasOwnProperty.call(props, provider)) {\n this[provider] = (props[provider] || []).map(\n (instanceSize: InstanceSizeClassProps) =>\n new InstanceSize(instanceSize)\n );\n }\n }\n }\n}\n","export type CloudProviderGroupClassProps = {\n label: string;\n logo: string;\n name: string;\n};\n\nexport interface CloudProviderGroupInterface {\n label: string;\n logo: string;\n name: string;\n}\n\nexport default class CloudProviderGroup implements CloudProviderGroupInterface {\n readonly label: string;\n readonly logo: string;\n readonly name: string;\n\n constructor(props: CloudProviderGroupClassProps) {\n this.label = props.label;\n this.logo = props.logo;\n this.name = props.name;\n }\n\n getCloudProviderGroupLogo(): any {\n return this.logo;\n }\n\n getCloudProviderGroupName(): any {\n return this.name;\n }\n\n getCloudProviderGroupLabel(): any {\n return this.label;\n }\n}\n","import CloudProvider, { CloudProviderClassProps } from './CloudProvider';\nimport DatabaseVendor, { DatabaseVendorClassProps } from './DatabaseVendor';\nimport InstanceVolumeIops from './InstanceVolumeIops';\nimport InstanceVolumeType from './InstanceVolumeType';\nimport InstanceVolumeSize from './InstanceVolumeSize';\nimport InstanceVolumeTypes from './InstanceVolumeTypes';\nimport InstanceVolumeSizes from './InstanceVolumeSizes';\nimport InstanceVolumeIopsValue from './InstanceVolumeIopsValue';\nimport CloudProviderRegion from './CloudProviderRegion';\nimport InstanceSize from './InstanceSize';\nimport InstanceSizes from './InstanceSizes';\nimport CloudProviderGroup, {\n CloudProviderGroupClassProps,\n} from './CloudProviderGroup';\n\nexport type DeploymentOptionsClassProps = {\n cloud: any;\n database: any;\n instance: any;\n network: any;\n};\n\nexport interface DeploymentOptionsInterface {\n cloud: any;\n database: any;\n instance: any;\n network: any;\n getCloudProviders: Function;\n getCloudRegions: Function;\n getDatabaseVendors: Function;\n getDatabaseVendorByCode: Function;\n getDatabaseVendorsWithVersion: Function;\n getDatabaseInfo: Function;\n getNumberOfNodesInfo: Function;\n getInstanceSizes: Function;\n getInstanceSizesInfo: Function;\n getVolumeIops: Function;\n getVolumeIopsInfo: Function;\n getVolumeSize: Function;\n getVolumeSizesInfo: Function;\n getVolumeTypes: Function;\n getVolumeTypesInfo: Function;\n getAvailabilityZones: Function;\n getNetworks: Function;\n getNetworkInfo: Function;\n getNetworkTypeInfo: Function;\n getNetworkVpcInfo: Function;\n}\n\nexport default class DeploymentOptions implements DeploymentOptionsInterface {\n readonly cloud: any;\n readonly database: any;\n readonly instance: any;\n readonly network: any;\n\n constructor(props: DeploymentOptionsClassProps) {\n this.cloud = {};\n this.cloud.cloudProviders = props.cloud.cloud_providers.map(\n (p: CloudProviderClassProps) => {\n return new CloudProvider(p);\n }\n );\n this.cloud.cloudGroups = props.cloud.cloud_groups.map(\n (p: CloudProviderGroupClassProps) => {\n return new CloudProviderGroup(p);\n }\n );\n this.database = props.database;\n this.database.vendors = props.database.vendors.map(\n (v: DatabaseVendorClassProps) => {\n return new DatabaseVendor(v);\n }\n );\n this.instance = props.instance;\n this.instance.volumeTypes = new InstanceVolumeTypes(\n props.instance.volume_types\n );\n this.instance.volumeSizes = new InstanceVolumeSizes(\n props.instance.volume_sizes\n );\n this.instance.volumeIops = new InstanceVolumeIops(\n props.instance.volume_iops\n );\n\n this.instance.instanceSizes = new InstanceSizes(\n props.instance.instance_sizes\n );\n\n this.network = props.network;\n }\n\n getCloudProviders(): any[] {\n const tempCloudProvidersWithoutGroups: any[] =\n this.cloud?.cloudProviders\n ?.filter((p: CloudProviderClassProps) => !p.group)\n .map((provider: any) => new CloudProvider({ ...provider })) ||\n [];\n\n this.cloud?.cloudProviders.forEach(\n (cloudProvider: CloudProviderClassProps) => {\n if (cloudProvider.group !== '') {\n const isInList = tempCloudProvidersWithoutGroups.find(\n (provider: any) =>\n provider.group === cloudProvider.group\n );\n\n if (!isInList) {\n const cloudGroupName = this.getCloudProviderGroupByName(\n cloudProvider.group\n );\n const temp = { ...cloudProvider }; // Create a shallow copy\n temp.code = cloudGroupName.toLowerCase();\n temp.name = cloudGroupName;\n tempCloudProvidersWithoutGroups.push(\n new CloudProvider({ ...temp })\n );\n } else {\n isInList.regions = [\n ...new Set([\n ...isInList.regions,\n ...cloudProvider.regions,\n ]),\n ];\n }\n }\n }\n );\n\n return tempCloudProvidersWithoutGroups;\n }\n\n getCloudProvidersGroups(): CloudProviderGroup[] {\n return this.cloud?.cloudGroups;\n }\n\n getDefaultCloudProviders(): CloudProvider {\n return this.cloud?.cloudProviders[0];\n }\n\n getCloudRegions(cloudProviderCode: string) {\n return this.cloud?.cloudProviders?.filter(\n (p: CloudProvider) => p.code === cloudProviderCode\n )[0]?.regions;\n }\n\n getCloudRegion(cloudProviderCode: string, cloudRegion: string) {\n return this.getCloudRegions(cloudProviderCode)?.filter(\n (region: any) => {\n return region.code === cloudRegion;\n }\n )[0]?.countryCode;\n }\n\n getCloudRegionDetails(cloudProviderCode: string, cloudRegion: string) {\n return this.getCloudRegions(cloudProviderCode)?.filter(\n (region: any) => {\n return region.code === cloudRegion;\n }\n )[0];\n }\n\n getCloudProviderLogo(cloudProviderCode: string | undefined) {\n return this.cloud?.cloudProviders?.filter(\n (p: CloudProvider) => p.code === cloudProviderCode\n )[0]?.logo;\n }\n\n getCloudProviderGroup(cloudProviderCode: string | undefined) {\n return this.cloud?.cloudProviders?.filter(\n (p: CloudProvider) => p.code === cloudProviderCode\n )[0]?.group;\n }\n\n getCloudProvider(cloudProviderCode: string | undefined) {\n return this.cloud?.cloudProviders?.find(\n (p: CloudProvider) => p.code === cloudProviderCode\n );\n }\n\n getFullName(cloudProviderCode: string) {\n return this.cloud?.cloudProviders\n ?.filter((p: CloudProvider) => {\n if (\n p.code === cloudProviderCode ||\n p.group === cloudProviderCode\n ) {\n return p.getFullName();\n }\n })[0]\n ?.getFullName();\n }\n\n isOpenStack(cloudProviderCode: string) {\n return this.cloud?.cloudProviders?.filter(\n (p: CloudProvider) => p.code === cloudProviderCode\n )[0]?.is_open_stack;\n }\n\n getDatabaseVendors(): DatabaseVendor[] {\n return this.database?.vendors;\n }\n\n getDatabaseVendorByCode(code: string): DatabaseVendor {\n return this.database?.vendors.find(\n (v: DatabaseVendor) => v.code === code\n );\n }\n\n getDatabaseVendorsWithVersion(): any[] {\n return this.getDatabaseVendors().map((vendor: DatabaseVendor) => {\n return `${vendor.name} ${vendor.version}`;\n });\n }\n\n getDatabaseInfo(): string {\n return this.database?.deployment_types_info;\n }\n\n getNumberOfNodesInfo(): string {\n return this.database?.num_nodes_info;\n }\n\n getInstanceSizes(cloudProvider: CloudProvider): InstanceSize[] {\n if (!cloudProvider) throw new Error('Missing parameter: cloudProvider');\n return this.instance?.instanceSizes[cloudProvider.code];\n }\n\n getInstanceSizesInfo(): string {\n return this.instance?.instance_sizes?.instance_sizes_info;\n }\n\n getInstanceSizeInfo(\n cloudProvider: CloudProvider,\n size: string\n ): InstanceSize {\n if (!cloudProvider) throw new Error('Missing parameter: cloudProvider');\n if (!size) throw new Error('Missing parameter: size');\n\n if (cloudProvider.code === 'cleura') {\n const firstCleuraKey = this.getFirstCleuraKey(\n this.instance?.instanceSizes || {}\n );\n\n return (\n firstCleuraKey &&\n this.instance?.instanceSizes[firstCleuraKey].find(\n (instanceSize: InstanceSize) => instanceSize.code === size\n )\n );\n }\n\n return this.instance?.instanceSizes[cloudProvider.code].find(\n (instanceSize: InstanceSize) => instanceSize.code === size\n );\n }\n\n getVolumeIops(\n cloudProvider: CloudProvider,\n volumeType: string\n ): InstanceVolumeIopsValue {\n if (!cloudProvider) throw new Error('Missing parameter: cloudProvider');\n if (!volumeType) throw new Error('Missing parameter: volumeType');\n return this.instance?.volume_iops[cloudProvider.code][volumeType];\n }\n\n getVolumeIopsInfo(): string {\n return this.instance?.volume_iops?.volume_iops_info;\n }\n\n getVolumeSize(\n cloudProvider?: CloudProvider,\n volumeType?: InstanceVolumeType\n ): InstanceVolumeSize {\n if (!cloudProvider) throw new Error('Missing parameter: cloudProvider');\n if (!volumeType) throw new Error('Missing parameter: volumeType');\n\n if (cloudProvider.code === 'cleura') {\n const firstCleuraKey = this.getFirstCleuraKey(\n this.instance?.volumeSizes || {}\n );\n\n return (\n firstCleuraKey &&\n this.instance?.volumeSizes[firstCleuraKey][volumeType.code]\n );\n }\n\n return this.instance?.volumeSizes[cloudProvider.code][volumeType.code];\n }\n\n getVolumeSizesInfo(): string {\n return this.instance?.volume_sizes_info;\n }\n\n getVolumeTypes(cloudProvider?: CloudProvider): any[] {\n if (!cloudProvider) throw new Error('Missing parameter: cloudProvider');\n return this.instance?.volumeTypes[cloudProvider.code];\n }\n\n getVolumeTypesInfo(): string {\n return this.instance?.volume_types?.volume_types_info;\n }\n\n getInstanceStorageType(\n cloudProvider: CloudProvider,\n storageType: string\n ): InstanceVolumeType {\n if (!cloudProvider) throw new Error('Missing parameter: cloudProvider');\n storageType = storageType === 'ephemeral' ? '' : storageType;\n return this.instance?.volume_types[cloudProvider.code].find(\n (instanceVolumeType: InstanceVolumeType) =>\n instanceVolumeType.code === storageType\n );\n }\n\n getVolumeTypeInfo(\n cloudProvider: CloudProvider,\n volumeType: string\n ): InstanceVolumeType {\n if (!cloudProvider) throw new Error('Missing parameter: cloudProvider');\n if (!volumeType) throw new Error('Missing parameter: volumeType');\n\n if (cloudProvider.code === 'cleura') {\n const firstCleuraKey = this.getFirstCleuraKey(\n this.instance?.volumeTypes || {}\n );\n\n return (\n firstCleuraKey &&\n this.instance?.volumeTypes[firstCleuraKey].find(\n (instanceVolumeType: InstanceVolumeType) =>\n instanceVolumeType.code === volumeType\n )\n );\n }\n\n return this.instance?.volumeTypes[cloudProvider.code]?.find(\n (instanceVolumeType: InstanceVolumeType) =>\n instanceVolumeType.code === volumeType\n );\n }\n\n getAvailabilityZones(\n cloudProvider: CloudProvider,\n cloudRegion: CloudProviderRegion\n ): any[] {\n if (!cloudProvider) throw new Error('Missing parameter: cloudProvider');\n if (!cloudRegion) throw new Error('Missing parameter: cloudRegion');\n return this.network?.availability_zones[cloudProvider.code][\n cloudRegion.code\n ];\n }\n\n getAvailabilityZoneName(\n cloudProvider: CloudProvider,\n cloudRegion: CloudProviderRegion,\n availabilityZone: string\n ): string {\n if (!cloudProvider) throw new Error('Missing parameter: cloudProvider');\n if (!cloudRegion) throw new Error('Missing parameter: cloudRegion');\n return this.network?.availability_zones[cloudProvider.code][\n cloudRegion.code\n ].find((az: any) => az.code === availabilityZone)?.name;\n }\n\n getNetworks(cloudProvider?: CloudProvider): any[] {\n if (!cloudProvider) throw new Error('Missing parameter: cloudProvider');\n return this.network?.network[cloudProvider.code];\n }\n\n getNetworkInfo(cloudProvider: CloudProvider): string {\n if (!cloudProvider) throw new Error('Missing parameter: cloudProvider');\n return this.network?.network_info[cloudProvider.code];\n }\n\n getNetworkTypeInfo(cloudProvider: CloudProvider): string {\n if (!cloudProvider) throw new Error('Missing parameter: cloudProvider');\n return this.network?.type_info[cloudProvider.code];\n }\n\n getNetworkVpcInfo(cloudProvider: CloudProvider): string {\n if (!cloudProvider) throw new Error('Missing parameter: cloudProvider');\n return this.network?.vpc_info[cloudProvider.code];\n }\n\n getCloudProviderGroupByName(name: string): string {\n const isGrouped = this.cloud?.cloudGroups.find(\n (p: CloudProviderGroup) => {\n return name.includes(p.name);\n }\n );\n if (isGrouped) {\n return isGrouped.label;\n } else {\n return name;\n }\n }\n\n hasOnlyOneCloudProviderAndRegion(): boolean {\n return (\n this.getCloudProviders().length === 1 &&\n this.getCloudRegions(this.getCloudProviders()[0].code).length === 1\n );\n }\n\n getFirstCleuraKey(objectWithKeys: Record): string | undefined {\n const keys = Object.keys(objectWithKeys || {});\n return keys.find((key) => key.toLowerCase().includes('cleura'));\n }\n}\n","import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';\nimport ContentService from '../services/ContentService';\nimport DeploymentOptions from '../types/DeploymentOptions';\n\ninterface DeploymentOptionsType {\n deploymentOptions: DeploymentOptions | undefined;\n isLoading: boolean;\n isSuccess: boolean;\n isError: boolean;\n}\nconst initialState = {\n deploymentOptions: undefined,\n isError: false,\n isSuccess: false,\n isLoading: false,\n} as DeploymentOptionsType;\n\nexport const getDeploymentOptions = createAsyncThunk(\n 'datastores/getDeploymentOptions',\n async () => {\n try {\n const res = await ContentService.getDeploymentWizardOptions();\n return new DeploymentOptions(res);\n } catch (e) {\n console.error(e);\n }\n }\n);\n\nexport const deploymentOptionSlice = createSlice({\n name: 'datastores/getDeploymentOptions',\n initialState,\n reducers: {\n getDeploymentOptions: (state, action) => {\n state.isLoading = false;\n state.deploymentOptions = action.payload?.deploymentOptions;\n state.isSuccess = true;\n },\n },\n extraReducers: (builder) => {\n builder\n .addCase(getDeploymentOptions.pending, (state) => {\n state.isLoading = true;\n })\n .addCase(getDeploymentOptions.fulfilled, (state, action) => {\n state.isLoading = false;\n state.isSuccess = true;\n state.deploymentOptions = action.payload;\n })\n .addCase(getDeploymentOptions.rejected, (state, action) => {\n state.isLoading = false;\n state.isError = true;\n });\n },\n});\n\nexport default deploymentOptionSlice.reducer;\n","import { ReactElement, useEffect } from 'react';\nimport styles from './AppContent.module.less';\nimport AppRoute from '../../AppRoute';\nimport { Alert } from 'antd';\nimport { Link, useParams } from 'react-router-dom';\nimport { notification } from 'antd';\nimport CcxIconCloseCircleTwoTone from '../ccx/icons/CcxIconCloseCircleTwoTone';\nimport AppContentTemplate from './AppContentTemplate';\nimport { useAppDispatch, useAppSelector } from '../../redux/hooks';\nimport { updateProfile } from '../../slices/user.slice';\nimport { getDeploymentOptions } from '../../slices/deploymentOptions.slice';\n\ninterface UrlProps {\n projectUuid: string;\n}\n\nfunction AppContent(): ReactElement {\n const { projectUuid } = useParams();\n\n const { user } = useAppSelector((state) => state.user);\n\n useEffect(() => {\n if (\n user?.isAdmin &&\n window.location.href.split('/').at(-1) !== 'admin'\n ) {\n window.location.href = '/admin';\n }\n }, [user]);\n\n const dispatch = useAppDispatch();\n\n useEffect(() => {\n dispatch(getDeploymentOptions());\n }, []);\n\n const onAlertClose = async () => {\n try {\n dispatch(updateProfile());\n } catch (e) {\n notification.open({\n message: 'New User',\n description: `There was an error . ${e}`,\n icon: ,\n });\n }\n };\n\n return (\n \n {user?.isNewUser() && (\n \n You have successfully completed your account. Enjoy\n CCX by{' '}\n \n creating your first data store.\n \n \n }\n type=\"success\"\n className={styles.AppContentContainerAlert}\n showIcon\n onClose={onAlertClose}\n closable\n />\n )}\n \n \n );\n}\n\nexport default AppContent;\n","import { ReactElement } from 'react';\nimport { NavLink, useHistory } from 'react-router-dom';\nimport styles from './AppLogo.module.less';\nimport { AppLogoUrl } from '../../core/CcxEnv';\nimport User from '../../types/User';\n\nexport type AppLogoProps = {\n user?: User | undefined;\n};\n\nfunction AppLogo({ user }: AppLogoProps): ReactElement {\n const history = useHistory();\n\n const handleLogoClick = () => {\n history.push(`/projects/${user?.getOrganizationId()}/data-stores`);\n };\n\n return (\n
\n {\n e.preventDefault();\n handleLogoClick();\n }}\n >\n \"Logo\"\n \n
\n );\n}\n\nexport default AppLogo;\n","import { UserOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport React from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {}\n\nconst CcxIconUserOutlined = ({ testId = 'CcxIconUserOutlined' }: Props) => {\n return ;\n};\n\nexport default CcxIconUserOutlined;\n","import React, { ReactElement } from 'react';\nimport { Badge, Button, Dropdown, Menu, notification, Space } from 'antd';\nimport { NavLink } from 'react-router-dom';\nimport User from '../../types/User';\nimport {\n AUTH_APP_URL,\n AUTH_UI_APP_DISABLED,\n RBAC_ENABLED,\n} from '../../core/CcxEnv';\nimport CcxIconUserOutlined from '../ccx/icons/CcxIconUserOutlined';\nimport styles from './UserMenu.module.less';\nimport UsersService from '../../services/UsersService';\nimport CcxIconCloseCircleTwoTone from '../ccx/icons/CcxIconCloseCircleTwoTone';\nimport { removeLocalStorage } from '../../core/helpers';\n\nexport type UserMenuProps = {\n user?: User | undefined;\n testId?: string;\n};\n\n/**\n * UserMenu Component\n * @param User user\n */\nfunction UserMenu({ user, testId = 'UserMenu' }: UserMenuProps): ReactElement {\n if (!user) {\n return
;\n }\n\n const handleLogoutClick = () => {\n (async () => {\n try {\n await UsersService.logout();\n removeLocalStorageOnLogout();\n window.location.href = AUTH_APP_URL;\n } catch (e) {\n notification.open({\n message: 'Logout error',\n description: `An error occurred while logout: ${e}`,\n icon: ,\n });\n }\n })();\n };\n\n const removeLocalStorageOnLogout = () => {\n removeLocalStorage('org');\n };\n\n const logoutLink = AUTH_UI_APP_DISABLED ? (\n Logout\n ) : (\n \n Logout\n \n );\n const menu = (\n \n {!user.isAdmin && (\n <>\n {!AUTH_UI_APP_DISABLED && !user.emailConfirmed ? (\n \n \n Re-send Verification Email\n \n \n ) : null}\n \n \n Account\n \n \n \n )}\n {RBAC_ENABLED && (\n \n \n Organizations\n \n \n )}\n {logoutLink}\n \n );\n\n return (\n user && (\n \n \n \n )\n );\n}\n\nexport default UserMenu;\n","import React, { ReactElement } from 'react';\nimport styles from './AppUserMenu.module.less';\nimport UserMenu from './UserMenu';\nimport { useAppSelector } from '../../redux/hooks';\n\ninterface Props {\n testId?: string;\n}\n\nfunction AppUserMenu({ testId = 'AppUserMenu' }: Props): ReactElement {\n const { user } = useAppSelector((state) => state.user);\n\n return (\n
\n \n
\n );\n}\n\nexport default AppUserMenu;\n","import React from 'react';\nimport { BellOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport CcxComponentProps from '../../../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {}\n\nconst CcxIconBellOutlined = ({ testId }: Props) => {\n return ;\n};\n\nexport default CcxIconBellOutlined;\n","import { ClockCircleOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport React, { ReactElement } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {}\n\nfunction CcxIconClockCircle({\n testId = 'CcxIconClockCircle',\n}: Props): ReactElement {\n return ;\n}\n\nexport default CcxIconClockCircle;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { Typography, Row, Col } from 'antd';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport Job from '../../types/Job';\nimport styles from './AppNotificationItem.module.less';\nimport CcxIconCloseCircleOutlined from '../ccx/icons/CcxIconCloseCircleOutlined';\nimport CcxIconCheckCircle from '../ccx/icons/CcxIconCheckCircle';\nimport CcxIconClockCircle from '../ccx/icons/CcxIconClockCircle';\n\ninterface Props extends CcxComponentProps {\n notification: Job;\n}\n\nfunction AppNotificationItem({\n notification,\n testId = 'AppNotificationItem',\n}: Props): ReactElement {\n const { Text } = Typography;\n\n const [message, setMessage] = useState();\n const [status, setStatus] = useState();\n\n useEffect(() => {\n if (notification) {\n const instanceType = notification.data.instanceType;\n if (notification.isStatusOk()) {\n setMessage(\n \n Your new service is deployed successfully.
(\n {instanceType})\n
\n );\n setStatus(\n
\n \n
\n );\n } else if (notification.isStatusRunning()) {\n setMessage(\n \n Your new service is running.
\n {notification.getRunningStatusTextByType() &&\n notification.getRunningStatusTextByType()}\n
\n );\n setStatus(\n
\n \n
\n );\n } else if (notification.isStatusError()) {\n setMessage(\n \n Deployment of your new service has failed.
(\n {instanceType})\n
\n );\n setStatus(\n
\n \n
\n );\n } else {\n setMessage(\n \n Your service status has been updated\n \n );\n\n setStatus(\n \n \n
\n );\n }\n }\n }, [notification]);\n\n return (\n
\n \n
{status}\n \n
{message}
\n \n {notification.createdAt}\n \n \n \n \n );\n}\n\nexport default AppNotificationItem;\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { Dropdown, Space, Typography, Badge, Button, Menu } from 'antd';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport Job from '../../types/Job';\nimport CcxIconBellOutlined from '../ccx/icons/CcxIconBellOutlined';\nimport styles from './AppHeaderNotifications.module.less';\nimport AppNotificationItem from './AppNotificationItem';\nimport { Divider } from 'antd';\nimport { useAppSelector } from '../../redux/hooks';\nimport { useParams } from 'react-router';\n\ninterface Props extends CcxComponentProps {}\n\ninterface UrlProps {\n dataStoreUuid?: string;\n}\n\nfunction AppHeaderNotifications({\n testId = 'AppHeaderNotifications',\n}: Props): ReactElement {\n const { Text } = Typography;\n const { datastores } = useAppSelector((state) => state.datastores);\n const params: any = useParams();\n const dataStoreUuid = params[0].split('/')[4];\n const { jobs } = useAppSelector((state) => state.jobs);\n const [activeJobs, setActiveJobs] = useState([]);\n\n useEffect(() => {\n if (dataStoreUuid && jobs[dataStoreUuid]?.length > 0) {\n setActiveJobs(jobs[dataStoreUuid]);\n } else if (datastores) {\n setActiveJobs(datastores.getActiveJobs());\n }\n }, [datastores, jobs]);\n\n const menu = (\n \n
\n Latest notifications\n
\n\n {activeJobs?.map((job: Job) => {\n return (\n \n \n \n \n \n \n );\n })}\n \n );\n\n return (\n \n \n \n );\n}\n\nexport default AppHeaderNotifications;\n","import { Select } from 'antd';\nimport { useHistory } from 'react-router-dom';\nimport { getLocalStorage, setLocalStorage } from '../../core/helpers';\nimport styles from './Organizations.module.less';\nimport { useState } from 'react';\n\ninterface OrganizationsProps {\n options:\n | { label: string; value: string; type: string; role: string }[]\n | undefined;\n}\n\nconst Organizations = ({ options }: OrganizationsProps) => {\n const [org, setOrg] = useState(getLocalStorage('org'));\n const history = useHistory();\n const onChangeOrganization = (value: string) => {\n const selectedOption = options?.find((o) => o.value === value);\n if (selectedOption) {\n setLocalStorage('org', {\n id: selectedOption.value,\n type: selectedOption.type,\n role: selectedOption.role,\n });\n setOrg({\n id: selectedOption.value,\n type: selectedOption.type,\n role: selectedOption.role,\n });\n }\n history.push(`/projects/${selectedOption?.value}/data-stores`);\n window.location.reload();\n };\n\n return options && options?.length > 1 ? (\n \n ) : null;\n};\n\nexport default Organizations;\n","import { ReactElement } from 'react';\nimport styles from './AppHeader.module.less';\nimport { Layout } from 'antd';\nimport AppLogo from './AppLogo';\nimport AppCreateButton from './AppCreateButton';\nimport AppUserMenu from './AppUserMenu';\nimport {\n RBAC_ENABLED,\n showNotification,\n userMenuDisabled,\n} from '../../core/CcxEnv';\nimport AppHeaderNotifications from './AppHeaderNotifications';\nimport { useAppSelector } from '../../redux/hooks';\nimport Organizations from './Organizations';\n\ninterface Props {\n testId?: string;\n}\n\nfunction AppHeader({ testId = 'AppHeader' }: Props): ReactElement {\n const { Header } = Layout;\n\n const { user } = useAppSelector((state) => state.user);\n\n return (\n
\n
\n \n {user?.organizationsOptions() && RBAC_ENABLED && (\n \n )}\n
\n
\n {!user?.isAdmin && }\n {showNotification && }\n {!userMenuDisabled && }\n
\n
\n );\n}\n\nexport default AppHeader;\n","import React, { ReactElement } from 'react';\nimport { Layout } from 'antd';\nimport {\n BuildNumber,\n hideCloudProvider,\n PricingLink,\n ToSLink,\n PrivacyPolicyLink,\n} from '../../core/CcxEnv';\nimport styles from './AppFooter.module.less';\nimport { Typography } from 'antd';\n\nfunction AppFooter(): ReactElement {\n const { Footer } = Layout;\n\n const { Text } = Typography;\n\n const d = new Date();\n\n return (\n
\n {!hideCloudProvider ? (\n \n
\n © Copyright Severalnines {d.getFullYear()}. All Rights\n Reserved\n {BuildNumber > 0 && <>{` | Version: ${BuildNumber}`}}\n
\n
\n \n Terms of service\n {' '}\n |{' '}\n \n Privacy policy\n \n
\n
\n ) : undefined}\n
\n );\n}\n\nexport default AppFooter;\n","import React, { ReactElement, ReactNode } from 'react';\nimport CcxComponentProps from '../../core/CcxComponent';\nimport styles from './FloatingContent.module.less';\n\ninterface Props extends CcxComponentProps {\n children: ReactNode;\n placement?: string;\n}\n\nfunction FloatingContent({\n children,\n placement = 'BottomLeft',\n testId = 'FloatingContent',\n}: Props): ReactElement {\n return (\n \n {children}\n \n );\n}\n\nexport default FloatingContent;\n","import React, { ReactElement, ReactNode } from 'react';\nimport CcxComponentProps from '../../../core/CcxComponent';\nimport styles from './TextFormat.module.less';\n\ninterface Props extends CcxComponentProps {\n children: ReactNode;\n breakWord?: any;\n bold?: any;\n muted?: any;\n info?: any;\n success?: any;\n warning?: any;\n error?: any;\n danger?: any;\n type: any;\n}\n\nfunction TextFormat({\n children,\n breakWord,\n bold,\n muted,\n info,\n success,\n warning,\n error,\n danger,\n type,\n testId = 'TextFormat',\n}: Props): ReactElement {\n let css = styles.TextFormatInfo;\n if (type === 'danger' || type === 'error') css = styles.TextFormatDanger;\n if (type === 'warning') css = styles.TextFormatWarning;\n if (type === 'success') css = styles.TextFormatSuccess;\n if (type === 'info') css = styles.TextFormatInfo;\n css = breakWord ? `${css} ${styles.TextFormatBreakWord}` : css;\n css = bold ? `${css} ${styles.TextFormatBold}` : css;\n css = muted ? `${css} ${styles.TextFormatMuted}` : css;\n\n return (\n
\n {children}\n
\n );\n}\n\nexport default TextFormat;\n","import React from 'react';\nimport { MessageOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport CcxComponentProps from '../../../core/CcxComponent';\n\ninterface Props extends CcxComponentProps {}\n\nconst CcxIconMessageOutlined = ({\n testId = 'CcxIconMessageOutlined',\n}: Props) => {\n return ;\n};\n\nexport default CcxIconMessageOutlined;\n","import React, { ReactElement, ReactNode, useEffect, useState } from 'react';\nimport { CloseOutlined } from '@severalnines/frontend_hub/libs/icons';\nimport {\n Form,\n Space,\n Spin,\n Tabs,\n Radio,\n Button,\n Input,\n Result,\n Popover,\n} from 'antd';\nimport TextFormat from './ccx/common/TextFormat';\nimport styles from './FeedbackForm.module.less';\nimport CcxComponentProps from '../core/CcxComponent';\nimport CcxIconMessageOutlined from './ccx/icons/CcxIconMessageOutlined';\nimport { TooltipPlacement } from 'antd/lib/tooltip';\n\ninterface Props extends CcxComponentProps {\n children: ReactNode;\n placement?: TooltipPlacement;\n visible?: boolean;\n showThanks?: boolean;\n showError?: boolean;\n thanksText?: string;\n errorText?: string;\n feedbackTypes?: any[];\n defaultFeedbackType?: string;\n onVisibleChange?: Function;\n onSubmit?: Function;\n onError?: Function;\n onComplete?: Function;\n}\n\nfunction FeedbackForm({\n children,\n placement = 'topRight',\n visible = false,\n onVisibleChange,\n showThanks = false,\n showError = false,\n thanksText = 'Thank you for your feedback.',\n errorText = 'An error has occurred. Please try again.',\n feedbackTypes = [\n { value: 'feedback', label: 'General feedback' },\n { value: 'feature_request', label: 'Feature request' },\n { value: 'bug', label: 'Bug' },\n ],\n defaultFeedbackType = 'feedback',\n onSubmit,\n onError,\n onComplete,\n testId = 'FeedbackForm',\n}: Props): ReactElement {\n const [popoverVisible, setPopoverVisible] = useState(visible);\n const [activeKey, setActiveKey] = useState('1');\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState(null);\n const [form] = Form.useForm();\n const [feedbackType, setFeedbackType] =\n useState(defaultFeedbackType);\n const [feedbackMessage, setFeedbackMessage] = useState('');\n\n useEffect(() => {\n setPopoverVisible(visible);\n }, [visible]);\n\n const handlePopoverCloseClick = () => {\n if (activeKey === '3' && onComplete) {\n onComplete();\n }\n if (onVisibleChange) {\n onVisibleChange(false);\n }\n setPopoverVisible(false);\n form.resetFields();\n setActiveKey('1');\n setError(null);\n };\n\n const handlePopoverVisibleChange = (visible: boolean) => {\n if (onVisibleChange) {\n onVisibleChange(visible);\n }\n setPopoverVisible(visible);\n if (!visible) {\n form.resetFields();\n setActiveKey('1');\n setError(null);\n }\n };\n\n const handleNextClick = () => {\n setActiveKey('2');\n };\n\n const handleBackClick = () => {\n setActiveKey('1');\n };\n\n const handleSendClick = async () => {\n setError(null);\n try {\n await form.validateFields();\n setSubmitting(true);\n onSubmit &&\n (await onSubmit({\n feedbackType,\n feedbackMessage,\n }));\n setSubmitting(false);\n\n if (showThanks) {\n setActiveKey('3');\n } else {\n onComplete && onComplete();\n setPopoverVisible(false);\n onVisibleChange && onVisibleChange(false);\n setActiveKey('1');\n }\n\n form.resetFields();\n } catch (e) {\n if (showError) {\n setError(errorText);\n }\n if (onError) {\n await onError(e);\n }\n setSubmitting(false);\n }\n };\n\n const popoverContent = (\n \n \n
}\n data-testid={`${testId}Tabs`}\n >\n \n
\n
\n

\n What kind of feedback do you want to\n provide?\n

\n \n setFeedbackType(e.target.value),\n }}\n >\n \n \n {feedbackTypes.map(\n (t: any, i: number) => (\n \n {t.label}\n \n )\n )}\n \n \n \n
\n
\n \n Next\n \n
\n
\n \n \n
\n
\n
\n Please provide any feedback you have for the\n service:\n
\n \n setFeedbackMessage(e.target.value),\n }}\n >\n \n {error && (\n \n {errorText}\n \n )}\n \n
\n
\n \n Send\n \n \n Back\n \n
\n
\n \n \n
\n
\n \n
\n
\n \n Close\n \n
\n
\n \n \n \n \n );\n\n return (\n \n \n \n \n

\n Feedback \n

\n
\n }\n content={popoverContent}\n arrowPointAtCenter={false}\n trigger=\"click\"\n open={popoverVisible}\n onOpenChange={handlePopoverVisibleChange}\n destroyTooltipOnHide={true}\n >\n {children}\n \n );\n}\n\nexport default FeedbackForm;\n","import ApiService from './ApiService';\nimport { API_FEEDBACK } from '../core/CcxEnv';\n\n// constants\nconst API_URL = API_FEEDBACK;\n\ntype SendFeedbackParams = {\n dataStoreUuid?: string;\n feedbackMessage: string;\n feedbackProps?: string[];\n feedbackType: string;\n vpcUuid?: string;\n};\n\nexport default class FeedbackService extends ApiService {\n /**\n * Send feedback message.\n * @param {string} feedbackMessage\n * @param {string} feedbackType\n * @param {string} dataStoreUuid\n * @param {string} feedbackProps\n * @param {string} vpcUuid\n */\n static async sendFeedback({\n dataStoreUuid,\n feedbackMessage,\n feedbackProps,\n feedbackType,\n vpcUuid,\n }: SendFeedbackParams): Promise {\n const requestData = {\n data: {\n feedback_message: feedbackMessage,\n feedback_props: feedbackProps,\n feedback_type: feedbackType,\n vpc_uuid: vpcUuid,\n cluster_uuid: dataStoreUuid,\n },\n };\n return await this.request('POST', `feedback`, requestData);\n }\n\n protected static getApiUrl() {\n return API_URL;\n }\n}\n","import React, { ReactElement, ReactNode } from 'react';\nimport { Button, Layout } from 'antd';\nimport styles from './AppLayoutTemplate.module.less';\nimport AppHeader from './AppHeader';\nimport AppFooter from './AppFooter';\nimport { hideFeedback, hideHeader } from '../../core/CcxEnv';\nimport FloatingContent from './FloatingContent';\nimport FeedbackForm from '../FeedbackForm';\nimport FeedbackService from '../../services/FeedbackService';\nimport { useParams } from 'react-router-dom';\nimport CcxIconMessageOutlined from '../ccx/icons/CcxIconMessageOutlined';\n\n/**\n * Main site layout\n */\n\ninterface UrlProps {\n projectUuid: string;\n dataStoreUuid?: string;\n vpcUuid?: string;\n}\n\ntype AppLayoutTemplateProps = {\n showHeader?: boolean;\n children: ReactNode;\n testId?: string;\n};\n\nexport default function AppLayoutTemplate({\n showHeader = !hideHeader,\n children,\n testId = 'AppLayoutTemplate',\n}: AppLayoutTemplateProps): ReactElement {\n const { projectUuid, dataStoreUuid, vpcUuid } = useParams();\n const handleFeedbackFormSubmit = async ({\n feedbackType,\n feedbackMessage,\n }: any) => {\n await FeedbackService.sendFeedback({\n feedbackType,\n feedbackMessage,\n vpcUuid,\n dataStoreUuid,\n feedbackProps: projectUuid ? [projectUuid] : undefined,\n });\n };\n\n return (\n \n {showHeader && }\n
\n {children}\n \n
\n {!hideFeedback && (\n \n \n }\n >\n \n Give us Feedback\n \n \n \n \n )}\n
\n );\n}\n","import React, { ReactElement } from 'react';\nimport AppContent from './AppContent';\nimport AppLayoutTemplate from './AppLayoutTemplate';\n\nfunction AppLayout(): ReactElement {\n return (\n \n \n \n );\n}\n\nexport default AppLayout;\n","import React, { ReactElement } from 'react';\nimport { Alert, Button, Col, Result, Row } from 'antd';\nimport { useHistory } from 'react-router-dom';\n\ntype Error500Props = {\n error: Error;\n onHomeClick: () => void;\n};\n\n/**\n * Error 404 Page\n */\nfunction Error500({ error, onHomeClick }: Error500Props): ReactElement {\n const SubTitle = (\n \n
\n {error.message}}\n type=\"error\"\n showIcon\n />\n \n \n );\n\n return (\n \n Back Home\n \n }\n />\n );\n}\n\nexport default Error500;\n","type ReducerProps = {\n state: any;\n action: any;\n};\n\nexport const initialState = {\n deployments: [],\n deployment: null,\n node: null,\n};\n\nexport default function reducer({ state, action }: ReducerProps) {\n switch (action.type) {\n case 'SELECT_DEPLOYMENT':\n return { ...state, deployment: action.deployment };\n case 'SELECT_NODE':\n return { ...state, node: action.node };\n default:\n return state;\n }\n}\n","import { createContext } from 'react';\n\nexport type StateContextProps = {\n reducer: any;\n initialState: any;\n children?: any;\n};\n\n// We initialise them without default values, to make that happen, we\n// apply the Partial helper type.\nexport const StateContext = createContext | any>({});\n","import React, { useReducer } from 'react';\nimport { StateContext, StateContextProps } from '../context/StateContext';\n\nexport const StateProvider = ({\n reducer,\n initialState,\n children,\n}: StateContextProps) => {\n return (\n \n {children}\n \n );\n};\n","import React, { useState } from 'react';\nimport { VpcsContext } from '../context/VpcsContext';\nimport useVpcsCount from '../hooks/useVpcsCount';\n\nexport interface VpcsProps {\n children: React.ReactNode;\n}\n\nexport const VpcsProvider = ({ children }: VpcsProps) => {\n const { vpcsCount, loading, refresh } = useVpcsCount();\n const [cloud, setCloud] = useState(undefined);\n const [region, setRegion] = useState(undefined);\n\n return (\n \n {children}\n \n );\n};\n","import { useEffect, useState } from 'react';\nimport VpcService from '../../services/VpcService';\n\nexport default function useVpcs(cloud?: string, region?: string) {\n const [loading, setLoading] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [error, setError] = useState(null);\n const [vpcsCount, setVpcsCount] = useState(undefined);\n\n const load = async () => {\n try {\n const totalVpc = await VpcService.getTotalVpc();\n\n setVpcsCount(totalVpc);\n setError(null);\n } catch (e: any) {\n setError(e);\n }\n };\n\n const refresh = () => {\n setUpdating(true);\n load();\n setUpdating(false);\n };\n\n useEffect(() => {\n const init = async () => {\n setLoading(true);\n await load();\n setLoading(false);\n };\n\n init();\n }, []);\n\n return { vpcsCount, refresh, loading, updating, error };\n}\n","import React, { useState } from 'react';\nimport { ChartsContext } from '../context/ChartsContext';\n\nexport interface ChartsProps {\n children: React.ReactNode;\n}\n\nexport const ChartsProvider = ({ children }: ChartsProps) => {\n const [chartRange, setChartRange] = useState(undefined);\n\n return (\n \n {children}\n \n );\n};\n","import reducer, { initialState } from './core/providers/reducer';\nimport React, { useEffect } from 'react';\nimport {\n AppFaviconUrl,\n billingDisabled,\n GLOBAL_REDIRECT_URL,\n WRONG_GLOBAL_REDIRECT_URL,\n} from './core/CcxEnv';\nimport { StateProvider } from './core/providers/StateProvider';\nimport { VpcsProvider } from './core/providers/VpcsProvider';\nimport { ChartsProvider } from './core/providers/ChartsProvider';\nimport { useAppDispatch, useAppSelector } from './redux/hooks';\nimport { checkUserSubscription, userCheck } from './slices/user.slice';\n\ntype AppProvidersProps = {\n children: React.ReactNode;\n};\nexport default function AppProviders({ children }: AppProvidersProps) {\n // setting favicons\n let icons: any = [];\n if (document) {\n icons = document.querySelectorAll(\n 'link[rel=icon],[rel=apple-touch-icon]'\n );\n }\n\n if (icons.length) {\n icons.forEach(function (i: any) {\n i.href = AppFaviconUrl;\n });\n }\n\n // redirect for if users on lintasarta try to access dbaas.cloudeka.id instead of cmd.cloudeka.id\n if (WRONG_GLOBAL_REDIRECT_URL && GLOBAL_REDIRECT_URL) {\n const wrongUrl =\n window.location !== window.parent.location\n ? document.referrer\n : document.location.href;\n\n if (wrongUrl.startsWith(WRONG_GLOBAL_REDIRECT_URL)) {\n window.parent.location.href = GLOBAL_REDIRECT_URL;\n }\n }\n\n const dispatch = useAppDispatch();\n\n const { user } = useAppSelector((state) => state.user);\n\n useEffect(() => {\n dispatch(userCheck());\n if (!billingDisabled) {\n dispatch(checkUserSubscription());\n }\n }, [dispatch]);\n\n useEffect(() => {\n const AUTO_REFRESH_INTERVAL = 60000;\n const interval = setInterval(async () => {\n if (!billingDisabled) {\n dispatch(checkUserSubscription());\n }\n }, AUTO_REFRESH_INTERVAL);\n\n return () => clearInterval(interval);\n }, [dispatch]);\n\n return user ? (\n \n \n {children}\n \n \n ) : (\n <>\n );\n}\n","import React, { ReactElement } from 'react';\nimport Error500 from './Error500';\nimport { ErrorBoundary } from 'react-error-boundary';\nimport NotFoundError404 from './NotFoundError404';\nimport Error404 from './Error404';\nimport { useHistory } from 'react-router-dom';\nimport AppProviders from '../../AppProviders';\nimport AppLayoutTemplate from '../layout/AppLayoutTemplate';\nimport AppContentTemplate from '../layout/AppContentTemplate';\n\ntype Props = {\n children: ReactElement;\n};\n\nfunction AppErrorBoundary({ children }: Props) {\n const onErrorHandler = (error: Error, info: { componentStack: string }) => {\n if (!(error instanceof NotFoundError404)) {\n console.error(\n 'ErrorBoundary caught an error:',\n error,\n info.componentStack\n );\n }\n };\n\n return (\n {\n // reset the state of your app so the error doesn't happen again\n }}\n >\n {children}\n \n );\n}\n\ntype AppErrorFallbackProps = {\n error: Error;\n resetErrorBoundary: Function;\n};\n\nfunction AppErrorFallback({\n error,\n resetErrorBoundary,\n}: AppErrorFallbackProps) {\n const isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n );\n\n const history = useHistory();\n\n const handleHomeClick = () => {\n history.push({\n pathname: '/',\n });\n resetErrorBoundary?.();\n };\n\n const redirectToHomePage = () => {\n handleHomeClick();\n return null; // Return null to prevent rendering any content for the error\n };\n\n if (!(error instanceof NotFoundError404) && !isLocalhost) {\n return redirectToHomePage();\n }\n\n if (error instanceof NotFoundError404) {\n return (\n \n \n \n \n \n \n \n );\n } else {\n return (\n \n \n \n \n \n );\n }\n}\n\nexport default AppErrorBoundary;\n","import { ReactElement } from 'react';\nimport { hot } from 'react-hot-loader/root';\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom';\nimport AppLayout from './components/layout/AppLayout';\nimport './App.module.less';\nimport AppErrorBoundary from './components/errors/AppErrorBoundary';\nimport AppProviders from './AppProviders';\n\nfunction App(): ReactElement {\n return (\n \n \n \n \n }\n >\n \n \n \n \n );\n}\n\nexport default hot(App);\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null &&\n contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n}\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport LazyLoader from './components/LazyLoader';\nimport '@fontsource/rubik';\n\ninterface Props {\n children: any;\n}\n\nfunction AppLoader({ children }: Props): ReactElement {\n const [isReady, setIsReady] = useState(false);\n\n useEffect(() => {\n // check for a dummy font size to make sure the font is loaded\n (document as any).fonts\n ?.load('14px Rubik')\n .then(() => setIsReady(true));\n }, []);\n\n if (isReady) {\n return <>{children};\n }\n\n return ;\n}\n\nexport default AppLoader;\n","import { configureStore } from '@reduxjs/toolkit';\nimport userReducer from '../slices/user.slice';\nimport dataStoresReducer from '../slices/datastores.slice';\nimport jobsReducer from '../slices/jobs.slice';\nimport cmonReducer from '../slices/cmon.slice';\nimport deploymentOptionsReducer from '../slices/deploymentOptions.slice';\nimport dataStoreReducer from '../slices/datastore.slice';\nimport restoreBackupReducer from '../slices/restore.slice';\n\nexport const store = configureStore({\n reducer: {\n user: userReducer,\n datastores: dataStoresReducer,\n jobs: jobsReducer,\n cmon: cmonReducer,\n deploymentOptions: deploymentOptionsReducer,\n dataStore: dataStoreReducer,\n restoreBackup: restoreBackupReducer,\n },\n middleware: (getDefaultMiddleware) =>\n getDefaultMiddleware({\n serializableCheck: false,\n thunk: true,\n }),\n});\n\n// Infer the `RootState` and `AppDispatch` types from the store itself\nexport type RootState = ReturnType;\n// Inferred type: {posts: PostsState, comments: CommentsState, users: UsersState}\nexport type AppDispatch = typeof store.dispatch;\n","import React, { useEffect } from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport { BrowserRouter } from 'react-router-dom';\nimport AppLoader from './AppLoader';\nimport { Provider } from 'react-redux';\nimport { store } from './redux/store';\nimport { EXTERNAL_CSS_URL } from './core/CcxEnv';\nimport { initializePiwikPro } from './core/helpers';\n\nif (EXTERNAL_CSS_URL) {\n // Create a link element\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.type = 'text/css';\n link.href = EXTERNAL_CSS_URL;\n\n // Append the link element to the head of the document synchronously (blocking)\n document.head.appendChild(link);\n}\n\ninitializePiwikPro();\n\nReactDOM.render(\n // \n \n \n \n \n \n \n ,\n // ,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"BackupActionCreateDatastoreButton\":\"BackupActionCreateDatastoreButton_HJxuA\",\"PopoverContainer\":\"PopoverContainer_DViMb\",\"PopoverContentRow\":\"PopoverContentRow_OEDWh\",\"PopoverActions\":\"PopoverActions_nCh73\",\"BorderRadius\":\"BorderRadius_rlM+5\",\"ExclamationCircleFilledColor\":\"ExclamationCircleFilledColor_BcX0C\",\"ant-modal-header\":\"ant-modal-header_VT-7v\",\"ant-modal-content\":\"ant-modal-content_8mvMM\",\"ant-modal-footer\":\"ant-modal-footer_tHWch\",\"ant-message-notice-content\":\"ant-message-notice-content_67-Nz\",\"ant-tooltip-inner\":\"ant-tooltip-inner_tS1d4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"MysqlDbCompareDashboard\":\"MysqlDbCompareDashboard_gOzy2\",\"ant-modal-header\":\"ant-modal-header_wKNP7\",\"ant-modal-content\":\"ant-modal-content_iu1bZ\",\"ant-modal-footer\":\"ant-modal-footer_u6oXo\",\"ant-message-notice-content\":\"ant-message-notice-content_gUILH\",\"ant-tooltip-inner\":\"ant-tooltip-inner_lcsy5\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ProxySqlLbCompareDashboard\":\"ProxySqlLbCompareDashboard_HV4kO\",\"ant-modal-header\":\"ant-modal-header_Lp5w4\",\"ant-modal-content\":\"ant-modal-content_Brjf3\",\"ant-modal-footer\":\"ant-modal-footer_1NnA9\",\"ant-message-notice-content\":\"ant-message-notice-content_dU0-+\",\"ant-tooltip-inner\":\"ant-tooltip-inner_KbY7N\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppConfirmDialog\":\"AppConfirmDialog_zYmAJ\",\"AppConfirmDialogDisabled\":\"AppConfirmDialogDisabled_BFS89\",\"AppConfirmDialogCritical\":\"AppConfirmDialogCritical_j6++l\",\"AppConfirmDialogAlertMessage\":\"AppConfirmDialogAlertMessage_oLJq7\",\"AppConfirmDialogAlertDescription\":\"AppConfirmDialogAlertDescription_GpmJ4\",\"AppConfirmationInput\":\"AppConfirmationInput_HSfuq\",\"AppConfirmationIcon\":\"AppConfirmationIcon_-juNJ\",\"ant-modal-header\":\"ant-modal-header_Fl-BG\",\"ant-modal-content\":\"ant-modal-content_EtrGD\",\"ant-modal-footer\":\"ant-modal-footer_tlRhN\",\"ant-message-notice-content\":\"ant-message-notice-content_SJ1Sd\",\"ant-tooltip-inner\":\"ant-tooltip-inner_rArkB\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"RedisDashboard\":\"RedisDashboard_3EQTV\",\"ant-modal-header\":\"ant-modal-header_e22pp\",\"ant-modal-content\":\"ant-modal-content_90X3D\",\"ant-modal-footer\":\"ant-modal-footer_GvJHT\",\"ant-message-notice-content\":\"ant-message-notice-content_EUSas\",\"ant-tooltip-inner\":\"ant-tooltip-inner_mM6zk\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"TextFormatBreakWord\":\"TextFormatBreakWord_FOciW\",\"TextFormatBold\":\"TextFormatBold_XZTiX\",\"TextFormatMuted\":\"TextFormatMuted_C5ozI\",\"TextFormatInfo\":\"TextFormatInfo_ark8F\",\"TextFormatSuccess\":\"TextFormatSuccess_K4VjE\",\"TextFormatWarning\":\"TextFormatWarning_a1ev9\",\"TextFormatDanger\":\"TextFormatDanger_24GsT\",\"TextFormatError\":\"TextFormatError_p0Prl\",\"ant-modal-header\":\"ant-modal-header_7dSjF\",\"ant-modal-content\":\"ant-modal-content_0asun\",\"ant-modal-footer\":\"ant-modal-footer_EPk4v\",\"ant-message-notice-content\":\"ant-message-notice-content_RE+HF\",\"ant-tooltip-inner\":\"ant-tooltip-inner_D-5bM\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DatastoreScalingStepFormInputNumber\":\"DatastoreScalingStepFormInputNumber_pQRjS\",\"ant-modal-header\":\"ant-modal-header_cthTb\",\"ant-modal-content\":\"ant-modal-content_Iemn7\",\"ant-modal-footer\":\"ant-modal-footer_Qr-eb\",\"ant-message-notice-content\":\"ant-message-notice-content_X6qDM\",\"ant-tooltip-inner\":\"ant-tooltip-inner_9mYwt\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"PopoverContentRow\":\"PopoverContentRow_CCUO7\",\"PopoverActionsRow\":\"PopoverActionsRow_IhjMD\",\"ExclamationCircleFilledColor\":\"ExclamationCircleFilledColor_yjE4F\",\"ant-modal-header\":\"ant-modal-header_YC2QT\",\"ant-modal-content\":\"ant-modal-content_tIhcY\",\"ant-modal-footer\":\"ant-modal-footer_LeHbl\",\"ant-message-notice-content\":\"ant-message-notice-content_ifY33\",\"ant-tooltip-inner\":\"ant-tooltip-inner_Wswlu\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ValidationSuccess\":\"ValidationSuccess_bf40j\",\"ValidationFailure\":\"ValidationFailure_fU50A\",\"FormStyle\":\"FormStyle_pOINQ\",\"FormDivider\":\"FormDivider_BrbZa\",\"ant-modal-header\":\"ant-modal-header_KN-nC\",\"ant-modal-content\":\"ant-modal-content_SHvxr\",\"ant-modal-footer\":\"ant-modal-footer_7zmtt\",\"ant-message-notice-content\":\"ant-message-notice-content_YU3QI\",\"ant-tooltip-inner\":\"ant-tooltip-inner_84zeQ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DataStoreInformationTop\":\"DataStoreInformationTop_2VEpn\",\"DataStoreInformationMiddle\":\"DataStoreInformationMiddle_s6ZP8\",\"DataStoreInformationTopName\":\"DataStoreInformationTopName_+12S0\",\"DataStoreInformationTopLongName\":\"DataStoreInformationTopLongName_MQEwa\",\"ant-modal-header\":\"ant-modal-header_fGwZJ\",\"ant-modal-content\":\"ant-modal-content_2GK6l\",\"ant-modal-footer\":\"ant-modal-footer_Nx-OD\",\"ant-message-notice-content\":\"ant-message-notice-content_Prz12\",\"ant-tooltip-inner\":\"ant-tooltip-inner_hBarr\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DbParameterForm\":\"DbParameterForm_arkEG\",\"DbParametersModalTag\":\"DbParametersModalTag_LorB7\",\"DbParameterFormInput\":\"DbParameterFormInput_-547k\",\"BreakDefaultValue\":\"BreakDefaultValue_4wVRJ\",\"DatastoreSettingDbParametersName\":\"DatastoreSettingDbParametersName_yvlTZ\",\"DatastoreSettingDbParametersDefault\":\"DatastoreSettingDbParametersDefault_MKxyr\",\"ant-modal-header\":\"ant-modal-header_u9Zvl\",\"ant-modal-content\":\"ant-modal-content_o+XCd\",\"ant-modal-footer\":\"ant-modal-footer_8HQlP\",\"ant-message-notice-content\":\"ant-message-notice-content_RLMa2\",\"ant-tooltip-inner\":\"ant-tooltip-inner_C+hTn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ServiceInformation\":\"ServiceInformation_XYWox\",\"ServiceInformationMiddle\":\"ServiceInformationMiddle_6i0SL\",\"ServiceInformationBottomSection\":\"ServiceInformationBottomSection_i++UT\",\"ServiceInformationDsnBottom\":\"ServiceInformationDsnBottom_QTd-5\",\"ServiceInformationInstance\":\"ServiceInformationInstance_dBqLv\",\"ServiceInformationInstanceType\":\"ServiceInformationInstanceType_T0Qmz\",\"ServiceInformationStatusDot\":\"ServiceInformationStatusDot_IUXQV\",\"BadgeIcon\":\"BadgeIcon_Ycfld\",\"ant-modal-header\":\"ant-modal-header_PzUxF\",\"ant-modal-content\":\"ant-modal-content_VUHu9\",\"ant-modal-footer\":\"ant-modal-footer_EvGeN\",\"ant-message-notice-content\":\"ant-message-notice-content_ygyqJ\",\"ant-tooltip-inner\":\"ant-tooltip-inner_hHm7j\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"OrganizationActionButton\":\"OrganizationActionButton_5goY-\",\"DeleteOrganizationPopoverButton\":\"DeleteOrganizationPopoverButton_QAV8f\",\"ant-modal-header\":\"ant-modal-header_JCB5x\",\"ant-modal-content\":\"ant-modal-content_XLEDl\",\"ant-modal-footer\":\"ant-modal-footer_h68kM\",\"ant-message-notice-content\":\"ant-message-notice-content_qMVZX\",\"ant-tooltip-inner\":\"ant-tooltip-inner_JHORc\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"PaymentsInvoicesStatus\":\"PaymentsInvoicesStatus_Va-m8\",\"PaymentsInvoicesPaymentHistory\":\"PaymentsInvoicesPaymentHistory_BEtCl\",\"PaymentsInvoicesStatusDot\":\"PaymentsInvoicesStatusDot_tKx1w\",\"PaymentsInvoicesStatusDotGreen\":\"PaymentsInvoicesStatusDotGreen_oOp2h\",\"PaymentsInvoicesStatusDotOrange\":\"PaymentsInvoicesStatusDotOrange_ndvPO\",\"PaymentsInvoicesStatusDotRed\":\"PaymentsInvoicesStatusDotRed_xxh9j\",\"PaymentsInvoicesStatusDotBlack\":\"PaymentsInvoicesStatusDotBlack_YMu0T\",\"PaymentsInvoicesStatusDotGreenGlow\":\"PaymentsInvoicesStatusDotGreenGlow_0Bvbj\",\"PaymentsInvoicesStatusDotRedGlow\":\"PaymentsInvoicesStatusDotRedGlow_UyNOW\",\"PaymentsInvoicesHeading\":\"PaymentsInvoicesHeading_f33+8\",\"ant-modal-header\":\"ant-modal-header_LKwfo\",\"ant-modal-content\":\"ant-modal-content_JvYIh\",\"ant-modal-footer\":\"ant-modal-footer_z7Ogx\",\"ant-message-notice-content\":\"ant-message-notice-content_hbMHV\",\"ant-tooltip-inner\":\"ant-tooltip-inner_DmHXb\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DataStoreOverviewNetworkInformation\":\"DataStoreOverviewNetworkInformation_c7QnR\",\"DataStoreOverviewNetworkInformationColumns\":\"DataStoreOverviewNetworkInformationColumns_7i9Jy\",\"DataStoreOverviewNetworkInformationLabel\":\"DataStoreOverviewNetworkInformationLabel_3iRfa\",\"DataStoreOverviewNetworkInformationValue\":\"DataStoreOverviewNetworkInformationValue_XVX0A\",\"ant-modal-header\":\"ant-modal-header_m9yMu\",\"ant-modal-content\":\"ant-modal-content_6jMoF\",\"ant-modal-footer\":\"ant-modal-footer_Or2x1\",\"ant-message-notice-content\":\"ant-message-notice-content_eS15C\",\"ant-tooltip-inner\":\"ant-tooltip-inner_5r6mG\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DataStoreOverviewCloudInformation\":\"DataStoreOverviewCloudInformation_9+fI4\",\"DataStoreOverviewCloudInformationColumns\":\"DataStoreOverviewCloudInformationColumns_onRRW\",\"DataStoreOverviewCloudInformationLabel\":\"DataStoreOverviewCloudInformationLabel_ZjuXr\",\"DataStoreOverviewCloudInformationValue\":\"DataStoreOverviewCloudInformationValue_2SaAv\",\"ant-modal-header\":\"ant-modal-header_GkcB0\",\"ant-modal-content\":\"ant-modal-content_RBzq1\",\"ant-modal-footer\":\"ant-modal-footer_rL+Ey\",\"ant-message-notice-content\":\"ant-message-notice-content_8-QBp\",\"ant-tooltip-inner\":\"ant-tooltip-inner_AgonR\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DataStoreOverviewAccessToServices\":\"DataStoreOverviewAccessToServices_ODuQS\",\"DataStoreOverviewAccessToServicesRole\":\"DataStoreOverviewAccessToServicesRole_AsBNC\",\"DataStoreOverviewAccessToServicesConInfo\":\"DataStoreOverviewAccessToServicesConInfo_OQieY\",\"DataStoreOverviewAccessToServicesRoleName\":\"DataStoreOverviewAccessToServicesRoleName_+BjTR\",\"DataStoreOverviewAccessToServicesRadioOptions\":\"DataStoreOverviewAccessToServicesRadioOptions_0wW8s\",\"ant-modal-header\":\"ant-modal-header_n6wEs\",\"ant-modal-content\":\"ant-modal-content_ClbqC\",\"ant-modal-footer\":\"ant-modal-footer_aOfSD\",\"ant-message-notice-content\":\"ant-message-notice-content_65igV\",\"ant-tooltip-inner\":\"ant-tooltip-inner_IJAXq\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"MaintenanceTooltipPoints\":\"MaintenanceTooltipPoints_rS3Qz\",\"TooltipInfoIcon\":\"TooltipInfoIcon_SxiiI\",\"ant-modal-header\":\"ant-modal-header_GzPph\",\"ant-modal-content\":\"ant-modal-content_u2jnG\",\"ant-modal-footer\":\"ant-modal-footer_0RB9V\",\"ant-message-notice-content\":\"ant-message-notice-content_dzMhQ\",\"ant-tooltip-inner\":\"ant-tooltip-inner_tNVmR\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DatastoreScalingStep2\":\"DatastoreScalingStep2_dhGdP\",\"DatastoreScalingStep2Info\":\"DatastoreScalingStep2Info_sNoL9\",\"DatastoreScalingStep2SliderRow\":\"DatastoreScalingStep2SliderRow_lFkFZ\",\"DatastoreScalingStep2Region\":\"DatastoreScalingStep2Region_x8ozf\",\"DatastoreScalingStep2NodeInfo\":\"DatastoreScalingStep2NodeInfo_1SZ3T\",\"DatastoreScalingNewNode\":\"DatastoreScalingNewNode_aWcks\",\"DatastoreScalingStep2Alert\":\"DatastoreScalingStep2Alert_WGUhK\",\"CurrentConfigurationText\":\"CurrentConfigurationText_F1iNh\",\"CurrentConfigurationTextLast\":\"CurrentConfigurationTextLast_qLMLZ\",\"ant-modal-header\":\"ant-modal-header_AnQva\",\"ant-modal-content\":\"ant-modal-content_O6u0K\",\"ant-modal-footer\":\"ant-modal-footer_jLIgJ\",\"ant-message-notice-content\":\"ant-message-notice-content_jq5G5\",\"ant-tooltip-inner\":\"ant-tooltip-inner_R7Hmt\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DatePickerContainer\":\"DatePickerContainer_M4a-j\",\"HistoryOutlinedIcon\":\"HistoryOutlinedIcon_hYIdc\",\"DatePicker\":\"DatePicker_hBCs9\",\"DbGrowthChartHeading\":\"DbGrowthChartHeading_+F6X6\",\"DbGrowthChartHeader\":\"DbGrowthChartHeader_FIOFD\",\"ChartTip\":\"ChartTip_taXI3\",\"ant-modal-header\":\"ant-modal-header_i3FQJ\",\"ant-modal-content\":\"ant-modal-content_xMWKf\",\"ant-modal-footer\":\"ant-modal-footer_Pcb7e\",\"ant-message-notice-content\":\"ant-message-notice-content_IHQGu\",\"ant-tooltip-inner\":\"ant-tooltip-inner_2dOH4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AddServiceCreateDatastoreStepContainer\":\"AddServiceCreateDatastoreStepContainer_Iyw6q\",\"AddServiceCreateDatastoreStepItemGroup\":\"AddServiceCreateDatastoreStepItemGroup_Tx7RD\",\"AddServiceCreateDatastoreStepItem\":\"AddServiceCreateDatastoreStepItem_w6O13\",\"AddServiceCreateDatastoreStepItemBig\":\"AddServiceCreateDatastoreStepItemBig_pWBzk\",\"AddServiceCreateDatastoreDivider\":\"AddServiceCreateDatastoreDivider_vHhvH\",\"AddServiceCreateDatastorePricing\":\"AddServiceCreateDatastorePricing_NTvGB\",\"ant-modal-header\":\"ant-modal-header_i8eOW\",\"ant-modal-content\":\"ant-modal-content_iT0x8\",\"ant-modal-footer\":\"ant-modal-footer_ccvzr\",\"ant-message-notice-content\":\"ant-message-notice-content_kCmx4\",\"ant-tooltip-inner\":\"ant-tooltip-inner_z9sh4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"CardContentAvailabilityZoneMulti\":\"CardContentAvailabilityZoneMulti_pesme\",\"CardContentAvailabilityZoneMultiTitle\":\"CardContentAvailabilityZoneMultiTitle_0IS9m\",\"CardContentAvailabilityZoneMultiTitleSelect\":\"CardContentAvailabilityZoneMultiTitleSelect_Pte09\",\"CardContentAvailabilityZoneMultiRadioGroup\":\"CardContentAvailabilityZoneMultiRadioGroup_ASCbC\",\"CardContentAvailabilityZoneMultiSelect\":\"CardContentAvailabilityZoneMultiSelect_ZHee8\",\"ant-modal-header\":\"ant-modal-header_5IvNx\",\"ant-modal-content\":\"ant-modal-content_xi2Vo\",\"ant-modal-footer\":\"ant-modal-footer_lziP3\",\"ant-message-notice-content\":\"ant-message-notice-content_I+snO\",\"ant-tooltip-inner\":\"ant-tooltip-inner_Lzr0s\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppLabeledColComponent\":\"AppLabeledColComponent_oNarB\",\"AppLabeledRowComponent\":\"AppLabeledRowComponent_4EhlV\",\"AppLabeledComponentLabelSoft\":\"AppLabeledComponentLabelSoft_oSDXj\",\"AppLabeledComponentLabel\":\"AppLabeledComponentLabel_9PYPI\",\"AppLabeledComponentChildren\":\"AppLabeledComponentChildren_O4cyZ\",\"ant-modal-header\":\"ant-modal-header_ATs8J\",\"ant-modal-content\":\"ant-modal-content_iu1DN\",\"ant-modal-footer\":\"ant-modal-footer_SUfAR\",\"ant-message-notice-content\":\"ant-message-notice-content_Hwwj1\",\"ant-tooltip-inner\":\"ant-tooltip-inner_CyC8Z\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppRangePickerCustomSelected\":\"AppRangePickerCustomSelected_XLkup\",\"AppRangePickerExtraFooter\":\"AppRangePickerExtraFooter_8cO5x\",\"AppRangePickerRadio\":\"AppRangePickerRadio_WfJbU\",\"ant-modal-header\":\"ant-modal-header_vMNjq\",\"ant-modal-content\":\"ant-modal-content_OdiVI\",\"ant-modal-footer\":\"ant-modal-footer_IkJb7\",\"ant-message-notice-content\":\"ant-message-notice-content_mA-R5\",\"ant-tooltip-inner\":\"ant-tooltip-inner_0PtqE\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppChart\":\"AppChart_7UKVP\",\"AppChartNoBorder\":\"AppChartNoBorder_gpsH6\",\"AppChartCollapse\":\"AppChartCollapse_kHjqJ\",\"AppChartEmptyMessage\":\"AppChartEmptyMessage_h7gCs\",\"AppChartEmptyHeader\":\"AppChartEmptyHeader_nX+mP\",\"AppChartEmpty\":\"AppChartEmpty_goC+Y\",\"DatabaseAppChartHeading\":\"DatabaseAppChartHeading_djX13\",\"ant-modal-header\":\"ant-modal-header_O85RY\",\"ant-modal-content\":\"ant-modal-content_4pn65\",\"ant-modal-footer\":\"ant-modal-footer_BB+ya\",\"ant-message-notice-content\":\"ant-message-notice-content_bSJpS\",\"ant-tooltip-inner\":\"ant-tooltip-inner_Mh8W4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"VpcListOptions\":\"VpcListOptions_RamNV\",\"VpcDropdownMenu\":\"VpcDropdownMenu_--sCl\",\"ant-modal-header\":\"ant-modal-header_J0rAf\",\"ant-modal-content\":\"ant-modal-content_BR03g\",\"ant-modal-footer\":\"ant-modal-footer_p2Hl1\",\"ant-message-notice-content\":\"ant-message-notice-content_LjO6G\",\"ant-tooltip-inner\":\"ant-tooltip-inner_5NAp8\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DuplicateDbParametersPopoverButton\":\"DuplicateDbParametersPopoverButton_G7l76\",\"DbParametersActionButton\":\"DbParametersActionButton_F1SXh\",\"ant-modal-header\":\"ant-modal-header_yA5iW\",\"ant-modal-content\":\"ant-modal-content_fI6ZE\",\"ant-modal-footer\":\"ant-modal-footer_hYRHb\",\"ant-message-notice-content\":\"ant-message-notice-content_dx9Uw\",\"ant-tooltip-inner\":\"ant-tooltip-inner_hNXEK\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DataStoreOverviewServicesStateContent\":\"DataStoreOverviewServicesStateContent_Q3a8Y\",\"DataStoreOverviewServicesStateColumns\":\"DataStoreOverviewServicesStateColumns_W-ziu\",\"DataStoreOverviewServicesStateLink\":\"DataStoreOverviewServicesStateLink_6S9Gh\",\"DataStoreOverviewServicesStateIconOk\":\"DataStoreOverviewServicesStateIconOk_tn2mD\",\"DataStoreOverviewServicesStateIconError\":\"DataStoreOverviewServicesStateIconError_OnyzA\",\"DataStoreOverviewServicesStateIconWarning\":\"DataStoreOverviewServicesStateIconWarning_rmtee\",\"ant-modal-header\":\"ant-modal-header_fZ57K\",\"ant-modal-content\":\"ant-modal-content_FcRzY\",\"ant-modal-footer\":\"ant-modal-footer_vjwSv\",\"ant-message-notice-content\":\"ant-message-notice-content_-aFtH\",\"ant-tooltip-inner\":\"ant-tooltip-inner_hsUj4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DbDatabaseOptionsColumn\":\"DbDatabaseOptionsColumn_cSSRc\",\"DbDatabaseLabel\":\"DbDatabaseLabel_ZN3ul\",\"DbDatabaseAlert\":\"DbDatabaseAlert_4aLJN\",\"ant-modal-header\":\"ant-modal-header_uyqgd\",\"ant-modal-content\":\"ant-modal-content_am2TG\",\"ant-modal-footer\":\"ant-modal-footer_2pdhz\",\"ant-message-notice-content\":\"ant-message-notice-content_ZZwXl\",\"ant-tooltip-inner\":\"ant-tooltip-inner_r-JxU\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"WizardFormConfigurationStep2RegionLabel\":\"WizardFormConfigurationStep2RegionLabel_6PbvW\",\"ProviderRadioButton\":\"ProviderRadioButton_gLh6I\",\"ProviderLogo\":\"ProviderLogo_ekEI3\",\"SelectedCloudProvider\":\"SelectedCloudProvider_tQVCI\",\"WizardFormConfigurationStep2RegionFlag\":\"WizardFormConfigurationStep2RegionFlag_Yhv2V\",\"ant-modal-header\":\"ant-modal-header_18Blc\",\"ant-modal-content\":\"ant-modal-content_QcwoP\",\"ant-modal-footer\":\"ant-modal-footer_KUQgC\",\"ant-message-notice-content\":\"ant-message-notice-content_7GJYE\",\"ant-tooltip-inner\":\"ant-tooltip-inner_AXyrI\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Organizations\":\"Organizations_9BN6N\",\"OrganizationsHeaderButton\":\"OrganizationsHeaderButton_73lLi\",\"OrganizationsTable\":\"OrganizationsTable_5sT+i\",\"MembersTag\":\"MembersTag_oNMJr\",\"ant-modal-header\":\"ant-modal-header_I3ReL\",\"ant-modal-content\":\"ant-modal-content_wuxiS\",\"ant-modal-footer\":\"ant-modal-footer_wQ4qn\",\"ant-message-notice-content\":\"ant-message-notice-content_Iibur\",\"ant-tooltip-inner\":\"ant-tooltip-inner_awYil\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppHeaderNotifications\":\"AppHeaderNotifications_b0Yr9\",\"AppHeaderNotificationsBadge\":\"AppHeaderNotificationsBadge_jy0J3\",\"AppHeaderNotificationsTitle\":\"AppHeaderNotificationsTitle_5LDx4\",\"AppHeaderNotificationsDivider\":\"AppHeaderNotificationsDivider_eX0aC\",\"AppHeaderNotificationsMenu\":\"AppHeaderNotificationsMenu_LbZk4\",\"ant-modal-header\":\"ant-modal-header_3+hCZ\",\"ant-modal-content\":\"ant-modal-content_x96Hc\",\"ant-modal-footer\":\"ant-modal-footer_h-QtA\",\"ant-message-notice-content\":\"ant-message-notice-content_L1KRn\",\"ant-tooltip-inner\":\"ant-tooltip-inner_SZ33d\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"HaProxyLbCompareDashboard\":\"HaProxyLbCompareDashboard_0SBn8\",\"ant-modal-header\":\"ant-modal-header_bTPsg\",\"ant-modal-content\":\"ant-modal-content_VS58I\",\"ant-modal-footer\":\"ant-modal-footer_gN0CL\",\"ant-message-notice-content\":\"ant-message-notice-content_Tkv9x\",\"ant-tooltip-inner\":\"ant-tooltip-inner_i7swM\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"CopyToClipboardText\":\"CopyToClipboardText_xvlbi\",\"CopyToClipboardTextNowrap\":\"CopyToClipboardTextNowrap_c9yUS\",\"CopyToClipboardIcon\":\"CopyToClipboardIcon_hjx9o\",\"ant-modal-header\":\"ant-modal-header_0YN6K\",\"ant-modal-content\":\"ant-modal-content_XHPXy\",\"ant-modal-footer\":\"ant-modal-footer_ZBduT\",\"ant-message-notice-content\":\"ant-message-notice-content_kuwbh\",\"ant-tooltip-inner\":\"ant-tooltip-inner_DubYr\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"SmallContainer\":\"SmallContainer_hxcsq\",\"ant-modal-header\":\"ant-modal-header_dahzd\",\"ant-modal-content\":\"ant-modal-content_g-vkZ\",\"ant-modal-footer\":\"ant-modal-footer_RTuyO\",\"ant-message-notice-content\":\"ant-message-notice-content_2IrVl\",\"ant-tooltip-inner\":\"ant-tooltip-inner_Q8D2s\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"FilterPopoverContent\":\"FilterPopoverContent_wrtE8\",\"FilterInput\":\"FilterInput_pyQxE\",\"CheckboxStyle\":\"CheckboxStyle_8o2qi\",\"TagsHeadingStyle\":\"TagsHeadingStyle_LDcXN\",\"ant-modal-header\":\"ant-modal-header_rFI3P\",\"ant-modal-content\":\"ant-modal-content_QKT+C\",\"ant-modal-footer\":\"ant-modal-footer_N5xYt\",\"ant-message-notice-content\":\"ant-message-notice-content_9pLU8\",\"ant-tooltip-inner\":\"ant-tooltip-inner_QciTP\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DbParametersHeader\":\"DbParametersHeader_yWK84\",\"DbParametersTitle\":\"DbParametersTitle_UXyCo\",\"DbParametersTable\":\"DbParametersTable_kxuy0\",\"ant-modal-header\":\"ant-modal-header_dMDmg\",\"ant-modal-content\":\"ant-modal-content_EsKaq\",\"ant-modal-footer\":\"ant-modal-footer_DdkOO\",\"ant-message-notice-content\":\"ant-message-notice-content_Sk-1d\",\"ant-tooltip-inner\":\"ant-tooltip-inner_NTSZd\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"QueryStatsRadio\":\"QueryStatsRadio_kUNAo\",\"QueryStatsExpanded\":\"QueryStatsExpanded_9u0ww\",\"QueryStatsHeader\":\"QueryStatsHeader_vZa3H\",\"ant-modal-header\":\"ant-modal-header_boO4t\",\"ant-modal-content\":\"ant-modal-content_J7rIO\",\"ant-modal-footer\":\"ant-modal-footer_0KKhR\",\"ant-message-notice-content\":\"ant-message-notice-content_RK7w0\",\"ant-tooltip-inner\":\"ant-tooltip-inner_n9aUt\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DataStoreOverview\":\"DataStoreOverview_ojwD9\",\"DataStoreOverviewSpace\":\"DataStoreOverviewSpace_ErzAz\",\"ant-modal-header\":\"ant-modal-header_j9hzy\",\"ant-modal-content\":\"ant-modal-content_6kaiA\",\"ant-modal-footer\":\"ant-modal-footer_SkTz9\",\"ant-message-notice-content\":\"ant-message-notice-content_bbKUH\",\"ant-tooltip-inner\":\"ant-tooltip-inner_YwRlu\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppFormTag\":\"AppFormTag_--j4o\",\"AppFormTagSmall\":\"AppFormTagSmall_WxDZa\",\"AppTagRadius\":\"AppTagRadius_j76SE\",\"ant-modal-header\":\"ant-modal-header_-mSZR\",\"ant-modal-content\":\"ant-modal-content_iGFWi\",\"ant-modal-footer\":\"ant-modal-footer_ixCBW\",\"ant-message-notice-content\":\"ant-message-notice-content_Kt5CX\",\"ant-tooltip-inner\":\"ant-tooltip-inner_qj4Le\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DatastoreScalingCardVolumeInfo\":\"DatastoreScalingCardVolumeInfo_H6+bH\",\"DatastoreScalingCardVolumeRow\":\"DatastoreScalingCardVolumeRow_Vcffo\",\"DatastoreScalingCardVolumeCol\":\"DatastoreScalingCardVolumeCol_MmrbJ\",\"DatastoreScalingCardVolumeCount\":\"DatastoreScalingCardVolumeCount_+2ZNZ\",\"ant-modal-header\":\"ant-modal-header_grtop\",\"ant-modal-content\":\"ant-modal-content_tfhlM\",\"ant-modal-footer\":\"ant-modal-footer_DSJZz\",\"ant-message-notice-content\":\"ant-message-notice-content_+wIJw\",\"ant-tooltip-inner\":\"ant-tooltip-inner_w2plG\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DatastoreScalingInfoCard\":\"DatastoreScalingInfoCard_59AhF\",\"DatastoreScalingInfoCardLogo\":\"DatastoreScalingInfoCardLogo_eViJk\",\"DatastoreScalingInfoCardRow\":\"DatastoreScalingInfoCardRow_6ErV8\",\"DatastoreScalingInfoCardName\":\"DatastoreScalingInfoCardName_Zc0FE\",\"ant-modal-header\":\"ant-modal-header_hOwVe\",\"ant-modal-content\":\"ant-modal-content_758MO\",\"ant-modal-footer\":\"ant-modal-footer_RAqeC\",\"ant-message-notice-content\":\"ant-message-notice-content_1irzU\",\"ant-tooltip-inner\":\"ant-tooltip-inner_ywLCn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ConnectionAssistantButton\":\"ConnectionAssistantButton_zjF+q\",\"ConnectionAssistantText\":\"ConnectionAssistantText_YBG8W\",\"ant-modal-header\":\"ant-modal-header_FpLCH\",\"ant-modal-content\":\"ant-modal-content_Viz4O\",\"ant-modal-footer\":\"ant-modal-footer_BPhxz\",\"ant-message-notice-content\":\"ant-message-notice-content_lpsxQ\",\"ant-tooltip-inner\":\"ant-tooltip-inner_xGxkJ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AddService\":\"AddService_JnpzK\",\"AddServiceVersions\":\"AddServiceVersions_w0x9M\",\"AddServiceVersion\":\"AddServiceVersion_bZ0qq\",\"AddServiceModalCIDRIcon\":\"AddServiceModalCIDRIcon_ZD7gi\",\"ant-modal-header\":\"ant-modal-header_ffyhN\",\"ant-modal-content\":\"ant-modal-content_rGxzj\",\"ant-modal-footer\":\"ant-modal-footer_y5pp4\",\"ant-message-notice-content\":\"ant-message-notice-content_VKOmE\",\"ant-tooltip-inner\":\"ant-tooltip-inner_6tpO9\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Members\":\"Members_ccNQP\",\"MembersHeaderButton\":\"MembersHeaderButton_256ID\",\"MembersTable\":\"MembersTable_ba-UG\",\"MembersTag\":\"MembersTag_Ibex2\",\"ant-modal-header\":\"ant-modal-header_cVz46\",\"ant-modal-content\":\"ant-modal-content_m1lrK\",\"ant-modal-footer\":\"ant-modal-footer_Rzmim\",\"ant-message-notice-content\":\"ant-message-notice-content_7EjxK\",\"ant-tooltip-inner\":\"ant-tooltip-inner_+pFSy\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppLayout\":\"AppLayout_suyHs\",\"AppLayoutContentFeedback\":\"AppLayoutContentFeedback_56Gim\",\"AppLayoutContentWrap\":\"AppLayoutContentWrap_tLhu5\",\"IconTextMargin4\":\"IconTextMargin4_hAnsB\",\"ant-modal-header\":\"ant-modal-header_OvAVg\",\"ant-modal-content\":\"ant-modal-content_W7yiY\",\"ant-modal-footer\":\"ant-modal-footer_6KrwT\",\"ant-message-notice-content\":\"ant-message-notice-content_3qoQM\",\"ant-tooltip-inner\":\"ant-tooltip-inner_Hjn1b\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ant-modal-header\":\"ant-modal-header_Gf4RR\",\"ant-modal-content\":\"ant-modal-content_sVTd7\",\"ant-modal-footer\":\"ant-modal-footer_xDl-B\",\"ant-message-notice-content\":\"ant-message-notice-content_2Rl+T\",\"ant-tooltip-inner\":\"ant-tooltip-inner_v6hKe\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppLabeledIconStatus\":\"AppLabeledIconStatus_tdM+J\",\"AppLabeledIconStatusIcon\":\"AppLabeledIconStatusIcon_VJq9V\",\"AppLabeledIconStatusLabel\":\"AppLabeledIconStatusLabel_tNZr2\",\"ant-modal-header\":\"ant-modal-header_G7WEL\",\"ant-modal-content\":\"ant-modal-content_ISDn1\",\"ant-modal-footer\":\"ant-modal-footer_BtYX4\",\"ant-message-notice-content\":\"ant-message-notice-content_6yY1Y\",\"ant-tooltip-inner\":\"ant-tooltip-inner_Wa5xV\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ButtonModalFormButton\":\"ButtonModalFormButton_q9QZ6\",\"ButtonModalFormButtonLeft\":\"ButtonModalFormButtonLeft_mLcoN\",\"ButtonModalFormButtonRight\":\"ButtonModalFormButtonRight_ccO9a\",\"ButtonModalFormTypeSimple\":\"ButtonModalFormTypeSimple_VR4p7\",\"ButtonModalForm\":\"ButtonModalForm_sei0y\",\"ant-modal-header\":\"ant-modal-header_MOszd\",\"ant-modal-content\":\"ant-modal-content_aK2zE\",\"ant-modal-footer\":\"ant-modal-footer_r9Jpi\",\"ant-message-notice-content\":\"ant-message-notice-content_wyUnT\",\"ant-tooltip-inner\":\"ant-tooltip-inner_hohY2\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppButton_text_small\":\"AppButton_text_small_KhKQX\",\"ant-modal-header\":\"ant-modal-header_UF0-L\",\"ant-modal-content\":\"ant-modal-content_h5xok\",\"ant-modal-footer\":\"ant-modal-footer_cjuDF\",\"ant-message-notice-content\":\"ant-message-notice-content_XoEBf\",\"ant-tooltip-inner\":\"ant-tooltip-inner_DJ+SB\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"PaymentMethodModalTitle\":\"PaymentMethodModalTitle_odN2x\",\"PaymentMethodModalCouponTitle\":\"PaymentMethodModalCouponTitle_-EokP\",\"PaymentMethodModalStatus\":\"PaymentMethodModalStatus_WYsaB\",\"PaymentMethodModalStatusDot\":\"PaymentMethodModalStatusDot_Fbga7\",\"PaymentMethodModalStatusDotGreen\":\"PaymentMethodModalStatusDotGreen_L77CN\",\"PaymentMethodModalStatusDotRed\":\"PaymentMethodModalStatusDotRed_aiG4H\",\"PaymentMethodModalCards\":\"PaymentMethodModalCards_AylEE\",\"ant-modal-header\":\"ant-modal-header_J3xqx\",\"ant-modal-content\":\"ant-modal-content_Re3Yj\",\"ant-modal-footer\":\"ant-modal-footer_3FuMQ\",\"ant-message-notice-content\":\"ant-message-notice-content_Af7lI\",\"ant-tooltip-inner\":\"ant-tooltip-inner_BSDsN\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppCodeCard\":\"AppCodeCard_uQLFx\",\"AppCodeCardCopyIcon\":\"AppCodeCardCopyIcon_wodQx\",\"AppCodeCardCol\":\"AppCodeCardCol_jAlIz\",\"ant-modal-header\":\"ant-modal-header_5q+ad\",\"ant-modal-content\":\"ant-modal-content_n2qzr\",\"ant-modal-footer\":\"ant-modal-footer_g9wbZ\",\"ant-message-notice-content\":\"ant-message-notice-content_QO5eA\",\"ant-tooltip-inner\":\"ant-tooltip-inner_g3pSn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"FirewallsCollapse\":\"FirewallsCollapse_gRMzm\",\"FirewallsCollapsePanel\":\"FirewallsCollapsePanel_QdMnz\",\"FirewallsOptionsColumn\":\"FirewallsOptionsColumn_hh51o\",\"FirewallsTable\":\"FirewallsTable_LkxjX\",\"ant-modal-header\":\"ant-modal-header_-Vjk9\",\"ant-modal-content\":\"ant-modal-content_ndsum\",\"ant-modal-footer\":\"ant-modal-footer_-D6Rc\",\"ant-message-notice-content\":\"ant-message-notice-content_gvIgM\",\"ant-tooltip-inner\":\"ant-tooltip-inner_+VrS8\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ServiceAccessConnectionInformation\":\"ServiceAccessConnectionInformation_PXl4W\",\"ServiceAccessConnectionInformationCode\":\"ServiceAccessConnectionInformationCode_o8-I-\",\"ServiceAccessConnectionInformationCodeContent\":\"ServiceAccessConnectionInformationCodeContent_UwY4G\",\"ant-modal-header\":\"ant-modal-header_TD+HX\",\"ant-modal-content\":\"ant-modal-content_34ZFf\",\"ant-modal-footer\":\"ant-modal-footer_+ZMV2\",\"ant-message-notice-content\":\"ant-message-notice-content_CC0u7\",\"ant-tooltip-inner\":\"ant-tooltip-inner_QZjAQ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"InstanceVolumeTypeFormCentered\":\"InstanceVolumeTypeFormCentered_xS3Qx\",\"InstanceVolumeTypeFormInputNumber\":\"InstanceVolumeTypeFormInputNumber_TU4Pc\",\"InstanceVolumeTypeForm\":\"InstanceVolumeTypeForm_T81a-\",\"InstanceVolumeTypeCol\":\"InstanceVolumeTypeCol_AWd8v\",\"ant-modal-header\":\"ant-modal-header_Hd-Kb\",\"ant-modal-content\":\"ant-modal-content_jBHko\",\"ant-modal-footer\":\"ant-modal-footer_5kD7-\",\"ant-message-notice-content\":\"ant-message-notice-content_BZSIe\",\"ant-tooltip-inner\":\"ant-tooltip-inner_wWB5s\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"BackupsModalSettings\":\"BackupsModalSettings_qqv6J\",\"BackupsModalSwitchText\":\"BackupsModalSwitchText_zHD57\",\"BackupsModalDatePicker\":\"BackupsModalDatePicker_qfdoe\",\"ant-modal-header\":\"ant-modal-header_LBKdx\",\"ant-modal-content\":\"ant-modal-content_YzLDt\",\"ant-modal-footer\":\"ant-modal-footer_rbxaC\",\"ant-message-notice-content\":\"ant-message-notice-content_Kc9vy\",\"ant-tooltip-inner\":\"ant-tooltip-inner_xWt2n\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppRadioGroupGrid\":\"AppRadioGroupGrid_xuRRt\",\"AppRadioGridButton\":\"AppRadioGridButton_ZxXgf\",\"AppRadioGridButtonLarge\":\"AppRadioGridButtonLarge_RSeNX\",\"ant-modal-header\":\"ant-modal-header_A7yGe\",\"ant-modal-content\":\"ant-modal-content_p3WID\",\"ant-modal-footer\":\"ant-modal-footer_S2S54\",\"ant-message-notice-content\":\"ant-message-notice-content_aCG4x\",\"ant-tooltip-inner\":\"ant-tooltip-inner_bXFRD\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"InstanceVolumeTypeFormCentered\":\"InstanceVolumeTypeFormCentered_dP7MG\",\"InstanceVolumeTypeFormInputNumber\":\"InstanceVolumeTypeFormInputNumber_zKea8\",\"InstanceVolumeTypeFormAlertBox\":\"InstanceVolumeTypeFormAlertBox_e6UxF\",\"ant-modal-header\":\"ant-modal-header_ouJT8\",\"ant-modal-content\":\"ant-modal-content_taDFq\",\"ant-modal-footer\":\"ant-modal-footer_0bZ1V\",\"ant-message-notice-content\":\"ant-message-notice-content_YyfnU\",\"ant-tooltip-inner\":\"ant-tooltip-inner_w0rvM\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Error404Base\":\"Error404Base_n8Vxt\",\"Error404Details\":\"Error404Details_iG7E4\",\"Error404DetailsTitle\":\"Error404DetailsTitle_fBIg1\",\"ant-modal-header\":\"ant-modal-header_X6hYL\",\"ant-modal-content\":\"ant-modal-content_Xqh+g\",\"ant-modal-footer\":\"ant-modal-footer_1wi2W\",\"ant-message-notice-content\":\"ant-message-notice-content_tpjko\",\"ant-tooltip-inner\":\"ant-tooltip-inner_3FkGD\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"UserMenu\":\"UserMenu_DKQIs\",\"UserMenuBadge\":\"UserMenuBadge_BIeO2\",\"UserMenuName\":\"UserMenuName_j1BIH\",\"ant-modal-header\":\"ant-modal-header_-bAbP\",\"ant-modal-content\":\"ant-modal-content_sB7z1\",\"ant-modal-footer\":\"ant-modal-footer_pS4YK\",\"ant-message-notice-content\":\"ant-message-notice-content_f4YHU\",\"ant-tooltip-inner\":\"ant-tooltip-inner_5tq-9\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ant-modal-header\":\"ant-modal-header_Qi1Wk\",\"ant-modal-content\":\"ant-modal-content_dE7yM\",\"ant-modal-footer\":\"ant-modal-footer_zHgty\",\"ant-message-notice-content\":\"ant-message-notice-content_gKORK\",\"ant-tooltip-inner\":\"ant-tooltip-inner_Gt1MR\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppTableHeader\":\"AppTableHeader_3bXvl\",\"ant-modal-header\":\"ant-modal-header_Ch1RU\",\"ant-modal-content\":\"ant-modal-content_bD8H0\",\"ant-modal-footer\":\"ant-modal-footer_4tJSy\",\"ant-message-notice-content\":\"ant-message-notice-content_7c7zR\",\"ant-tooltip-inner\":\"ant-tooltip-inner_RwmgA\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Account\":\"Account_MUM46\",\"AccountTabs\":\"AccountTabs_oTQYh\",\"ant-modal-header\":\"ant-modal-header_J51wv\",\"ant-modal-content\":\"ant-modal-content_IlOx0\",\"ant-modal-footer\":\"ant-modal-footer_XgnPn\",\"ant-message-notice-content\":\"ant-message-notice-content_BjOQh\",\"ant-tooltip-inner\":\"ant-tooltip-inner_ljOTo\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"CcxLogo\":\"CcxLogo_QP-1z\",\"ant-modal-header\":\"ant-modal-header_I4kTK\",\"ant-modal-content\":\"ant-modal-content_7GMwV\",\"ant-modal-footer\":\"ant-modal-footer_HWmfS\",\"ant-message-notice-content\":\"ant-message-notice-content_yMUQd\",\"ant-tooltip-inner\":\"ant-tooltip-inner_m0pHG\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"PromoCodeCardDetails\":\"PromoCodeCardDetails_sL8b3\",\"ant-modal-header\":\"ant-modal-header_CXlhW\",\"ant-modal-content\":\"ant-modal-content_2iXxs\",\"ant-modal-footer\":\"ant-modal-footer_w3Lns\",\"ant-message-notice-content\":\"ant-message-notice-content_iJsNC\",\"ant-tooltip-inner\":\"ant-tooltip-inner_2XDPV\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"PaymentMethod\":\"PaymentMethod_rI+Jc\",\"PaymentMethodLogo\":\"PaymentMethodLogo_Wn5d1\",\"ant-modal-header\":\"ant-modal-header_NIerz\",\"ant-modal-content\":\"ant-modal-content_JkWT7\",\"ant-modal-footer\":\"ant-modal-footer_Dg9nA\",\"ant-message-notice-content\":\"ant-message-notice-content_Gbwho\",\"ant-tooltip-inner\":\"ant-tooltip-inner_KJHLR\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AuthorizationTable\":\"AuthorizationTable_Y3C3z\",\"ant-modal-header\":\"ant-modal-header_yylD4\",\"ant-modal-content\":\"ant-modal-content_lcFMF\",\"ant-modal-footer\":\"ant-modal-footer_UXn7U\",\"ant-message-notice-content\":\"ant-message-notice-content_6HDQ3\",\"ant-tooltip-inner\":\"ant-tooltip-inner_VrWnM\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"MonitorInstallationSpinner\":\"MonitorInstallationSpinner_35CPi\",\"MonitorInstallationMessage\":\"MonitorInstallationMessage_og8Sj\",\"ant-modal-header\":\"ant-modal-header_GHmNZ\",\"ant-modal-content\":\"ant-modal-content_ENI4q\",\"ant-modal-footer\":\"ant-modal-footer_3VQa2\",\"ant-message-notice-content\":\"ant-message-notice-content_DgcLR\",\"ant-tooltip-inner\":\"ant-tooltip-inner_2KN3r\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppCreateButtonCreateVpcLink\":\"AppCreateButtonCreateVpcLink_kHwKv\",\"AppCreateButtonButton\":\"AppCreateButtonButton_ONSI6\",\"ant-modal-header\":\"ant-modal-header_u1tLh\",\"ant-modal-content\":\"ant-modal-content_MPEbv\",\"ant-modal-footer\":\"ant-modal-footer_mPBIK\",\"ant-message-notice-content\":\"ant-message-notice-content_Y4w1d\",\"ant-tooltip-inner\":\"ant-tooltip-inner_WkDxG\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"PortOptions\":\"PortOptions_efHRS\",\"PortsTable\":\"PortsTable_ELbLG\",\"ant-modal-header\":\"ant-modal-header_MkZkr\",\"ant-modal-content\":\"ant-modal-content_7rSwp\",\"ant-modal-footer\":\"ant-modal-footer_e6M95\",\"ant-message-notice-content\":\"ant-message-notice-content_6ezc-\",\"ant-tooltip-inner\":\"ant-tooltip-inner_NfS0h\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"SecretText\":\"SecretText_lvKFP\",\"SecretTextDisplay\":\"SecretTextDisplay_vudpu\",\"ant-modal-header\":\"ant-modal-header_t0uv8\",\"ant-modal-content\":\"ant-modal-content_48QWG\",\"ant-modal-footer\":\"ant-modal-footer_2jaKM\",\"ant-message-notice-content\":\"ant-message-notice-content_KP0Zi\",\"ant-tooltip-inner\":\"ant-tooltip-inner_47qRH\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ServiceInstanceFormat\":\"ServiceInstanceFormat_J4UR4\",\"ServiceInstanceFormat_instance\":\"ServiceInstanceFormat_instance_uzhFm\",\"ant-modal-header\":\"ant-modal-header_cHjP+\",\"ant-modal-content\":\"ant-modal-content_4izkG\",\"ant-modal-footer\":\"ant-modal-footer_6OP19\",\"ant-message-notice-content\":\"ant-message-notice-content_R0UwP\",\"ant-tooltip-inner\":\"ant-tooltip-inner_02F3H\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DataStoreSettingsMaintenanceDescription\":\"DataStoreSettingsMaintenanceDescription_ILFnX\",\"DataStoreSettingsEmailNotificationLabel\":\"DataStoreSettingsEmailNotificationLabel_I6swk\",\"ant-modal-header\":\"ant-modal-header_njfhw\",\"ant-modal-content\":\"ant-modal-content_E5q42\",\"ant-modal-footer\":\"ant-modal-footer_PYni5\",\"ant-message-notice-content\":\"ant-message-notice-content_XCHQp\",\"ant-tooltip-inner\":\"ant-tooltip-inner_P-a7-\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DatastoreEmailNotificationTags\":\"DatastoreEmailNotificationTags_X0hUH\",\"DatastoreEmailNotificationTagsError\":\"DatastoreEmailNotificationTagsError_EwSc-\",\"ant-modal-header\":\"ant-modal-header_8h64r\",\"ant-modal-content\":\"ant-modal-content_wv5vF\",\"ant-modal-footer\":\"ant-modal-footer_+tXQc\",\"ant-message-notice-content\":\"ant-message-notice-content_10wOX\",\"ant-tooltip-inner\":\"ant-tooltip-inner_-grOg\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DatastoreScalingStepHeader\":\"DatastoreScalingStepHeader_gqVUl\",\"DatastoreScalingStepHeaderInfo\":\"DatastoreScalingStepHeaderInfo_t8EBz\",\"DatastoreScalingStepHeaderSliderRow\":\"DatastoreScalingStepHeaderSliderRow_J7M4D\",\"ant-modal-header\":\"ant-modal-header_87qlV\",\"ant-modal-content\":\"ant-modal-content_lNACh\",\"ant-modal-footer\":\"ant-modal-footer_KhMDz\",\"ant-message-notice-content\":\"ant-message-notice-content_t5YJG\",\"ant-tooltip-inner\":\"ant-tooltip-inner_Qf5mF\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ConnectionAssistantFormStep2Title\":\"ConnectionAssistantFormStep2Title_+FF9I\",\"ConnectionAssistantFormStep2Select\":\"ConnectionAssistantFormStep2Select_CC-wk\",\"ant-modal-header\":\"ant-modal-header_R-km7\",\"ant-modal-content\":\"ant-modal-content_9C-62\",\"ant-modal-footer\":\"ant-modal-footer_OMczw\",\"ant-message-notice-content\":\"ant-message-notice-content_wEUc4\",\"ant-tooltip-inner\":\"ant-tooltip-inner_n08nu\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DeploymentDashboardHostSelect\":\"DeploymentDashboardHostSelect_2SgZB\",\"DeploymentDashboardTabs\":\"DeploymentDashboardTabs_rQuqD\",\"DeploymentDashboardExtraTabContent\":\"DeploymentDashboardExtraTabContent_DFBez\",\"DeploymentDashboardCustomTabBar\":\"DeploymentDashboardCustomTabBar_rmej9\",\"ant-modal-header\":\"ant-modal-header_4DDA2\",\"ant-modal-content\":\"ant-modal-content_7QhZ+\",\"ant-modal-footer\":\"ant-modal-footer_Y6RLq\",\"ant-message-notice-content\":\"ant-message-notice-content_REJPL\",\"ant-tooltip-inner\":\"ant-tooltip-inner_tWfgs\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"IncrementalBackups\":\"IncrementalBackups_xpEiF\",\"IncrementalBackupsTable\":\"IncrementalBackupsTable_MA3GW\",\"IncrementalBackupsActionsColumn\":\"IncrementalBackupsActionsColumn_5CylJ\",\"IncrementalBackupsExpandableTable\":\"IncrementalBackupsExpandableTable_SV3d+\",\"ant-spin-nested-loading\":\"ant-spin-nested-loading_9szMM\",\"ant-spin-container\":\"ant-spin-container_LFZVR\",\"ant-table-container\":\"ant-table-container_OWr2x\",\"ant-modal-header\":\"ant-modal-header_lR9DO\",\"ant-modal-content\":\"ant-modal-content_IK5CV\",\"ant-modal-footer\":\"ant-modal-footer_8uXeL\",\"ant-message-notice-content\":\"ant-message-notice-content_B7TsP\",\"ant-tooltip-inner\":\"ant-tooltip-inner_dC8SL\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"BackupColumns\":\"BackupColumns_R-Yli\",\"BackupColumnsLast\":\"BackupColumnsLast_fjtVx\",\"ant-modal-header\":\"ant-modal-header_pNmzR\",\"ant-modal-content\":\"ant-modal-content_fTe5W\",\"ant-modal-footer\":\"ant-modal-footer_8iJJt\",\"ant-message-notice-content\":\"ant-message-notice-content_FgNWI\",\"ant-tooltip-inner\":\"ant-tooltip-inner_VrHWE\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"BackupsActionsColumn\":\"BackupsActionsColumn_K6yo3\",\"BackupActionRestoreButton\":\"BackupActionRestoreButton_6s89C\",\"ant-modal-header\":\"ant-modal-header_TEQHt\",\"ant-modal-content\":\"ant-modal-content_wQWQL\",\"ant-modal-footer\":\"ant-modal-footer_OqgVG\",\"ant-message-notice-content\":\"ant-message-notice-content_1-6t+\",\"ant-tooltip-inner\":\"ant-tooltip-inner_nWZE5\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"IncrementalRadioOptions\":\"IncrementalRadioOptions_bOhpc\",\"AppFormSelect\":\"AppFormSelect_cr-pR\",\"ant-modal-header\":\"ant-modal-header_39M7i\",\"ant-modal-content\":\"ant-modal-content_g688l\",\"ant-modal-footer\":\"ant-modal-footer_kTTAf\",\"ant-message-notice-content\":\"ant-message-notice-content_JY4SJ\",\"ant-tooltip-inner\":\"ant-tooltip-inner_egoSy\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"BackupScheduleModal\":\"BackupScheduleModal_250di\",\"AppFormSelect\":\"AppFormSelect_Jh-dI\",\"ant-modal-header\":\"ant-modal-header_qF50q\",\"ant-modal-content\":\"ant-modal-content_IwjFD\",\"ant-modal-footer\":\"ant-modal-footer_mk1ej\",\"ant-message-notice-content\":\"ant-message-notice-content_ZgVsz\",\"ant-tooltip-inner\":\"ant-tooltip-inner_zzyF1\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"BackupsCollapse\":\"BackupsCollapse_PMB81\",\"BackupsCollapsePanel\":\"BackupsCollapsePanel_OQ8CF\",\"BackupsButtons\":\"BackupsButtons_7Dcn+\",\"DrawerFooterButtonsLeft\":\"DrawerFooterButtonsLeft_fvq5J\",\"DrawerFooterButtonsRight\":\"DrawerFooterButtonsRight_eLtzP\",\"IconTextMargin4\":\"IconTextMargin4_bhH2E\",\"BackupSettingsButton\":\"BackupSettingsButton_07A4u\",\"ant-modal-header\":\"ant-modal-header_kcT67\",\"ant-modal-content\":\"ant-modal-content_Aqk0u\",\"ant-modal-footer\":\"ant-modal-footer_o-gVV\",\"ant-message-notice-content\":\"ant-message-notice-content_2GBoz\",\"ant-tooltip-inner\":\"ant-tooltip-inner_a-UNj\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DatastoreLogs\":\"DatastoreLogs_PKV1k\",\"DatastoreLogsHeader\":\"DatastoreLogsHeader_4T46S\",\"DbLogsLabel\":\"DbLogsLabel_dsE0-\",\"DatePickerContainer\":\"DatePickerContainer_H0Da5\",\"HistoryOutlinedIcon\":\"HistoryOutlinedIcon_GL86x\",\"DatePicker\":\"DatePicker_eAWjv\",\"ant-modal-header\":\"ant-modal-header_bQFU+\",\"ant-modal-content\":\"ant-modal-content_aZwn3\",\"ant-modal-footer\":\"ant-modal-footer_pG4Es\",\"ant-message-notice-content\":\"ant-message-notice-content_-c1SZ\",\"ant-tooltip-inner\":\"ant-tooltip-inner_JErk9\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"InstanceSizeFormInstanceSize\":\"InstanceSizeFormInstanceSize_CcVsD\",\"InstanceSizeFormAlert\":\"InstanceSizeFormAlert_1ebV2\",\"ant-modal-header\":\"ant-modal-header_VCmrL\",\"ant-modal-content\":\"ant-modal-content_L33y7\",\"ant-modal-footer\":\"ant-modal-footer_mROra\",\"ant-message-notice-content\":\"ant-message-notice-content_3yqcD\",\"ant-tooltip-inner\":\"ant-tooltip-inner_IY9-X\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"OrganizationModalInput\":\"OrganizationModalInput_3NUNx\",\"ant-modal-header\":\"ant-modal-header_-zemE\",\"ant-modal-content\":\"ant-modal-content_VJe1x\",\"ant-modal-footer\":\"ant-modal-footer_dvTjn\",\"ant-message-notice-content\":\"ant-message-notice-content_8ZQrH\",\"ant-tooltip-inner\":\"ant-tooltip-inner_+46CQ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AddNewMemberModalInput\":\"AddNewMemberModalInput_NwrqP\",\"MemberRoleSelect\":\"MemberRoleSelect_b8p3o\",\"ant-modal-header\":\"ant-modal-header_SeDzl\",\"ant-modal-content\":\"ant-modal-content_IGYmC\",\"ant-modal-footer\":\"ant-modal-footer_FajSY\",\"ant-message-notice-content\":\"ant-message-notice-content_7Khfj\",\"ant-tooltip-inner\":\"ant-tooltip-inner_QACeG\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppContent\":\"AppContent_qqMfb\",\"AppContentContainer\":\"AppContentContainer_xul4d\",\"ant-modal-header\":\"ant-modal-header_TN69W\",\"ant-modal-content\":\"ant-modal-content_zwuYS\",\"ant-modal-footer\":\"ant-modal-footer_xNlcw\",\"ant-message-notice-content\":\"ant-message-notice-content_R-i8u\",\"ant-tooltip-inner\":\"ant-tooltip-inner_YHQQs\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Footer\":\"Footer_3nikN\",\"FooterTop\":\"FooterTop_NPx-r\",\"ant-modal-header\":\"ant-modal-header_u7rYj\",\"ant-modal-content\":\"ant-modal-content_t0oQJ\",\"ant-modal-footer\":\"ant-modal-footer_T3PbP\",\"ant-message-notice-content\":\"ant-message-notice-content_XJ-Ys\",\"ant-tooltip-inner\":\"ant-tooltip-inner_cLBuD\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"FloatingContent\":\"FloatingContent_8Ad9T\",\"FloatingContent--placement-topLeft\":\"FloatingContent--placement-topLeft_sJDUL\",\"FloatingContent--placement-top\":\"FloatingContent--placement-top_V2LoG\",\"FloatingContent--placement-topRight\":\"FloatingContent--placement-topRight_Kchls\",\"FloatingContent--placement-right\":\"FloatingContent--placement-right_VnLlP\",\"FloatingContentPlacementBottomRight\":\"FloatingContentPlacementBottomRight_VcRKE\",\"FloatingContent--placement-bottom\":\"FloatingContent--placement-bottom_zY9op\",\"FloatingContentPlacementBottomLeft\":\"FloatingContentPlacementBottomLeft_MOOmI\",\"FloatingContent--placement-left\":\"FloatingContent--placement-left_WxN7m\",\"ant-modal-header\":\"ant-modal-header_cHUET\",\"ant-modal-content\":\"ant-modal-content_yZsXO\",\"ant-modal-footer\":\"ant-modal-footer_u9qU5\",\"ant-message-notice-content\":\"ant-message-notice-content_q2GU6\",\"ant-tooltip-inner\":\"ant-tooltip-inner_qmM0F\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppContentContainerAlert\":\"AppContentContainerAlert_SXYGQ\",\"ant-modal-header\":\"ant-modal-header_ejyOs\",\"ant-modal-content\":\"ant-modal-content_S+h0N\",\"ant-modal-footer\":\"ant-modal-footer_stmC3\",\"ant-message-notice-content\":\"ant-message-notice-content_4o0aw\",\"ant-tooltip-inner\":\"ant-tooltip-inner_OqI6e\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"LazyLoaderMargin\":\"LazyLoaderMargin_dLvQu\",\"ant-modal-header\":\"ant-modal-header_TUjSf\",\"ant-modal-content\":\"ant-modal-content_TL6jF\",\"ant-modal-footer\":\"ant-modal-footer_aND1l\",\"ant-message-notice-content\":\"ant-message-notice-content_5WN8-\",\"ant-tooltip-inner\":\"ant-tooltip-inner_p2pR+\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DeploymentDashboardOptionsChartSetRadio\":\"DeploymentDashboardOptionsChartSetRadio_XIS24\",\"ant-modal-header\":\"ant-modal-header_1+jAL\",\"ant-modal-content\":\"ant-modal-content_Jr-3P\",\"ant-modal-footer\":\"ant-modal-footer_tnBlX\",\"ant-message-notice-content\":\"ant-message-notice-content_52GP7\",\"ant-tooltip-inner\":\"ant-tooltip-inner_RxwNZ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ant-modal-header\":\"ant-modal-header_I4D3v\",\"ant-modal-content\":\"ant-modal-content_OM7Yw\",\"ant-modal-footer\":\"ant-modal-footer_3Pcla\",\"ant-message-notice-content\":\"ant-message-notice-content_2eQs8\",\"ant-tooltip-inner\":\"ant-tooltip-inner_NBIBz\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ant-modal-header\":\"ant-modal-header_OavRv\",\"ant-modal-content\":\"ant-modal-content_xAAoh\",\"ant-modal-footer\":\"ant-modal-footer_45dsS\",\"ant-message-notice-content\":\"ant-message-notice-content_iUjbe\",\"ant-tooltip-inner\":\"ant-tooltip-inner_-6xzj\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ant-modal-header\":\"ant-modal-header_+YTBg\",\"ant-modal-content\":\"ant-modal-content_NOaum\",\"ant-modal-footer\":\"ant-modal-footer_czIne\",\"ant-message-notice-content\":\"ant-message-notice-content_G74d3\",\"ant-tooltip-inner\":\"ant-tooltip-inner_L-u56\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ant-modal-header\":\"ant-modal-header_Gth-W\",\"ant-modal-content\":\"ant-modal-content_8jgAV\",\"ant-modal-footer\":\"ant-modal-footer_9b50H\",\"ant-message-notice-content\":\"ant-message-notice-content_CZwmH\",\"ant-tooltip-inner\":\"ant-tooltip-inner_5dp8d\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppLoadingContainer\":\"AppLoadingContainer_LMPVg\",\"ant-modal-header\":\"ant-modal-header_Z-DB-\",\"ant-modal-content\":\"ant-modal-content_N1nec\",\"ant-modal-footer\":\"ant-modal-footer_QAOjZ\",\"ant-message-notice-content\":\"ant-message-notice-content_45Jds\",\"ant-tooltip-inner\":\"ant-tooltip-inner_0K9ju\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ant-modal-header\":\"ant-modal-header_9Hnua\",\"ant-modal-content\":\"ant-modal-content_gP9ml\",\"ant-modal-footer\":\"ant-modal-footer_AtZfC\",\"ant-message-notice-content\":\"ant-message-notice-content_OTd2X\",\"ant-tooltip-inner\":\"ant-tooltip-inner_bdOz+\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ant-modal-header\":\"ant-modal-header_Ty604\",\"ant-modal-content\":\"ant-modal-content_o2LYs\",\"ant-modal-footer\":\"ant-modal-footer_gOJzz\",\"ant-message-notice-content\":\"ant-message-notice-content_f9T0Q\",\"ant-tooltip-inner\":\"ant-tooltip-inner_FOlAF\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DbCompareDashboardCol\":\"DbCompareDashboardCol_WMlIl\",\"ant-modal-header\":\"ant-modal-header_uYPjF\",\"ant-modal-content\":\"ant-modal-content_bNcVP\",\"ant-modal-footer\":\"ant-modal-footer_+cnOq\",\"ant-message-notice-content\":\"ant-message-notice-content_Jrr0Z\",\"ant-tooltip-inner\":\"ant-tooltip-inner_Vq5p0\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"LbCompareDashboardCol\":\"LbCompareDashboardCol_tu5Qp\",\"ant-modal-header\":\"ant-modal-header_2+21l\",\"ant-modal-content\":\"ant-modal-content_wcVgp\",\"ant-modal-footer\":\"ant-modal-footer_KR4uK\",\"ant-message-notice-content\":\"ant-message-notice-content_f9cED\",\"ant-tooltip-inner\":\"ant-tooltip-inner_ojaPc\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"StretchedClick\":\"StretchedClick_IY8tQ\",\"ant-modal-header\":\"ant-modal-header_SvIC2\",\"ant-modal-content\":\"ant-modal-content_-IRPf\",\"ant-modal-footer\":\"ant-modal-footer_zN7bh\",\"ant-message-notice-content\":\"ant-message-notice-content_Du7NF\",\"ant-tooltip-inner\":\"ant-tooltip-inner_+5Nyl\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Hoverable\":\"Hoverable_5pgoO\",\"HoverableIcon\":\"HoverableIcon_7QkE1\",\"ant-modal-header\":\"ant-modal-header_BA90-\",\"ant-modal-content\":\"ant-modal-content_eB7x1\",\"ant-modal-footer\":\"ant-modal-footer_a8f2P\",\"ant-message-notice-content\":\"ant-message-notice-content_TNNyG\",\"ant-tooltip-inner\":\"ant-tooltip-inner_8keYL\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"IconLabelStatusError\":\"IconLabelStatusError_+rMCF\",\"ant-modal-header\":\"ant-modal-header_JkYop\",\"ant-modal-content\":\"ant-modal-content_4YMVO\",\"ant-modal-footer\":\"ant-modal-footer_fxaZw\",\"ant-message-notice-content\":\"ant-message-notice-content_qWW0t\",\"ant-tooltip-inner\":\"ant-tooltip-inner_q6063\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"IconLabelStatusOk\":\"IconLabelStatusOk_vZlPC\",\"ant-modal-header\":\"ant-modal-header_y07IH\",\"ant-modal-content\":\"ant-modal-content_fhmB8\",\"ant-modal-footer\":\"ant-modal-footer_Z6D+j\",\"ant-message-notice-content\":\"ant-message-notice-content_h1HpD\",\"ant-tooltip-inner\":\"ant-tooltip-inner_PJ8ts\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ant-modal-header\":\"ant-modal-header_apHRs\",\"ant-modal-content\":\"ant-modal-content_ZpUHC\",\"ant-modal-footer\":\"ant-modal-footer_LXABo\",\"ant-message-notice-content\":\"ant-message-notice-content_CJyut\",\"ant-tooltip-inner\":\"ant-tooltip-inner_Z1iSc\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ChangePaymentMethod\":\"ChangePaymentMethod_yB8O-\",\"ant-modal-header\":\"ant-modal-header_IgTMy\",\"ant-modal-content\":\"ant-modal-content_v187d\",\"ant-modal-footer\":\"ant-modal-footer_aCetQ\",\"ant-message-notice-content\":\"ant-message-notice-content_j3XLy\",\"ant-tooltip-inner\":\"ant-tooltip-inner_q5SK8\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppFlagIcon\":\"AppFlagIcon_DaiTG\",\"ant-modal-header\":\"ant-modal-header_gFC2-\",\"ant-modal-content\":\"ant-modal-content_l31HK\",\"ant-modal-footer\":\"ant-modal-footer_ZEKfS\",\"ant-message-notice-content\":\"ant-message-notice-content_E2ZPf\",\"ant-tooltip-inner\":\"ant-tooltip-inner_07VQ5\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"BillingFormChildren\":\"BillingFormChildren_+lsKP\",\"ant-modal-header\":\"ant-modal-header_FTgxG\",\"ant-modal-content\":\"ant-modal-content_MpPyR\",\"ant-modal-footer\":\"ant-modal-footer_77Z8R\",\"ant-message-notice-content\":\"ant-message-notice-content_kq8DS\",\"ant-tooltip-inner\":\"ant-tooltip-inner_m1IbQ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppIcon\":\"AppIcon_Tgrya\",\"ant-modal-header\":\"ant-modal-header_nfPI9\",\"ant-modal-content\":\"ant-modal-content_NL65b\",\"ant-modal-footer\":\"ant-modal-footer_ck-tJ\",\"ant-message-notice-content\":\"ant-message-notice-content_tBBBL\",\"ant-tooltip-inner\":\"ant-tooltip-inner_ArSsG\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"CurrentBalance\":\"CurrentBalance_rn4Co\",\"ant-modal-header\":\"ant-modal-header_IyJIa\",\"ant-modal-content\":\"ant-modal-content_zWnA9\",\"ant-modal-footer\":\"ant-modal-footer_aVR0V\",\"ant-message-notice-content\":\"ant-message-notice-content_QB4AJ\",\"ant-tooltip-inner\":\"ant-tooltip-inner_9k6PG\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"CurrentBillingPeriod\":\"CurrentBillingPeriod_pncm5\",\"ant-modal-header\":\"ant-modal-header_Xe0L4\",\"ant-modal-content\":\"ant-modal-content_vdQPn\",\"ant-modal-footer\":\"ant-modal-footer_5Ksyh\",\"ant-message-notice-content\":\"ant-message-notice-content_3By2D\",\"ant-tooltip-inner\":\"ant-tooltip-inner_x3IZa\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppBorderedPanel\":\"AppBorderedPanel_dIp6R\",\"ant-modal-header\":\"ant-modal-header_K62MN\",\"ant-modal-content\":\"ant-modal-content_8OArh\",\"ant-modal-footer\":\"ant-modal-footer_muHM6\",\"ant-message-notice-content\":\"ant-message-notice-content_VtPD4\",\"ant-tooltip-inner\":\"ant-tooltip-inner_DtxMd\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AccountInfoSpace\":\"AccountInfoSpace_DK7bc\",\"ant-modal-header\":\"ant-modal-header_5r6C3\",\"ant-modal-content\":\"ant-modal-content_lec-L\",\"ant-modal-footer\":\"ant-modal-footer_cEx6H\",\"ant-message-notice-content\":\"ant-message-notice-content_fuHMX\",\"ant-tooltip-inner\":\"ant-tooltip-inner_Ah6Rw\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AuthorizationModalSecret\":\"AuthorizationModalSecret_slq3j\",\"ant-modal-header\":\"ant-modal-header_O4Ide\",\"ant-modal-content\":\"ant-modal-content_0WMVh\",\"ant-modal-footer\":\"ant-modal-footer_TLs9R\",\"ant-message-notice-content\":\"ant-message-notice-content_LH4eg\",\"ant-tooltip-inner\":\"ant-tooltip-inner_DUIay\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DataStoresEmpty\":\"DataStoresEmpty_klroi\",\"ant-modal-header\":\"ant-modal-header_KAWR9\",\"ant-modal-content\":\"ant-modal-content_bPnpT\",\"ant-modal-footer\":\"ant-modal-footer_prcGE\",\"ant-message-notice-content\":\"ant-message-notice-content_NEAGA\",\"ant-tooltip-inner\":\"ant-tooltip-inner_KfxzJ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ExpandableText\":\"ExpandableText_3uAOq\",\"ant-modal-header\":\"ant-modal-header_7N-ta\",\"ant-modal-content\":\"ant-modal-content_Gn4MX\",\"ant-modal-footer\":\"ant-modal-footer_CI5zk\",\"ant-message-notice-content\":\"ant-message-notice-content_THYpW\",\"ant-tooltip-inner\":\"ant-tooltip-inner_0anUE\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DatastoreJobStatusIndicator\":\"DatastoreJobStatusIndicator_Joptx\",\"ant-modal-header\":\"ant-modal-header_kuZ-T\",\"ant-modal-content\":\"ant-modal-content_f1VQC\",\"ant-modal-footer\":\"ant-modal-footer_Ip7X4\",\"ant-message-notice-content\":\"ant-message-notice-content_Rp6CD\",\"ant-tooltip-inner\":\"ant-tooltip-inner_Hcgqx\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"CloudProviderLogo\":\"CloudProviderLogo_6xmcc\",\"ant-modal-header\":\"ant-modal-header_VQw33\",\"ant-modal-content\":\"ant-modal-content_X6N91\",\"ant-modal-footer\":\"ant-modal-footer_catOH\",\"ant-message-notice-content\":\"ant-message-notice-content_HYMAU\",\"ant-tooltip-inner\":\"ant-tooltip-inner_vJplV\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ant-modal-header\":\"ant-modal-header_AZDL7\",\"ant-modal-content\":\"ant-modal-content_5Q6ET\",\"ant-modal-footer\":\"ant-modal-footer_J6RN4\",\"ant-message-notice-content\":\"ant-message-notice-content_pefun\",\"ant-tooltip-inner\":\"ant-tooltip-inner_OJytl\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ant-modal-header\":\"ant-modal-header_W6TmR\",\"ant-modal-content\":\"ant-modal-content_El7kq\",\"ant-modal-footer\":\"ant-modal-footer_znik0\",\"ant-message-notice-content\":\"ant-message-notice-content_4n+1L\",\"ant-tooltip-inner\":\"ant-tooltip-inner_q+Iuv\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"NoChartAvailable\":\"NoChartAvailable_-mTOY\",\"ant-modal-header\":\"ant-modal-header_EULqU\",\"ant-modal-content\":\"ant-modal-content_9NS4H\",\"ant-modal-footer\":\"ant-modal-footer_NBmA2\",\"ant-message-notice-content\":\"ant-message-notice-content_ZJgEq\",\"ant-tooltip-inner\":\"ant-tooltip-inner_FUnvy\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"InstanceInformation\":\"InstanceInformation_eSElH\",\"ant-modal-header\":\"ant-modal-header_sQSn+\",\"ant-modal-content\":\"ant-modal-content_CI0dQ\",\"ant-modal-footer\":\"ant-modal-footer_DECjs\",\"ant-message-notice-content\":\"ant-message-notice-content_ayZMt\",\"ant-tooltip-inner\":\"ant-tooltip-inner_bHpRv\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"VpcCidr\":\"VpcCidr_rrtka\",\"ant-modal-header\":\"ant-modal-header_BJ2gy\",\"ant-modal-content\":\"ant-modal-content_41RFd\",\"ant-modal-footer\":\"ant-modal-footer_UEFBD\",\"ant-message-notice-content\":\"ant-message-notice-content_OrAxx\",\"ant-tooltip-inner\":\"ant-tooltip-inner_fqJGf\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"VpcPeerings\":\"VpcPeerings_GpLvb\",\"ant-modal-header\":\"ant-modal-header_Wa-ZA\",\"ant-modal-content\":\"ant-modal-content_qYqpj\",\"ant-modal-footer\":\"ant-modal-footer_bDDLb\",\"ant-message-notice-content\":\"ant-message-notice-content_Sj9b6\",\"ant-tooltip-inner\":\"ant-tooltip-inner_I2mr5\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"VpcDataStores\":\"VpcDataStores_2jkJN\",\"ant-modal-header\":\"ant-modal-header_-dDwG\",\"ant-modal-content\":\"ant-modal-content_Ww4UM\",\"ant-modal-footer\":\"ant-modal-footer_bBrFD\",\"ant-message-notice-content\":\"ant-message-notice-content_zFuvA\",\"ant-tooltip-inner\":\"ant-tooltip-inner_PljUl\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"IconTextMargin4\":\"IconTextMargin4_1+p6N\",\"ant-modal-header\":\"ant-modal-header_ugePz\",\"ant-modal-content\":\"ant-modal-content_LA39S\",\"ant-modal-footer\":\"ant-modal-footer_yNaOy\",\"ant-message-notice-content\":\"ant-message-notice-content_PKpeN\",\"ant-tooltip-inner\":\"ant-tooltip-inner_TepRO\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"EditDbParametersPopoverButton\":\"EditDbParametersPopoverButton_+mR0b\",\"ant-modal-header\":\"ant-modal-header_zpKzt\",\"ant-modal-content\":\"ant-modal-content_FhVi8\",\"ant-modal-footer\":\"ant-modal-footer_X4p2U\",\"ant-message-notice-content\":\"ant-message-notice-content_WIgO6\",\"ant-tooltip-inner\":\"ant-tooltip-inner_w3sf7\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AddFirewallRuleSourceHelpText\":\"AddFirewallRuleSourceHelpText_HseT0\",\"ant-modal-header\":\"ant-modal-header_tNplj\",\"ant-modal-content\":\"ant-modal-content_mBSW+\",\"ant-modal-footer\":\"ant-modal-footer_W4ej3\",\"ant-message-notice-content\":\"ant-message-notice-content_VFLha\",\"ant-tooltip-inner\":\"ant-tooltip-inner_31yrz\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"FirewallHeader\":\"FirewallHeader_cK7RS\",\"ant-modal-header\":\"ant-modal-header_I+vYD\",\"ant-modal-content\":\"ant-modal-content_gI7lc\",\"ant-modal-footer\":\"ant-modal-footer_J93Wr\",\"ant-message-notice-content\":\"ant-message-notice-content_G8Zd+\",\"ant-tooltip-inner\":\"ant-tooltip-inner_lYQkH\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"TopQueriesTable\":\"TopQueriesTable_T8Bum\",\"ant-modal-header\":\"ant-modal-header_MxLYu\",\"ant-modal-content\":\"ant-modal-content_-cX0p\",\"ant-modal-footer\":\"ant-modal-footer_33dt0\",\"ant-message-notice-content\":\"ant-message-notice-content_qS8ZR\",\"ant-tooltip-inner\":\"ant-tooltip-inner_Nu+am\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DataStoreOverviewQueriesPerSecond\":\"DataStoreOverviewQueriesPerSecond_YH8fk\",\"ant-modal-header\":\"ant-modal-header_DeuEJ\",\"ant-modal-content\":\"ant-modal-content_OBMEy\",\"ant-modal-footer\":\"ant-modal-footer_jkGEw\",\"ant-message-notice-content\":\"ant-message-notice-content_SbBsk\",\"ant-tooltip-inner\":\"ant-tooltip-inner_+ngfM\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ProjectBreadcrumb\":\"ProjectBreadcrumb_IGf4o\",\"ant-modal-header\":\"ant-modal-header_mo2Ou\",\"ant-modal-content\":\"ant-modal-content_Lbkz9\",\"ant-modal-footer\":\"ant-modal-footer_1rxR5\",\"ant-message-notice-content\":\"ant-message-notice-content_GsrED\",\"ant-tooltip-inner\":\"ant-tooltip-inner_6nzcz\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DataStoreSettings\":\"DataStoreSettings_WId9q\",\"DataStoreSettingsButtonContainer\":\"DataStoreSettingsButtonContainer_6Cdy6\",\"DatastoreSettingsbuttons\":\"DatastoreSettingsbuttons_wO+15\",\"ant-modal-header\":\"ant-modal-header_mdOVl\",\"ant-modal-content\":\"ant-modal-content_5Cj6C\",\"ant-modal-footer\":\"ant-modal-footer_l2RoJ\",\"ant-message-notice-content\":\"ant-message-notice-content_hzT6l\",\"ant-tooltip-inner\":\"ant-tooltip-inner_ZCjHy\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DataStoreSettingsNameChange\":\"DataStoreSettingsNameChange_uzDrQ\",\"ant-modal-header\":\"ant-modal-header_CNR4u\",\"ant-modal-content\":\"ant-modal-content_A2URm\",\"ant-modal-footer\":\"ant-modal-footer_WCTwm\",\"ant-message-notice-content\":\"ant-message-notice-content_dVlGJ\",\"ant-tooltip-inner\":\"ant-tooltip-inner_zvEBZ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DataStoreSettingsAutoScaleLabel\":\"DataStoreSettingsAutoScaleLabel_aM3VL\",\"ant-modal-header\":\"ant-modal-header_wWS9x\",\"ant-modal-content\":\"ant-modal-content_fTOmn\",\"ant-modal-footer\":\"ant-modal-footer_1BwG-\",\"ant-message-notice-content\":\"ant-message-notice-content_L+cIX\",\"ant-tooltip-inner\":\"ant-tooltip-inner_Eh2E+\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ScaleNodesModal\":\"ScaleNodesModal_ciOCZ\",\"ant-modal-header\":\"ant-modal-header_nkGY-\",\"ant-modal-content\":\"ant-modal-content_lUTw-\",\"ant-modal-footer\":\"ant-modal-footer_z+Ev4\",\"ant-message-notice-content\":\"ant-message-notice-content_4GlwV\",\"ant-tooltip-inner\":\"ant-tooltip-inner_l-eyF\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ConnectionAssistantFormStepsContent\":\"ConnectionAssistantFormStepsContent_sL47r\",\"ConnectionAssistantFormStepsActionButtons\":\"ConnectionAssistantFormStepsActionButtons_bHTAd\",\"ConnectionAssistantFormStepsActionButton\":\"ConnectionAssistantFormStepsActionButton_NB-7-\",\"ant-modal-header\":\"ant-modal-header_8Uu6X\",\"ant-modal-content\":\"ant-modal-content_0LmtZ\",\"ant-modal-footer\":\"ant-modal-footer_r6Tyy\",\"ant-message-notice-content\":\"ant-message-notice-content_5uxa1\",\"ant-tooltip-inner\":\"ant-tooltip-inner_2qHZd\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"InstanceVolumeTypeFormCentered\":\"InstanceVolumeTypeFormCentered_lIMUI\",\"InstanceVolumeTypeFormInputNumber\":\"InstanceVolumeTypeFormInputNumber_FQtdv\",\"ant-modal-header\":\"ant-modal-header_2y07e\",\"ant-modal-content\":\"ant-modal-content_ZTxTF\",\"ant-modal-footer\":\"ant-modal-footer_u2nn9\",\"ant-message-notice-content\":\"ant-message-notice-content_uppYl\",\"ant-tooltip-inner\":\"ant-tooltip-inner_+qVME\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DbDashboardCol\":\"DbDashboardCol_h9XdK\",\"ant-modal-header\":\"ant-modal-header_2e0az\",\"ant-modal-content\":\"ant-modal-content_IuSDI\",\"ant-modal-footer\":\"ant-modal-footer_aMb39\",\"ant-message-notice-content\":\"ant-message-notice-content_eF+vI\",\"ant-tooltip-inner\":\"ant-tooltip-inner_HiXAL\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"LbDashboardCol\":\"LbDashboardCol_0cvRI\",\"ant-modal-header\":\"ant-modal-header_pSOCO\",\"ant-modal-content\":\"ant-modal-content_VSyPW\",\"ant-modal-footer\":\"ant-modal-footer_OqTu1\",\"ant-message-notice-content\":\"ant-message-notice-content_DNqUj\",\"ant-tooltip-inner\":\"ant-tooltip-inner_k715D\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DatabasesGrowthChart\":\"DatabasesGrowthChart_EFx8e\",\"ant-modal-header\":\"ant-modal-header_VgK81\",\"ant-modal-content\":\"ant-modal-content_ZxUkX\",\"ant-modal-footer\":\"ant-modal-footer_kan-A\",\"ant-message-notice-content\":\"ant-message-notice-content_Bd81e\",\"ant-tooltip-inner\":\"ant-tooltip-inner_VG2Nx\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DatabaseGrowthTable\":\"DatabaseGrowthTable_gbkTF\",\"ant-modal-header\":\"ant-modal-header_B+s-g\",\"ant-modal-content\":\"ant-modal-content_KEUYe\",\"ant-modal-footer\":\"ant-modal-footer_VQkV1\",\"ant-message-notice-content\":\"ant-message-notice-content_F+wkz\",\"ant-tooltip-inner\":\"ant-tooltip-inner_DKaTH\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"CcxSectionHeader\":\"CcxSectionHeader_JBoUa\",\"ant-modal-header\":\"ant-modal-header_0V5oX\",\"ant-modal-content\":\"ant-modal-content_07MKr\",\"ant-modal-footer\":\"ant-modal-footer_hcjwT\",\"ant-message-notice-content\":\"ant-message-notice-content_CTf7k\",\"ant-tooltip-inner\":\"ant-tooltip-inner_no4iI\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"BackupActionCreateDatastoreButton\":\"BackupActionCreateDatastoreButton_SDP9R\",\"ant-modal-header\":\"ant-modal-header_pK1Cg\",\"ant-modal-content\":\"ant-modal-content_E3HsF\",\"ant-modal-footer\":\"ant-modal-footer_c+XzB\",\"ant-message-notice-content\":\"ant-message-notice-content_AT1Zf\",\"ant-tooltip-inner\":\"ant-tooltip-inner_j89II\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"RestoreButton\":\"RestoreButton_n55sj\",\"ant-modal-header\":\"ant-modal-header_ksepP\",\"ant-modal-content\":\"ant-modal-content_26KZe\",\"ant-modal-footer\":\"ant-modal-footer_v5lP-\",\"ant-message-notice-content\":\"ant-message-notice-content_ty0pW\",\"ant-tooltip-inner\":\"ant-tooltip-inner_4NoVg\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"RestoringBackups\":\"RestoringBackups_6-5td\",\"ant-modal-header\":\"ant-modal-header_Pw90d\",\"ant-modal-content\":\"ant-modal-content_svWNI\",\"ant-modal-footer\":\"ant-modal-footer_F6yin\",\"ant-message-notice-content\":\"ant-message-notice-content_IyOpg\",\"ant-tooltip-inner\":\"ant-tooltip-inner_fVu1f\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"EventViewer\":\"EventViewer_C4N4q\",\"ant-modal-header\":\"ant-modal-header_198qc\",\"ant-modal-content\":\"ant-modal-content_uLsbc\",\"ant-modal-footer\":\"ant-modal-footer_RFNOm\",\"ant-message-notice-content\":\"ant-message-notice-content_PrKEi\",\"ant-tooltip-inner\":\"ant-tooltip-inner_x4UhI\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Labels\":\"EventsTable_Labels__2WWf-\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AddServiceDatabaseVendorStepContainer\":\"AddServiceDatabaseVendorStepContainer_PxWNz\",\"ant-modal-header\":\"ant-modal-header_S9+lt\",\"ant-modal-content\":\"ant-modal-content_FMCcf\",\"ant-modal-footer\":\"ant-modal-footer_D+SHt\",\"ant-message-notice-content\":\"ant-message-notice-content_3cE62\",\"ant-tooltip-inner\":\"ant-tooltip-inner_Aw0k9\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"WizardFormConfigurationStep3Centered\":\"WizardFormConfigurationStep3Centered_PAqA5\",\"WizardFormConfigurationStep3InputNumber\":\"WizardFormConfigurationStep3InputNumber_JYjTY\",\"WizardFormConfigurationStep3AlertBox\":\"WizardFormConfigurationStep3AlertBox_AArx+\",\"StepsExtraSmallScreen\":\"StepsExtraSmallScreen_nodb9\",\"ant-modal-header\":\"ant-modal-header_9W2+z\",\"ant-modal-content\":\"ant-modal-content_AlqEg\",\"ant-modal-footer\":\"ant-modal-footer_+A5Rh\",\"ant-message-notice-content\":\"ant-message-notice-content_FhMYQ\",\"ant-tooltip-inner\":\"ant-tooltip-inner_FGQec\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Organization\":\"Organization_8AJR4\",\"OrganizationTabs\":\"OrganizationTabs_zonVo\",\"ant-modal-header\":\"ant-modal-header_A+u+V\",\"ant-modal-content\":\"ant-modal-content_9hQTH\",\"ant-modal-footer\":\"ant-modal-footer_GEGuy\",\"ant-message-notice-content\":\"ant-message-notice-content_U8QjW\",\"ant-tooltip-inner\":\"ant-tooltip-inner_-6T+g\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"OrganizationMembers\":\"OrganizationMembers_Jy2Wf\",\"ant-modal-header\":\"ant-modal-header_ad9gY\",\"ant-modal-content\":\"ant-modal-content_sn0WH\",\"ant-modal-footer\":\"ant-modal-footer_FOwEr\",\"ant-message-notice-content\":\"ant-message-notice-content_DkHVt\",\"ant-tooltip-inner\":\"ant-tooltip-inner_vbt47\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppHeader\":\"AppHeader_EgBTF\",\"ant-modal-header\":\"ant-modal-header_SY9Fs\",\"ant-modal-content\":\"ant-modal-content_PXVwc\",\"ant-modal-footer\":\"ant-modal-footer_9ENdv\",\"ant-message-notice-content\":\"ant-message-notice-content_+d6L8\",\"ant-tooltip-inner\":\"ant-tooltip-inner_lLNsi\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppLogo\":\"AppLogo_JsUvp\",\"ant-modal-header\":\"ant-modal-header_Y3znF\",\"ant-modal-content\":\"ant-modal-content_NtxDi\",\"ant-modal-footer\":\"ant-modal-footer_F7R7s\",\"ant-message-notice-content\":\"ant-message-notice-content_xJoHp\",\"ant-tooltip-inner\":\"ant-tooltip-inner_plCs8\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ant-modal-header\":\"ant-modal-header_30bHc\",\"ant-modal-content\":\"ant-modal-content_EOAAC\",\"ant-modal-footer\":\"ant-modal-footer_J4Aq9\",\"ant-message-notice-content\":\"ant-message-notice-content_5q620\",\"ant-tooltip-inner\":\"ant-tooltip-inner_nqGW+\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"OrganizationSelect\":\"OrganizationSelect_B+XRI\",\"ant-modal-header\":\"ant-modal-header_HoQVk\",\"ant-modal-content\":\"ant-modal-content_BWW0o\",\"ant-modal-footer\":\"ant-modal-footer_0T6sw\",\"ant-message-notice-content\":\"ant-message-notice-content_gEhRW\",\"ant-tooltip-inner\":\"ant-tooltip-inner_3yYHi\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"PostgreSqlDbDashboard\":\"PostgreSqlDbDashboard_d5An1\",\"ant-modal-header\":\"ant-modal-header_r81j5\",\"ant-modal-content\":\"ant-modal-content_zEZgt\",\"ant-modal-footer\":\"ant-modal-footer_6ICN5\",\"ant-message-notice-content\":\"ant-message-notice-content_tJNxp\",\"ant-tooltip-inner\":\"ant-tooltip-inner_JgjgC\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"MysqlDbDashboard\":\"MysqlDbDashboard_C1uS4\",\"ant-modal-header\":\"ant-modal-header_aAU+a\",\"ant-modal-content\":\"ant-modal-content_kr3TU\",\"ant-modal-footer\":\"ant-modal-footer_kJG42\",\"ant-message-notice-content\":\"ant-message-notice-content_ePASI\",\"ant-tooltip-inner\":\"ant-tooltip-inner_Okkt4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"AppFormInput\":\"AppFormInput_aJ+SH\",\"AppFormInputNumber\":\"AppFormInputNumber_fsuOM\",\"AppFormInputNumberLeft\":\"AppFormInputNumberLeft_8fC7r\",\"AppFormItemWithTips\":\"AppFormItemWithTips_tLhkf\",\"AppFormRadioGroupHorizontal\":\"AppFormRadioGroupHorizontal_61lQS\",\"AppFormRadioGroupItemHorizontal\":\"AppFormRadioGroupItemHorizontal_iabzz\",\"AppFormRadioGroupItemVertical\":\"AppFormRadioGroupItemVertical_wPyeC\",\"AppFormRadioGroupVertical\":\"AppFormRadioGroupVertical_KhxyO\",\"AppFormRadioGroup\":\"AppFormRadioGroup_pxo1m\",\"AppRow\":\"AppRow_QxSZS\",\"AppFormTipIcon\":\"AppFormTipIcon_HFK85\",\"GroupForm\":\"GroupForm_956yd\",\"AppFormWithAddonInput\":\"AppFormWithAddonInput_4JAvW\",\"AppFormCheckBox\":\"AppFormCheckBox_W3Hhi\",\"ant-modal-header\":\"ant-modal-header_vYTyu\",\"ant-modal-content\":\"ant-modal-content_EoGEP\",\"ant-modal-footer\":\"ant-modal-footer_gq9Rl\",\"ant-message-notice-content\":\"ant-message-notice-content_WDimz\",\"ant-tooltip-inner\":\"ant-tooltip-inner_0IsC1\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DatastoreSettingDbParametersEditIcon\":\"DatastoreSettingDbParametersEditIcon_LDw-F\",\"DatastoreSettingDbParametersName\":\"DatastoreSettingDbParametersName_iN2Pc\",\"DatastoreSettingDbParametersField\":\"DatastoreSettingDbParametersField_NG3NC\",\"DatastoreSettingDbParametersSelect\":\"DatastoreSettingDbParametersSelect_EEkzO\",\"DatastoreSettingDbParametersEdit\":\"DatastoreSettingDbParametersEdit_ReMy2\",\"DatastoreSettingDbParametersDefault\":\"DatastoreSettingDbParametersDefault_8Mg4t\",\"ParameterGroupAlertAction\":\"ParameterGroupAlertAction_1H16A\",\"ParameterGroupAlert\":\"ParameterGroupAlert_zuzD+\",\"AddDBParametersButton\":\"AddDBParametersButton_6G01o\",\"DatastoreDbParametersIcon\":\"DatastoreDbParametersIcon_kHfNB\",\"DbParametersDetails\":\"DbParametersDetails_vckbL\",\"DBparametersGroupCard\":\"DBparametersGroupCard_06Uw1\",\"DbParametersSelfCenter\":\"DbParametersSelfCenter_llExc\",\"DbParametersEnd\":\"DbParametersEnd_uBlAq\",\"DbParametersActions\":\"DbParametersActions_8kHT-\",\"DbParametersGroupRow\":\"DbParametersGroupRow_uHofz\",\"DbParameterSyncedRed\":\"DbParameterSyncedRed_xfs0C\",\"DbParameterSyncedGreen\":\"DbParameterSyncedGreen_F3s10\",\"DbParametersGroupSelect\":\"DbParametersGroupSelect_g8XRh\",\"ant-modal-header\":\"ant-modal-header_xaDh0\",\"ant-modal-content\":\"ant-modal-content_ygKKr\",\"ant-modal-footer\":\"ant-modal-footer_ErrIC\",\"ant-message-notice-content\":\"ant-message-notice-content_gsOPG\",\"ant-tooltip-inner\":\"ant-tooltip-inner_s6fDX\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"DataStore\":\"DataStore_ePnJy\",\"DatastoreSkeleton\":\"DatastoreSkeleton_GDV6v\",\"DataStoreTabs\":\"DataStoreTabs_vmKxb\",\"DataStoreBackRow\":\"DataStoreBackRow_0YoJm\",\"TabsBadge\":\"TabsBadge_qyQn5\",\"TabsStyle\":\"TabsStyle_fgrqK\",\"IconStyle\":\"IconStyle_+fB4t\",\"ant-modal-header\":\"ant-modal-header_o5PP-\",\"ant-modal-content\":\"ant-modal-content_1GWjW\",\"ant-modal-footer\":\"ant-modal-footer_JknBq\",\"ant-message-notice-content\":\"ant-message-notice-content_Cq2xt\",\"ant-tooltip-inner\":\"ant-tooltip-inner_42Huc\"};"],"sourceRoot":""}