import { Metric } from '../app/types';
import throwGlobalError from '../app/utils/throwGlobalError';
-export function getMetrics(): Promise<Metric[]> {
- return getJSON('/api/metrics/search', { ps: 9999 }).then(r => r.metrics);
+interface MetricsResponse {
+ metrics: Metric[];
+ p: number;
+ ps: number;
+ total: number;
+}
+
+export function getMetrics(data: { p?: number; ps?: number }): Promise<MetricsResponse> {
+ return getJSON('/api/metrics/search', data).catch(throwGlobalError);
+}
+
+export function getAllMetrics(data?: { p?: number; ps?: number }): Promise<Metric[]> {
+ return inner(data);
+ function inner(
+ data: { p?: number; ps?: number } = { ps: 500 },
+ prev?: MetricsResponse
+ ): Promise<Metric[]> {
+ return getMetrics(data).then(r => {
+ const result = prev ? prev.metrics.concat(r.metrics) : r.metrics;
+ if (r.p * r.ps >= r.total) {
+ return result;
+ }
+ return inner({ ...data, p: r.p + 1 }, { ...r, metrics: result });
+ });
+ }
}
export function getMetricDomains(): Promise<string[]> {
import React from 'react';
import { Link } from 'react-router';
import Analysis from './Analysis';
-import { getMetrics } from '../../../api/metrics';
+import { getAllMetrics } from '../../../api/metrics';
import { getProjectActivity } from '../../../api/projectActivity';
import PreviewGraph from '../../../components/preview-graph/PreviewGraph';
import { translate } from '../../../helpers/l10n';
project: this.getTopLevelComponent(),
ps: PAGE_SIZE
}),
- getMetrics()
- ]).then(response => {
- if (this.mounted) {
- this.setState({ analyses: response[0].analyses, metrics: response[1], loading: false });
+ getAllMetrics()
+ ]).then(
+ response => {
+ if (this.mounted) {
+ this.setState({
+ analyses: response[0].analyses,
+ metrics: response[1],
+ loading: false
+ });
+ }
+ },
+ () => {
+ if (this.mounted) {
+ this.setState({ loading: false });
+ }
}
- });
+ );
}
renderList(analyses /*: Array<AnalysisType> */) {
import * as React from 'react';
import { getDisplayedHistoryMetrics, DEFAULT_GRAPH } from '../../projectActivity/utils';
import PreviewGraph from '../../../components/preview-graph/PreviewGraph';
-import { getMetrics } from '../../../api/metrics';
+import { getAllMetrics } from '../../../api/metrics';
import { getAllTimeMachineData } from '../../../api/time-machine';
import { Metric } from '../../../app/types';
import { parseDate } from '../../../helpers/dates';
}
this.setState({ loading: true });
- return Promise.all([getAllTimeMachineData(component, graphMetrics), getMetrics()]).then(
+ return Promise.all([getAllTimeMachineData(component, graphMetrics), getAllMetrics()]).then(
([timeMachine, metrics]) => {
if (this.mounted) {
const history: History = {};
}));
jest.mock('../../../../api/metrics', () => ({
- getMetrics: jest.fn(() => Promise.resolve([]))
+ getAllMetrics: jest.fn(() => Promise.resolve([]))
}));
jest.mock('../../../../api/time-machine', () => ({
import { mount, shallow } from 'enzyme';
import Activity from '../Activity';
-const getMetrics = require('../../../../api/metrics').getMetrics as jest.Mock<any>;
+const getAllMetrics = require('../../../../api/metrics').getAllMetrics as jest.Mock<any>;
const getAllTimeMachineData = require('../../../../api/time-machine')
.getAllTimeMachineData as jest.Mock<any>;
beforeEach(() => {
- getMetrics.mockClear();
+ getAllMetrics.mockClear();
getAllTimeMachineData.mockClear();
});
it('fetches history', () => {
mount(<Activity component="foo" />);
- expect(getMetrics).toBeCalled();
+ expect(getAllMetrics).toBeCalled();
expect(getAllTimeMachineData).toBeCalledWith('foo', ['coverage']);
});
import ProjectActivityApp from './ProjectActivityApp';
import throwGlobalError from '../../../app/utils/throwGlobalError';
import { getAllTimeMachineData } from '../../../api/time-machine';
-import { getMetrics } from '../../../api/metrics';
+import { getAllMetrics } from '../../../api/metrics';
import * as api from '../../../api/projectActivity';
import * as actions from '../actions';
import { getBranchName } from '../../../helpers/branches';
);
};
- fetchMetrics = () => getMetrics().catch(throwGlobalError);
-
loadAllActivities = (
project /*: string */,
prevResult /*: ?{ analyses: Array<Analysis>, paging: Paging } */
const topLevelComponent = this.getTopLevelComponent(component);
Promise.all([
this.fetchActivity(topLevelComponent, 1, 100, serializeQuery(query)),
- this.fetchMetrics(),
+ getAllMetrics(),
this.fetchMeasuresHistory(graphMetrics)
]).then(
response => {
import Template from './templates/source-viewer-measures.hbs';
import { searchIssues } from '../../../api/issues';
import { getMeasures } from '../../../api/measures';
-import { getMetrics } from '../../../api/metrics';
+import { getAllMetrics } from '../../../api/metrics';
import { getTests, getCoveredFiles } from '../../../api/tests';
import * as theme from '../../../app/theme';
import { getLocalizedMetricName, getLocalizedMetricDomain } from '../../../helpers/l10n';
this.$('.js-test-list').scrollTop(this.testsScroll);
},
- getMetrics() {
- let metrics = '';
- const url = window.baseUrl + '/api/metrics/search';
- $.ajax({
- url,
- async: false,
- data: { ps: 9999 }
- }).done(data => {
- metrics = data.metrics.filter(metric => metric.type !== 'DATA' && !metric.hidden);
- metrics = sortBy(metrics, 'name');
- });
- return metrics;
- },
-
calcAdditionalMeasures(measures) {
measures.issuesRemediationEffort =
(Number(measures.sqale_index_raw) || 0) +
},
requestMeasures() {
- return getMetrics().then(metrics => {
+ return getAllMetrics().then(metrics => {
const metricsToRequest = metrics
.filter(metric => metric.type !== 'DATA' && !metric.hidden)
.map(metric => metric.key);
import { getGlobalNavigation } from '../api/nav';
import * as auth from '../api/auth';
import { getOrganizations } from '../api/organizations';
-import { getMetrics } from '../api/metrics';
+import { getAllMetrics } from '../api/metrics';
import { receiveLanguages } from './languages/actions';
import { receiveMetrics } from './metrics/actions';
import { addGlobalErrorMessage } from './globalMessages/duck';
getLanguages().then(languages => dispatch(receiveLanguages(languages)), onFail(dispatch));
export const fetchMetrics = () => dispatch =>
- getMetrics().then(metrics => dispatch(receiveMetrics(metrics)), onFail(dispatch));
+ getAllMetrics().then(metrics => dispatch(receiveMetrics(metrics)), onFail(dispatch));
export const fetchOrganizations = (organizations /*: Array<string> | void */) => dispatch =>
getOrganizations(organizations).then(