blob: 6e3dfd7c94e45cc0d8cab83c4ec5cad63d5df721 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import moment from 'moment';
export function axis({ display }, data, tranformFunc) {
return display.range.map((v, i) =>
(tranformFunc ? tranformFunc({ x: v, y: data[i] }) : { x: v, y: data[i] }));
}
export function axisY({ display }, data, tranformFunc) {
return display.range.map((v, i) =>
(tranformFunc ? tranformFunc({ x: v, y: data[i] ? data[i].value : null }) : { x: v, y: data[i] ? data[i].value : null }));
}
export function axisMY({ display }, data) {
const result = [];
data.forEach(({ title, value: { values } }) => {
result.push(...axisY({ display }, values, _ => ({ ..._, d: title})));
})
return result;
}
export function generateDuration({ from, to }) {
const start = from();
const end = to();
const mlist = getMeasureList();
const lenght = mlist.length;
const { measureType, step, format, displayFormat } = mlist
.find((_, index) => ((index + 1 >= lenght) || end.diff(start, _.measureType) > 1));
const range = Array.from({ length: end.diff(start, measureType) + 2 },
(v, i) => start.clone().add(i, measureType).format(displayFormat));
return {
input: {
start: start.format(format),
end: end.format(format),
step,
},
display: {
range: range.slice(0, range.length - 1),
},
raw: {
start,
end,
range: range.map(_ => moment(_, displayFormat)),
},
};
}
function createTimeMeasure(measureType, step, format, displayFormat = format) {
return {
measureType, step, format, displayFormat,
};
}
function getMeasureList() {
return [createTimeMeasure('months', 'MONTH', 'YYYY-MM'), createTimeMeasure('days', 'DAY', 'YYYY-MM-DD'),
createTimeMeasure('hours', 'HOUR', 'YYYY-MM-DD HH', 'YYYY-MM-DD HH:00:00'), createTimeMeasure('minutes', 'MINUTE', 'YYYY-MM-DD HHmm', 'HH:mm:00')];
}
export function formatDuration(durationMs) {
if (parseInt(durationMs, 10) >= 1000) {
return `${parseInt(durationMs, 10) / 1000} s`;
}
return `${durationMs} ms`;
}