"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createMetricsAggregators = createMetricsAggregators; exports.createMetricsStream = createMetricsStream; var _rxjs = require("rxjs"); var _operators = require("rxjs/operators"); var _saferLodashSet = require("@kbn/safer-lodash-set"); var _task_events = require("../task_events"); var _task_claim_metrics_aggregator = require("./task_claim_metrics_aggregator"); var _create_aggregator = require("./create_aggregator"); var _task_run_metrics_aggregator = require("./task_run_metrics_aggregator"); /* * 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. */ function createMetricsAggregators({ config, resetMetrics$, taskPollingLifecycle }) { const aggregators = []; if (taskPollingLifecycle) { aggregators.push((0, _create_aggregator.createAggregator)({ key: 'task_claim', taskPollingLifecycle, config, resetMetrics$, taskEventFilter: taskEvent => (0, _task_events.isTaskPollingCycleEvent)(taskEvent), metricsAggregator: new _task_claim_metrics_aggregator.TaskClaimMetricsAggregator() }), (0, _create_aggregator.createAggregator)({ key: 'task_run', taskPollingLifecycle, config, resetMetrics$, taskEventFilter: taskEvent => (0, _task_events.isTaskRunEvent)(taskEvent), metricsAggregator: new _task_run_metrics_aggregator.TaskRunMetricsAggregator() })); } return (0, _rxjs.merge)(...aggregators); } function createMetricsStream(provider$) { const initialMetrics = { last_update: new Date().toISOString(), metrics: {} }; return (0, _rxjs.merge)( // emit the initial metrics (0, _rxjs.of)(initialMetrics), // emit updated metrics whenever a provider updates a specific key on the stats provider$.pipe((0, _operators.map)(({ key, value }) => { return { value: { timestamp: new Date().toISOString(), value }, key }; }), (0, _operators.scan)((metrics, { key, value }) => { // incrementally merge stats as they come in (0, _saferLodashSet.set)(metrics.metrics, key, value); metrics.last_update = new Date().toISOString(); return metrics; }, initialMetrics))); }