Skip to content

Commit

Permalink
get_apms converted
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisronline committed Nov 25, 2020
1 parent 8804b50 commit df3dd98
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,68 +5,79 @@
*/

import moment from 'moment';
import { upperFirst, get } from 'lodash';
import { upperFirst } from 'lodash';
// @ts-ignore
import { checkParam } from '../error_missing_required';
// @ts-ignore
import { createApmQuery } from './create_apm_query';
// @ts-ignore
import { calculateRate } from '../calculate_rate';
// @ts-ignore
import { getDiffCalculation } from './_apm_stats';
import { ElasticsearchResponse, ElasticsearchResponseHit } from '../../types';

export function handleResponse(response, start, end) {
const hits = get(response, 'hits.hits', []);
export function handleResponse(response: ElasticsearchResponse, start: number, end: number) {
const initial = { ids: new Set(), beats: [] };
const { beats } = hits.reduce((accum, hit) => {
const stats = get(hit, '_source.beats_stats');
const uuid = get(stats, 'beat.uuid');
const { beats } = response.hits?.hits.reduce((accum: any, hit: ElasticsearchResponseHit) => {
const stats = hit._source.beats_stats;
if (!stats) {
return accum;
}

const earliestStats = hit.inner_hits.earliest.hits.hits[0]._source.beats_stats;
if (!earliestStats) {
return accum;
}

const uuid = stats?.beat.uuid;

// skip this duplicated beat, newer one was already added
if (accum.ids.has(uuid)) {
return accum;
}

// add another beat summary
accum.ids.add(uuid);
const earliestStats = get(hit, 'inner_hits.earliest.hits.hits[0]._source.beats_stats');

// add the beat
const rateOptions = {
hitTimestamp: get(stats, 'timestamp'),
earliestHitTimestamp: get(earliestStats, 'timestamp'),
hitTimestamp: stats.timestamp,
earliestHitTimestamp: earliestStats.timestamp,
timeWindowMin: start,
timeWindowMax: end,
};

const { rate: bytesSentRate } = calculateRate({
latestTotal: get(stats, 'metrics.libbeat.output.write.bytes'),
earliestTotal: get(earliestStats, 'metrics.libbeat.output.write.bytes'),
latestTotal: stats.metrics.libbeat.output.write.bytes,
earliestTotal: earliestStats.metrics.libbeat.output.write.bytes,
...rateOptions,
});

const { rate: totalEventsRate } = calculateRate({
latestTotal: get(stats, 'metrics.libbeat.pipeline.events.total'),
earliestTotal: get(earliestStats, 'metrics.libbeat.pipeline.events.total'),
latestTotal: stats.metrics.libbeat.pipeline.events.total,
earliestTotal: earliestStats.metrics.libbeat.pipeline.events.total,
...rateOptions,
});

const errorsWrittenLatest = get(stats, 'metrics.libbeat.output.write.errors');
const errorsWrittenEarliest = get(earliestStats, 'metrics.libbeat.output.write.errors');
const errorsReadLatest = get(stats, 'metrics.libbeat.output.read.errors');
const errorsReadEarliest = get(earliestStats, 'metrics.libbeat.output.read.errors');
const errorsWrittenLatest = stats.metrics.libbeat.output.write.errors;
const errorsWrittenEarliest = earliestStats.metrics.libbeat.output.write.errors;
const errorsReadLatest = stats.metrics.libbeat.output.read.errors;
const errorsReadEarliest = earliestStats.metrics.libbeat.output.read.errors;
const errors = getDiffCalculation(
errorsWrittenLatest + errorsReadLatest,
errorsWrittenEarliest + errorsReadEarliest
);

accum.beats.push({
uuid: get(stats, 'beat.uuid'),
name: get(stats, 'beat.name'),
type: upperFirst(get(stats, 'beat.type')),
output: upperFirst(get(stats, 'metrics.libbeat.output.type')),
uuid: stats.beat.uuid,
name: stats.beat.name,
type: upperFirst(stats.beat.type),
output: upperFirst(stats.metrics.libbeat.output.type),
total_events_rate: totalEventsRate,
bytes_sent_rate: bytesSentRate,
errors,
memory: get(stats, 'metrics.beat.memstats.memory_alloc'),
version: get(stats, 'beat.version'),
time_of_last_event: get(hit, '_source.timestamp'),
memory: stats.metrics.beat.memstats.memory_alloc,
version: stats.beat.version,
time_of_last_event: hit._source.timestamp,
});

return accum;
Expand All @@ -75,7 +86,7 @@ export function handleResponse(response, start, end) {
return beats;
}

export async function getApms(req, apmIndexPattern, clusterUuid) {
export async function getApms(req: any, apmIndexPattern: string, clusterUuid: string) {
checkParam(apmIndexPattern, 'apmIndexPattern in getBeats');

const config = req.server.config();
Expand Down
60 changes: 60 additions & 0 deletions x-pack/plugins/monitoring/server/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,3 +107,63 @@ export interface LegacyRequest {
};
};
}

export interface ElasticsearchResponse {
hits?: {
hits: ElasticsearchResponseHit[];
total: {
value: number;
};
};
}

export interface ElasticsearchResponseHit {
_source: ElasticsearchSource;
inner_hits: {
[field: string]: {
hits: {
hits: ElasticsearchResponseHit[];
total: {
value: number;
};
};
};
};
}

export interface ElasticsearchSource {
timestamp: string;
beats_stats?: {
timestamp: string;
beat: {
uuid: string;
name: string;
type: string;
version: string;
};
metrics: {
beat: {
memstats: {
memory_alloc: number;
};
};
libbeat: {
output: {
type: string;
write: {
bytes: number;
errors: number;
};
read: {
errors: number;
};
};
pipeline: {
events: {
total: number;
};
};
};
};
};
}

0 comments on commit df3dd98

Please sign in to comment.