Skip to content

Commit

Permalink
Hide query assist UI if PPL agent is not created (#1386)
Browse files Browse the repository at this point in the history
Signed-off-by: Joshua Li <joshuali925@gmail.com>
  • Loading branch information
joshuali925 authored Feb 1, 2024
1 parent ee3ca58 commit c1a8932
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 3 deletions.
1 change: 1 addition & 0 deletions common/constants/query_assist.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

const QUERY_ASSIST_API_PREFIX = '/api/observability/query_assist';
export const QUERY_ASSIST_API = {
CONFIGURED: `${QUERY_ASSIST_API_PREFIX}/configured`,
GENERATE_PPL: `${QUERY_ASSIST_API_PREFIX}/generate_ppl`,
SUMMARIZE: `${QUERY_ASSIST_API_PREFIX}/summarize`,
};
Expand Down
22 changes: 20 additions & 2 deletions public/components/event_analytics/explorer/explorer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ import {
TAB_EVENT_TITLE,
TIME_INTERVAL_OPTIONS,
} from '../../../../common/constants/explorer';
import { QUERY_ASSIST_API } from '../../../../common/constants/query_assist';
import {
LIVE_END_TIME,
LIVE_OPTIONS,
Expand Down Expand Up @@ -101,8 +102,8 @@ import { selectSearchMetaData } from '../../event_analytics/redux/slices/search_
import { getVizContainerProps } from '../../visualizations/charts/helpers';
import { TabContext, useFetchEvents, useFetchPatterns, useFetchVisualizations } from '../hooks';
import {
selectCountDistribution,
render as updateCountDistribution,
selectCountDistribution,
} from '../redux/slices/count_distribution_slice';
import { selectFields, updateFields } from '../redux/slices/field_slice';
import { selectQueryResult } from '../redux/slices/query_result_slice';
Expand All @@ -112,8 +113,8 @@ import { selectExplorerVisualization } from '../redux/slices/visualization_slice
import {
change as changeVisualizationConfig,
change as changeVizConfig,
selectVisualizationConfig,
change as updateVizConfig,
selectVisualizationConfig,
} from '../redux/slices/viualization_config_slice';
import { getDefaultVisConfig } from '../utils';
import { formatError, getContentTabTitle, getDateRange } from '../utils/utils';
Expand Down Expand Up @@ -217,6 +218,7 @@ export const Explorer = ({
const [subType, setSubType] = useState('visualization');
const [_metricMeasure, setMetricMeasure] = useState('');
const [_metricChecked, setMetricChecked] = useState(false);
const [_refresh, setRefresh] = useState({});
const queryRef = useRef();
const appBasedRef = useRef('');
appBasedRef.current = appBaseQuery;
Expand Down Expand Up @@ -272,6 +274,22 @@ export const Explorer = ({
};
}, []);

useEffect(() => {
// query assist UI should only be enabled when the feature is enabled and configured.
if (coreRefs.queryAssistEnabled) {
http
.get<{ configured: boolean; error?: string }>(QUERY_ASSIST_API.CONFIGURED)
.catch(() => {
console.warn('Failed to check if query assist is configured');
return { configured: false };
})
.then((response) => {
coreRefs.queryAssistEnabled = response.configured;
setRefresh({});
});
}
}, []);

const getErrorHandler = (title: string) => {
return (error: any) => {
if (coreRefs.summarizeEnabled) return;
Expand Down
26 changes: 25 additions & 1 deletion server/routes/query_assist/routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
import { isResponseError } from '../../../../../src/core/server/opensearch/client/errors';
import { QUERY_ASSIST_API } from '../../../common/constants/query_assist';
import { generateFieldContext } from '../../common/helpers/query_assist/generate_field_context';
import { requestWithRetryAgentSearch } from './utils/agents';
import { requestWithRetryAgentSearch, searchAgentIdByName } from './utils/agents';

export function registerQueryAssistRoutes(router: IRouter, config: ObservabilityConfig) {
const { ppl_agent_name: pplAgentName } = config.query_assist;
Expand All @@ -22,6 +22,30 @@ export function registerQueryAssistRoutes(router: IRouter, config: Observability
error_summary_agent_name: errorSummaryAgentName,
} = config.summarize;

/**
* Returns whether the PPL agent is configured.
*/
router.get(
{
path: QUERY_ASSIST_API.CONFIGURED,
validate: {},
},
async (
context,
request,
response
): Promise<IOpenSearchDashboardsResponse<any | ResponseError>> => {
const client = context.core.opensearch.client.asCurrentUser;
try {
// if the call does not throw any error, then the agent is properly configured
await searchAgentIdByName(client, pplAgentName!);
return response.ok({ body: { configured: true } });
} catch (error) {
return response.ok({ body: { configured: false, error: error.message } });
}
}
);

router.post(
{
path: QUERY_ASSIST_API.GENERATE_PPL,
Expand Down

0 comments on commit c1a8932

Please sign in to comment.