diff --git a/x-pack/platform/plugins/shared/actions/server/lib/action_executor.ts b/x-pack/platform/plugins/shared/actions/server/lib/action_executor.ts index 770b7f3b4607b..5448319088eed 100644 --- a/x-pack/platform/plugins/shared/actions/server/lib/action_executor.ts +++ b/x-pack/platform/plugins/shared/actions/server/lib/action_executor.ts @@ -590,7 +590,10 @@ export class ActionExecutor { } // start genai extension - if (result.status === 'ok' && shouldTrackGenAiToken(actionTypeId)) { + if ( + result.status === 'ok' && + shouldTrackGenAiToken(actionTypeId, `${validatedParams.subAction}`) + ) { getGenAiTokenTracking({ actionTypeId, logger, diff --git a/x-pack/platform/plugins/shared/actions/server/lib/gen_ai_token_tracking.test.ts b/x-pack/platform/plugins/shared/actions/server/lib/gen_ai_token_tracking.test.ts index f9cc6ff5a5ba0..aad3b1709caf6 100644 --- a/x-pack/platform/plugins/shared/actions/server/lib/gen_ai_token_tracking.test.ts +++ b/x-pack/platform/plugins/shared/actions/server/lib/gen_ai_token_tracking.test.ts @@ -503,5 +503,8 @@ describe('getGenAiTokenTracking', () => { it('should be false with any other action', () => { expect(shouldTrackGenAiToken('.jira')).toEqual(false); }); + it('should be false with OpenAI action and getDashboard', () => { + expect(shouldTrackGenAiToken('.gen-ai', 'getDashboard')).toEqual(false); + }); }); }); diff --git a/x-pack/platform/plugins/shared/actions/server/lib/gen_ai_token_tracking.ts b/x-pack/platform/plugins/shared/actions/server/lib/gen_ai_token_tracking.ts index 3fbd6bfb20a1d..233bd322e8b09 100644 --- a/x-pack/platform/plugins/shared/actions/server/lib/gen_ai_token_tracking.ts +++ b/x-pack/platform/plugins/shared/actions/server/lib/gen_ai_token_tracking.ts @@ -330,11 +330,12 @@ export const getGenAiTokenTracking = async ({ return null; }; -export const shouldTrackGenAiToken = (actionTypeId: string) => - actionTypeId === '.gen-ai' || - actionTypeId === '.bedrock' || - actionTypeId === '.gemini' || - actionTypeId === '.inference'; +export const shouldTrackGenAiToken = (actionTypeId: string, subAction?: string) => + (actionTypeId === '.gen-ai' || + actionTypeId === '.bedrock' || + actionTypeId === '.gemini' || + actionTypeId === '.inference') && + subAction !== 'getDashboard'; function hasTelemetryMetadata(obj: unknown): obj is { telemetryMetadata: TelemetryMetadata } { return obj !== null && typeof obj === 'object' && 'telemetryMetadata' in obj; diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/openai/dashboard_link.tsx b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/openai/dashboard_link.tsx index 86b5298172a84..5471cd6a1260c 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/openai/dashboard_link.tsx +++ b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/openai/dashboard_link.tsx @@ -6,7 +6,7 @@ */ import React, { useCallback } from 'react'; -import { EuiLink } from '@elastic/eui'; +import { EuiLink, EuiSpacer } from '@elastic/eui'; import { useKibana } from '@kbn/triggers-actions-ui-plugin/public'; import * as i18n from './translations'; import { useGetDashboard } from '../lib/gen_ai/use_get_dashboard'; @@ -40,10 +40,13 @@ export const DashboardLink: React.FC = ({ return dashboardUrl != null ? ( // href gives us right click -> open in new tab // onclick prevents page reload - // eslint-disable-next-line @elastic/eui/href-or-on-click - - {i18n.USAGE_DASHBOARD_LINK(selectedProvider, connectorName)} - + + <> + + + {i18n.USAGE_DASHBOARD_LINK(selectedProvider, connectorName)} + + ) : null; }; diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/connectors_app.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/connectors_app.tsx index 40cbe13adfffc..d4a03747e6b27 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/connectors_app.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/connectors_app.tsx @@ -25,6 +25,7 @@ import { QueryClientProvider } from '@tanstack/react-query'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import { ActionsPublicPluginSetup } from '@kbn/actions-plugin/public'; import { DashboardStart } from '@kbn/dashboard-plugin/public'; +import { SharePluginStart } from '@kbn/share-plugin/public'; import { suspendedComponentWithProps } from './lib/suspended_component_with_props'; import { ActionTypeRegistryContract, RuleTypeRegistryContract } from '../types'; @@ -57,6 +58,7 @@ export interface TriggersAndActionsUiServices extends CoreStart { element: HTMLElement; theme$: Observable; unifiedSearch: UnifiedSearchPublicPluginStart; + share: SharePluginStart; } export const renderApp = (deps: TriggersAndActionsUiServices) => { diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/plugin.ts b/x-pack/platform/plugins/shared/triggers_actions_ui/public/plugin.ts index b94199789d8b8..04a3db90f3b9e 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/plugin.ts +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/plugin.ts @@ -37,6 +37,7 @@ import type { FieldsMetadataPublicStart } from '@kbn/fields-metadata-plugin/publ import type { UiActionsStart } from '@kbn/ui-actions-plugin/public'; import { ALERT_RULE_TRIGGER } from '@kbn/ui-actions-browser/src/triggers'; import { CONTEXT_MENU_TRIGGER } from '@kbn/embeddable-plugin/public'; +import type { SharePluginStart } from '@kbn/share-plugin/public'; import type { Rule, RuleUiAction } from './types'; import type { AlertsSearchBarProps } from './application/sections/alerts_search_bar'; @@ -171,6 +172,7 @@ interface PluginsStart { lens: LensPublicStart; fieldsMetadata: FieldsMetadataPublicStart; uiActions: UiActionsStart; + share: SharePluginStart; } export class Plugin @@ -310,6 +312,7 @@ export class Plugin fieldFormats: pluginsStart.fieldFormats, lens: pluginsStart.lens, fieldsMetadata: pluginsStart.fieldsMetadata, + share: pluginsStart.share, }); }, }); @@ -357,6 +360,7 @@ export class Plugin history: params.history, actionTypeRegistry, ruleTypeRegistry, + share: pluginsStart.share, kibanaFeatures, }); },