Skip to content

Commit

Permalink
[Fleet] Fix agent status count (#95099)
Browse files Browse the repository at this point in the history
  • Loading branch information
nchaulet authored Mar 23, 2021
1 parent c0c5fba commit 76b5520
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 2 deletions.
5 changes: 3 additions & 2 deletions x-pack/plugins/fleet/server/services/agents/crud.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import Boom from '@hapi/boom';
import type { SearchResponse, MGetResponse, GetResponse } from 'elasticsearch';
import type { SavedObjectsClientContract, ElasticsearchClient } from 'src/core/server';

import type { ESSearchResponse } from '../../../../../../typings/elasticsearch';
import type { AgentSOAttributes, Agent, ListWithKuery } from '../../types';
import { appContextService, agentPolicyService } from '../../services';
import type { FleetServerAgent } from '../../../common';
Expand Down Expand Up @@ -118,7 +119,7 @@ export async function getAgentsByKuery(

const kueryNode = _joinFilters(filters);
const body = kueryNode ? { query: esKuery.toElasticsearchQuery(kueryNode) } : {};
const res = await esClient.search<SearchResponse<FleetServerAgent>>({
const res = await esClient.search<ESSearchResponse<FleetServerAgent, {}>>({
index: AGENTS_INDEX,
from: (page - 1) * perPage,
size: perPage,
Expand All @@ -138,7 +139,7 @@ export async function getAgentsByKuery(

return {
agents,
total: agents.length,
total: res.body.hits.total.value,
page,
perPage,
};
Expand Down
2 changes: 2 additions & 0 deletions x-pack/plugins/fleet/server/services/agents/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@

import type { GetResponse, SearchResponse } from 'elasticsearch';

import type { ESSearchHit } from '../../../../../../typings/elasticsearch';
import type { Agent, AgentSOAttributes, FleetServerAgent } from '../../types';

type FleetServerAgentESResponse =
| GetResponse<FleetServerAgent>
| ESSearchHit<FleetServerAgent>
| SearchResponse<FleetServerAgent>['hits']['hits'][0];

export function searchHitToAgent(hit: FleetServerAgentESResponse): Agent {
Expand Down
86 changes: 86 additions & 0 deletions x-pack/test/fleet_api_integration/apis/agents/status.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/

import expect from '@kbn/expect';

import { FtrProviderContext } from '../../../api_integration/ftr_provider_context';
import { AGENTS_INDEX } from '../../../../plugins/fleet/common';

export default function ({ getService }: FtrProviderContext) {
const es = getService('es');
const esArchiver = getService('esArchiver');
const supertest = getService('supertest');

describe('fleet_agents_status', () => {
before(async () => {
await esArchiver.loadIfNeeded('fleet/agents');
// 2 agents online
await es.update({
id: 'agent1',
refresh: 'wait_for',
index: AGENTS_INDEX,
body: {
doc: {
last_checkin: new Date().toISOString(),
},
},
});
await es.update({
id: 'agent2',
refresh: 'wait_for',
index: AGENTS_INDEX,
body: {
doc: {
last_checkin: new Date().toISOString(),
},
},
});
// 1 agents offline
await es.update({
id: 'agent3',
refresh: 'wait_for',
index: AGENTS_INDEX,
body: {
doc: {
last_checkin: new Date(Date.now() - 1000 * 60 * 60 * 60 * 10).toISOString(),
},
},
});
// 1 agent upgrading
await es.update({
id: 'agent4',
refresh: 'wait_for',
index: AGENTS_INDEX,
body: {
doc: {
last_checkin: new Date().toISOString(),
upgrade_started_at: new Date().toISOString(),
},
},
});
});
after(async () => {
await esArchiver.unload('fleet/agents');
});

it('should return the status of agents', async () => {
const { body: apiResponse } = await supertest.get(`/api/fleet/agent-status`).expect(200);

expect(apiResponse).to.eql({
results: {
events: 0,
total: 4,
online: 2,
error: 0,
offline: 1,
updating: 1,
other: 1,
},
});
});
});
}
1 change: 1 addition & 0 deletions x-pack/test/fleet_api_integration/apis/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ export default function ({ loadTestFile }) {
loadTestFile(require.resolve('./agents/actions'));
loadTestFile(require.resolve('./agents/upgrade'));
loadTestFile(require.resolve('./agents/reassign'));
loadTestFile(require.resolve('./agents/status'));

// Enrollment API keys
loadTestFile(require.resolve('./enrollment_api_keys/crud'));
Expand Down

0 comments on commit 76b5520

Please sign in to comment.