diff --git a/public/app/percona/add-instance/components/AddRemoteInstance/AddRemoteInstance.messages.ts b/public/app/percona/add-instance/components/AddRemoteInstance/AddRemoteInstance.messages.ts index 993e8001a1bea..a3eeec3de582d 100644 --- a/public/app/percona/add-instance/components/AddRemoteInstance/AddRemoteInstance.messages.ts +++ b/public/app/percona/add-instance/components/AddRemoteInstance/AddRemoteInstance.messages.ts @@ -20,6 +20,11 @@ export const Messages = { pgStatements: 'PG Stat Statements', pgMonitor: 'PG Stat Monitor', }, + mongoQuerySourceOptions: { + none: 'None', + profiler: 'Profiler', + mongolog: 'Mongolog', + }, schemaOptions: { http: 'HTTP', https: 'HTTPS', diff --git a/public/app/percona/add-instance/components/AddRemoteInstance/AddRemoteInstance.service.tsx b/public/app/percona/add-instance/components/AddRemoteInstance/AddRemoteInstance.service.tsx index 5d48b4f9cec81..daa9927b91751 100644 --- a/public/app/percona/add-instance/components/AddRemoteInstance/AddRemoteInstance.service.tsx +++ b/public/app/percona/add-instance/components/AddRemoteInstance/AddRemoteInstance.service.tsx @@ -26,6 +26,7 @@ import { ProxySQLPayload, MongoDBPayload, AddServicePayload, + MongoQuerySourceOptions, } from './AddRemoteInstance.types'; const BASE_URL = '/services'; @@ -180,6 +181,12 @@ export const toPayload = (values: any, discoverName?: string, type?: InstanceAva if (values.tls) { data.authentication_mechanism = 'MONGODB-X509'; } + + if (data.query_source === MongoQuerySourceOptions.profiler) { + data.qan_mongodb_profiler = true; + } else if (data.query_source === MongoQuerySourceOptions.mongolog) { + data.qan_mongodb_mongolog = true; + } } data.pmm_agent_id = values.pmm_agent_id.value; diff --git a/public/app/percona/add-instance/components/AddRemoteInstance/AddRemoteInstance.tsx b/public/app/percona/add-instance/components/AddRemoteInstance/AddRemoteInstance.tsx index 778febd308231..9fc7c86477aee 100644 --- a/public/app/percona/add-instance/components/AddRemoteInstance/AddRemoteInstance.tsx +++ b/public/app/percona/add-instance/components/AddRemoteInstance/AddRemoteInstance.tsx @@ -24,6 +24,7 @@ import { getInstanceData, remoteToken } from './AddRemoteInstance.tools'; import { AddRemoteInstanceProps, FormValues, + MongoQuerySourceOptions, MSAzurePayload, RDSPayload, TrackingOptions, @@ -63,6 +64,10 @@ const AddRemoteInstance: FC = ({ initialValues.disable_comments_parsing = true; } + if (type === Databases.mongodb) { + initialValues.query_source = MongoQuerySourceOptions.none; + } + const onSubmit = useCallback( async (values: FormValues) => { try { diff --git a/public/app/percona/add-instance/components/AddRemoteInstance/AddRemoteInstance.types.ts b/public/app/percona/add-instance/components/AddRemoteInstance/AddRemoteInstance.types.ts index 61785c8f1105b..5dc50c18c2cfc 100644 --- a/public/app/percona/add-instance/components/AddRemoteInstance/AddRemoteInstance.types.ts +++ b/public/app/percona/add-instance/components/AddRemoteInstance/AddRemoteInstance.types.ts @@ -4,6 +4,7 @@ export interface FormValues extends RemoteInstanceCredentials { qan_mysql_perfschema?: boolean; disable_comments_parsing?: boolean; tracking?: TrackingOptions; + query_source?: MongoQuerySourceOptions; } export enum TrackingOptions { @@ -12,6 +13,12 @@ export enum TrackingOptions { pgMonitor = 'qan_postgresql_pgstatmonitor_agent', } +export enum MongoQuerySourceOptions { + none = 'none', + profiler = 'qan_mongodb_profiler', + mongolog = 'qan_mongodb_mongolog', +} + export interface InstanceData { instanceType?: string; defaultPort?: number; @@ -138,6 +145,7 @@ export interface MongoDBPayload extends RemoteCommonPayload, TLSCommon { cluster: string; replication_set: string; qan_mongodb_profiler: boolean; + qan_mongodb_mongolog: boolean; tls_certificate_key: string; tls_certificate_key_file_password: string; tls_ca: string; diff --git a/public/app/percona/add-instance/components/AddRemoteInstance/FormParts/AdditionalOptions/AdditionalOptions.tsx b/public/app/percona/add-instance/components/AddRemoteInstance/FormParts/AdditionalOptions/AdditionalOptions.tsx index 715d0a0d70f62..776ad8fd18b76 100644 --- a/public/app/percona/add-instance/components/AddRemoteInstance/FormParts/AdditionalOptions/AdditionalOptions.tsx +++ b/public/app/percona/add-instance/components/AddRemoteInstance/FormParts/AdditionalOptions/AdditionalOptions.tsx @@ -10,7 +10,7 @@ import { Databases } from 'app/percona/shared/core'; import Validators from 'app/percona/shared/helpers/validators'; import { validators as platformCoreValidators } from 'app/percona/shared/helpers/validatorsForm'; -import { rdsTrackingOptions, trackingOptions } from '../FormParts.constants'; +import { mongoQuerySourceOptions, rdsTrackingOptions, trackingOptions } from '../FormParts.constants'; import { Messages } from '../FormParts.messages'; import { getStyles } from '../FormParts.styles'; import { AdditionalOptionsFormPartProps, PostgreSQLAdditionalOptionsProps } from '../FormParts.types'; @@ -186,6 +186,23 @@ const MySQLOptions = ({ form }: { form: FormApi }) => { ); }; +const MongoQuerySourceOptions = ({}: { form: FormApi }) => { + const styles = useStyles2(getStyles); + + return ( + <> +

{Messages.form.labels.mongoQuerySource}

+ + + ); +}; + export const getAdditionalOptions = ( type: InstanceAvailableType, remoteInstanceCredentials: RemoteInstanceCredentials, @@ -270,11 +287,7 @@ export const getAdditionalOptions = ( - + ); case Databases.haproxy: diff --git a/public/app/percona/add-instance/components/AddRemoteInstance/FormParts/FormParts.constants.ts b/public/app/percona/add-instance/components/AddRemoteInstance/FormParts/FormParts.constants.ts index 0a41bfbf86dcc..ccae215103cb4 100644 --- a/public/app/percona/add-instance/components/AddRemoteInstance/FormParts/FormParts.constants.ts +++ b/public/app/percona/add-instance/components/AddRemoteInstance/FormParts/FormParts.constants.ts @@ -1,7 +1,7 @@ import { SelectableValue } from '@grafana/data'; import { Messages } from '../AddRemoteInstance.messages'; -import { TrackingOptions } from '../AddRemoteInstance.types'; +import { MongoQuerySourceOptions, TrackingOptions } from '../AddRemoteInstance.types'; import { MetricsParameters, Schema } from './FormParts.types'; @@ -25,3 +25,9 @@ export const metricsParametersOptions: SelectableValue[] = [ { value: MetricsParameters.manually, label: Messages.form.metricsParametersOptions.manually }, { value: MetricsParameters.parsed, label: Messages.form.metricsParametersOptions.parsed }, ]; + +export const mongoQuerySourceOptions: SelectableValue[] = [ + { value: MongoQuerySourceOptions.none, label: Messages.form.mongoQuerySourceOptions.none }, + { value: MongoQuerySourceOptions.profiler, label: Messages.form.mongoQuerySourceOptions.profiler }, + { value: MongoQuerySourceOptions.mongolog, label: Messages.form.mongoQuerySourceOptions.mongolog }, +]; diff --git a/public/app/percona/add-instance/components/AddRemoteInstance/FormParts/FormParts.messages.ts b/public/app/percona/add-instance/components/AddRemoteInstance/FormParts/FormParts.messages.ts index 99482003a9c8a..626640917187b 100644 --- a/public/app/percona/add-instance/components/AddRemoteInstance/FormParts/FormParts.messages.ts +++ b/public/app/percona/add-instance/components/AddRemoteInstance/FormParts/FormParts.messages.ts @@ -7,6 +7,7 @@ export const Messages = { }, labels: { trackingOptions: 'Stat tracking options', + mongoQuerySource: 'Query source', externalService: { url: 'External service endpoint', connectionParameters: 'External service connection parameters', diff --git a/public/app/percona/add-instance/components/AddRemoteInstance/FormParts/FormParts.test.tsx b/public/app/percona/add-instance/components/AddRemoteInstance/FormParts/FormParts.test.tsx index 8021081bb3a99..f3dffdf6071fe 100644 --- a/public/app/percona/add-instance/components/AddRemoteInstance/FormParts/FormParts.test.tsx +++ b/public/app/percona/add-instance/components/AddRemoteInstance/FormParts/FormParts.test.tsx @@ -136,9 +136,9 @@ describe('getAdditionalOptions ::', () => { expect(screen.getByTestId('tls-checkbox-input')).toBeInTheDocument(); expect(screen.getByTestId('tls_skip_verify-checkbox-input')).toBeInTheDocument(); - expect(screen.getByTestId('qan_mongodb_profiler-checkbox-input')).toBeInTheDocument(); + expect(screen.getByTestId('query_source-radio-state')).toBeInTheDocument(); - expect(fields.length).toBe(3); + expect(fields.length).toBe(6); }); it('should render correct for MySQL', async () => { const type = Databases.mysql; diff --git a/public/app/percona/inventory/Inventory.types.ts b/public/app/percona/inventory/Inventory.types.ts index 82a2c70102a95..7ba2d4b059cf6 100644 --- a/public/app/percona/inventory/Inventory.types.ts +++ b/public/app/percona/inventory/Inventory.types.ts @@ -40,6 +40,7 @@ export enum AgentType { proxysql = 'proxysql', proxysqlExporter = 'proxysqlExporter', qanMongodb_profiler_agent = 'qan_mongodb_profiler_agent', + qanMongodb_mongolog_agent = 'qan_mongodb_mongolog_agent', qanMysql_perfschema_agent = 'qan_mysql_perfschema_agent', qanMysql_slowlog_agent = 'qan_mysql_slowlog_agent', qanPostgresql_pgstatements_agent = 'qan_postgresql_pgstatements_agent',