Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Fleet] added CPU metrics to request diagnostics #179819

Merged
merged 6 commits into from
Apr 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 41 additions & 2 deletions x-pack/plugins/fleet/common/openapi/bundled.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@
},
"servers": [
{
"url": "http://localhost:5601/api/fleet",
"description": "local"
"url": "http://KIBANA_HOST:5601/api/fleet"
}
],
"paths": {
Expand Down Expand Up @@ -1530,6 +1529,9 @@
"Elastic Package Manager (EPM)"
],
"responses": {
"200": {
"description": "OK"
},
"400": {
"$ref": "#/components/responses/error"
}
Expand Down Expand Up @@ -3076,6 +3078,30 @@
"tags": [
"Agents"
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"additional_metrics": {
"type": "array",
"items": {
"oneOf": [
{
"type": "string",
"enum": [
"CPU"
]
}
]
}
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK",
Expand Down Expand Up @@ -3159,6 +3185,19 @@
"description": "list of agent IDs"
}
]
},
"additional_metrics": {
"type": "array",
"items": {
"oneOf": [
{
"type": "string",
"enum": [
"CPU"
]
}
]
}
}
},
"required": [
Expand Down
25 changes: 23 additions & 2 deletions x-pack/plugins/fleet/common/openapi/bundled.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ info:
name: Elastic License 2.0
url: https://www.elastic.co/licensing/elastic-license
servers:
- url: http://localhost:5601/api/fleet
description: local
- url: http://KIBANA_HOST:5601/api/fleet
paths:
/health_check:
post:
Expand Down Expand Up @@ -966,6 +965,8 @@ paths:
tags:
- Elastic Package Manager (EPM)
responses:
'200':
description: OK
'400':
$ref: '#/components/responses/error'
operationId: get-inputs-template
Expand Down Expand Up @@ -1928,6 +1929,19 @@ paths:
summary: Request agent diagnostics
tags:
- Agents
requestBody:
content:
application/json:
schema:
type: object
properties:
additional_metrics:
type: array
items:
oneOf:
- type: string
enum:
- CPU
responses:
'200':
description: OK
Expand Down Expand Up @@ -1979,6 +1993,13 @@ paths:
items:
type: string
description: list of agent IDs
additional_metrics:
type: array
items:
oneOf:
- type: string
enum:
- CPU
required:
- agents
example:
Expand Down
3 changes: 1 addition & 2 deletions x-pack/plugins/fleet/common/openapi/entrypoint.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ info:
name: Elastic License 2.0
url: https://www.elastic.co/licensing/elastic-license
servers:
- url: 'http://localhost:5601/api/fleet'
description: local
- url: 'http://KIBANA_HOST:5601/api/fleet'
paths:
# Fleet internals
/health_check:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,13 @@ post:
items:
type: string
description: list of agent IDs
additional_metrics:
type: array
items:
oneOf:
- type: string
enum:
- "CPU"
required:
- agents
example:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,19 @@ post:
summary: Request agent diagnostics
tags:
- Agents
requestBody:
content:
application/json:
schema:
type: object
properties:
additional_metrics:
type: array
items:
oneOf:
- type: string
enum:
- "CPU"
responses:
'200':
description: OK
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ get:
responses:
'400':
$ref: ../components/responses/error.yaml
'200':
description: OK
operationId: get-inputs-template
security:
- basicAuth: []
Expand Down
11 changes: 11 additions & 0 deletions x-pack/plugins/fleet/common/types/rest_spec/agent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -152,13 +152,24 @@ export interface PostBulkAgentReassignRequest {
};
}

export enum RequestDiagnosticsAdditionalMetrics {
'CPU' = 'CPU',
}

export interface PostRequestDiagnosticsRequest {
body: {
additional_metrics: RequestDiagnosticsAdditionalMetrics[];
};
}

export type PostRequestDiagnosticsResponse = BulkAgentAction;
export type PostBulkRequestDiagnosticsResponse = BulkAgentAction;

export interface PostRequestBulkDiagnosticsRequest {
body: {
agents: string[] | string;
batchSize?: number;
additional_metrics: RequestDiagnosticsAdditionalMetrics[];
};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/

import type { EuiTableFieldDataColumnType } from '@elastic/eui';
import { EuiPortal } from '@elastic/eui';
import { EuiToolTip } from '@elastic/eui';
import {
EuiBasicTable,
Expand All @@ -30,14 +31,9 @@ import {
MINIMUM_DIAGNOSTICS_AGENT_VERSION,
} from '../../../../../../../../common/services';

import {
sendGetAgentUploads,
sendPostRequestDiagnostics,
useAuthz,
useLink,
useStartServices,
} from '../../../../../hooks';
import { sendGetAgentUploads, useAuthz, useLink, useStartServices } from '../../../../../hooks';
import type { AgentDiagnostics, Agent } from '../../../../../../../../common/types/models';
import { AgentRequestDiagnosticsModal } from '../../../components/agent_request_diagnostics_modal';

const FlexStartEuiFlexItem = styled(EuiFlexItem)`
align-self: flex-start;
Expand All @@ -55,11 +51,11 @@ export const AgentDiagnosticsTab: React.FunctionComponent<AgentDiagnosticsProps>
const authz = useAuthz();
const { notifications } = useStartServices();
const { getAbsolutePath } = useLink();
const [isSubmitting, setIsSubmitting] = useState(false);
const [isLoading, setIsLoading] = useState(true);
const [diagnosticsEntries, setDiagnosticEntries] = useState<AgentDiagnostics[]>([]);
const [prevDiagnosticsEntries, setPrevDiagnosticEntries] = useState<AgentDiagnostics[]>([]);
const [loadInterval, setLoadInterval] = useState(10000);
const [isRequestDiagnosticsModalOpen, setIsRequestDiagnosticsModalOpen] = useState(false);

const loadData = useCallback(async () => {
try {
Expand Down Expand Up @@ -194,93 +190,78 @@ export const AgentDiagnosticsTab: React.FunctionComponent<AgentDiagnosticsProps>
},
];

async function onSubmit() {
try {
setIsSubmitting(true);
const { error } = await sendPostRequestDiagnostics(agent.id);
if (error) {
throw error;
}
setIsSubmitting(false);
const successMessage = i18n.translate(
'xpack.fleet.requestDiagnostics.successSingleNotificationTitle',
{
defaultMessage: 'Request diagnostics submitted',
}
);
notifications.toasts.addSuccess(successMessage);
loadData();
} catch (error) {
setIsSubmitting(false);
notifications.toasts.addError(error, {
title: i18n.translate('xpack.fleet.requestDiagnostics.fatalErrorNotificationTitle', {
defaultMessage:
'Error requesting diagnostics {count, plural, one {agent} other {agents}}',
values: { count: 1 },
}),
});
}
}

const requestDiagnosticsButton = (
<EuiButton
fill
size="m"
onClick={onSubmit}
disabled={
isSubmitting || !isAgentRequestDiagnosticsSupported(agent) || !authz.fleet.readAgents
}
onClick={() => {
setIsRequestDiagnosticsModalOpen(true);
}}
disabled={!isAgentRequestDiagnosticsSupported(agent) || !authz.fleet.readAgents}
>
<FormattedMessage
id="xpack.fleet.agentList.diagnosticsOneButton"
id="xpack.fleet.requestDiagnostics.diagnosticsOneButton"
defaultMessage="Request diagnostics .zip"
/>
</EuiButton>
);

return (
<EuiFlexGroup direction="column" gutterSize="l">
<EuiFlexItem>
<EuiCallOut
iconType="warning"
color="warning"
title={
<FormattedMessage
id="xpack.fleet.fleetServerSetup.calloutTitle"
defaultMessage="Agent diagnostics"
/>
}
>
<FormattedMessage
id="xpack.fleet.requestDiagnostics.calloutText"
defaultMessage="Diagnostics files are stored in Elasticsearch, and as such can incur storage costs."
<>
{isRequestDiagnosticsModalOpen && (
<EuiPortal>
<AgentRequestDiagnosticsModal
agents={[agent]}
agentCount={1}
onClose={() => {
setIsRequestDiagnosticsModalOpen(false);
}}
/>
</EuiCallOut>
</EuiFlexItem>
<FlexStartEuiFlexItem>
{isAgentRequestDiagnosticsSupported(agent) ? (
requestDiagnosticsButton
) : (
<EuiToolTip
content={
</EuiPortal>
)}
<EuiFlexGroup direction="column" gutterSize="l">
<EuiFlexItem>
<EuiCallOut
iconType="warning"
color="warning"
title={
<FormattedMessage
id="xpack.fleet.requestDiagnostics.notSupportedTooltip"
defaultMessage="Requesting agent diagnostics is not supported for agents before version {version}."
values={{ version: MINIMUM_DIAGNOSTICS_AGENT_VERSION }}
id="xpack.fleet.fleetServerSetup.calloutTitle"
defaultMessage="Agent diagnostics"
/>
}
>
{requestDiagnosticsButton}
</EuiToolTip>
)}
</FlexStartEuiFlexItem>
<EuiFlexItem>
{isLoading ? (
<EuiSkeletonText lines={3} />
) : (
<EuiBasicTable<AgentDiagnostics> items={diagnosticsEntries} columns={columns} />
)}
</EuiFlexItem>
</EuiFlexGroup>
<FormattedMessage
id="xpack.fleet.requestDiagnostics.calloutText"
defaultMessage="Diagnostics files are stored in Elasticsearch, and as such can incur storage costs."
/>
</EuiCallOut>
</EuiFlexItem>
<FlexStartEuiFlexItem>
{isAgentRequestDiagnosticsSupported(agent) ? (
requestDiagnosticsButton
) : (
<EuiToolTip
content={
<FormattedMessage
id="xpack.fleet.requestDiagnostics.notSupportedTooltip"
defaultMessage="Requesting agent diagnostics is not supported for agents before version {version}."
values={{ version: MINIMUM_DIAGNOSTICS_AGENT_VERSION }}
/>
}
>
{requestDiagnosticsButton}
</EuiToolTip>
)}
</FlexStartEuiFlexItem>
<EuiFlexItem>
{isLoading ? (
<EuiSkeletonText lines={3} />
) : (
<EuiBasicTable<AgentDiagnostics> items={diagnosticsEntries} columns={columns} />
)}
</EuiFlexItem>
</EuiFlexGroup>
</>
);
};
Loading
Loading