Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- async getLatestData(versionId: number) {
- const models = await this.modelRepository.find({ cache: true });
- const predictions = await this.predictions.getPredictions(versionId);
- const factsList = await Promise.all(
- [...models.map(m => this.getFactData(m.modelId)),
- ].map(p => p.catch(() => null)),
- );
- const results: any[] = [];
- models.forEach((model: Model, i: number) => {
- const predictValues = predictions
- .filter(p => p.model.modelId === model.modelId)
- .map(p => ({
- timestamp: p.predictDt.formatToNumber(),
- value: p.predictValue,
- }));
- const factsValues = factsList[i] ? factsList[i].values.map((f => ({
- ...f,
- timestamp: new AppDate(f.timestamp).formatToNumber(),
- }))) : null;
- const firstPredict = predictValues[0] || null;
- const firstPredictDt = firstPredict ? moment(firstPredict.timestamp) : null;
- const lastPredict = predictValues[predictValues.length - 1] || null;
- const lastPredictDt = lastPredict ? moment(lastPredict.timestamp) : null;
- let maxDate = factsValues && factsValues.length ? moment(factsValues[factsValues.length - 1].timestamp) : null;
- let minDate = factsValues && factsValues.length ? moment(factsValues[0].timestamp) : null;
- if (firstPredictDt && firstPredictDt.isAfter(minDate) && firstPredictDt.isSameOrBefore(minDate)) {
- minDate = firstPredictDt;
- }
- if (lastPredictDt && lastPredictDt.isBefore(maxDate) && lastPredictDt.isSameOrAfter(minDate)) {
- maxDate = lastPredictDt;
- }
- const predicts = maxDate && minDate && predictValues ? predictValues.filter(p => {
- const dt = +new Date(p.timestamp);
- return dt >= minDate.valueOf() && dt <= +maxDate.valueOf();
- }) : [];
- const facts = maxDate && minDate && factsValues ? factsValues.filter(f => {
- const dt = +new Date(f.timestamp);
- return dt >= minDate.valueOf() && dt <= maxDate.valueOf();
- }) : [];
- const lastPredictValue = predicts[predicts.length - 1];
- const lastFactValue = facts[facts.length - 1];
- results.push({
- model: {
- id: model.modelId,
- name: model.modelName,
- unit: model.modelUnit,
- },
- fact: lastFactValue,
- prediction: lastPredictValue,
- factAverage: lastFactValue
- ? getAverageValueByPeriod(
- facts,
- moment(lastFactValue.timestamp)
- .subtract(1, 'days')
- .valueOf(),
- )
- : null,
- predictionAverage: lastPredictValue
- ? getAverageValueByPeriod(
- predicts,
- moment(lastPredictValue.timestamp)
- .subtract(1, 'days')
- .valueOf(),
- )
- : null,
- });
- });
- return results;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement