@gamariverib/mercados-pecuarios-libs-analytical-reports 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/build/index.d.ts +3 -0
- package/build/index.js +19 -0
- package/build/lib/actions/actions.d.ts +67 -0
- package/build/lib/actions/actions.js +89 -0
- package/build/lib/actions/after/add_values.d.ts +9 -0
- package/build/lib/actions/after/add_values.js +39 -0
- package/build/lib/actions/after/after_action.d.ts +35 -0
- package/build/lib/actions/after/after_action.js +41 -0
- package/build/lib/actions/after/average.d.ts +15 -0
- package/build/lib/actions/after/average.js +83 -0
- package/build/lib/actions/after/index.d.ts +10 -0
- package/build/lib/actions/after/index.js +26 -0
- package/build/lib/actions/after/null_action.d.ts +6 -0
- package/build/lib/actions/after/null_action.js +14 -0
- package/build/lib/actions/after/omit_years.d.ts +11 -0
- package/build/lib/actions/after/omit_years.js +29 -0
- package/build/lib/actions/after/only_average.d.ts +6 -0
- package/build/lib/actions/after/only_average.js +17 -0
- package/build/lib/actions/after/parse_int_columns.d.ts +9 -0
- package/build/lib/actions/after/parse_int_columns.js +35 -0
- package/build/lib/actions/after/print_points.d.ts +6 -0
- package/build/lib/actions/after/print_points.js +16 -0
- package/build/lib/actions/after/set_month_index.d.ts +9 -0
- package/build/lib/actions/after/set_month_index.js +43 -0
- package/build/lib/actions/after/sort.d.ts +9 -0
- package/build/lib/actions/after/sort.js +29 -0
- package/build/lib/actions/base_chain_factory.d.ts +64 -0
- package/build/lib/actions/base_chain_factory.js +54 -0
- package/build/lib/actions/before/before_action.d.ts +35 -0
- package/build/lib/actions/before/before_action.js +41 -0
- package/build/lib/actions/before/filter_tags_action.d.ts +6 -0
- package/build/lib/actions/before/filter_tags_action.js +35 -0
- package/build/lib/actions/before/index.d.ts +3 -0
- package/build/lib/actions/before/index.js +19 -0
- package/build/lib/actions/before/null_action.d.ts +6 -0
- package/build/lib/actions/before/null_action.js +14 -0
- package/build/lib/actions/chain.d.ts +50 -0
- package/build/lib/actions/chain.js +53 -0
- package/build/lib/actions/chain_factory.d.ts +36 -0
- package/build/lib/actions/chain_factory.js +2 -0
- package/build/lib/actions/index.d.ts +5 -0
- package/build/lib/actions/index.js +21 -0
- package/build/lib/influxdb_client.d.ts +4 -0
- package/build/lib/influxdb_client.js +91 -0
- package/build/lib/models.d.ts +69 -0
- package/build/lib/models.js +50 -0
- package/package.json +34 -0
- package/tsconfig.json +15 -0
- package/tslint.json +6 -0
package/README.md
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# Mercados Pecuarios Analytical Reports Lib
|
|
2
|
+
|
|
3
|
+
Biblioteca de clases comunes para el código en JavaScript/TypeScript para los servicios de Analytical Reports de la Plataforma Big Data que es parte de la solución del Sitio Web Mercados Pecuarios.
|
|
4
|
+
|
|
5
|
+
## Environment Variables
|
package/build/index.d.ts
ADDED
package/build/index.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./lib/actions"), exports);
|
|
18
|
+
__exportStar(require("./lib/influxdb_client"), exports);
|
|
19
|
+
__exportStar(require("./lib/models"), exports);
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { AfterQueryRequest } from "./after/after_action";
|
|
2
|
+
import { BeforeQueryRequest } from "./before/before_action";
|
|
3
|
+
/**
|
|
4
|
+
* Información respecto a una determinada acción a ejecutar para el procesamiento de los puntos.
|
|
5
|
+
*/
|
|
6
|
+
export interface ActionAbstract {
|
|
7
|
+
/**
|
|
8
|
+
* @type {string} Nombre que hace referencia a un Link que ejecuta una determinada acción.
|
|
9
|
+
*/
|
|
10
|
+
name: string;
|
|
11
|
+
/**
|
|
12
|
+
* @type {string} Descripción de la acción, es meramente informativa y puede ser escrita en la consola.
|
|
13
|
+
*/
|
|
14
|
+
description?: string;
|
|
15
|
+
/**
|
|
16
|
+
* @type {any} Parámetros son un objeto que contiene la información que el Link requiere en su constructor.
|
|
17
|
+
*/
|
|
18
|
+
params?: any;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Información de una acción a ejecutar en el proceso Before (antes de la consulta de los puntos).
|
|
22
|
+
*/
|
|
23
|
+
export interface BeforeAction extends ActionAbstract {
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Información de la acción a ejecutar en el proceso After (después de la consulta de los puntos).
|
|
27
|
+
*/
|
|
28
|
+
export interface AfterAction extends ActionAbstract {
|
|
29
|
+
}
|
|
30
|
+
export declare function getActionsController(): ActionsController;
|
|
31
|
+
export declare class ActionsController {
|
|
32
|
+
/**
|
|
33
|
+
* Este método ejecuta el proceso de "Before" antes de la consulta a la base de datos.
|
|
34
|
+
* Retorna una Promesa con la información recopilada a través de la ejecución de la lista de pasos que recibe como parámetro.
|
|
35
|
+
* @param request instancia de la petición para el proceso "Before"
|
|
36
|
+
* @param steps arreglo con la lista de las acciones a ejecutar durante el proceso de "Before" el cual ocurre
|
|
37
|
+
* antes de ejecutar la consulta a la base de datos.
|
|
38
|
+
*/
|
|
39
|
+
before(request: BeforeQueryRequest, steps?: Array<BeforeAction>): Promise<BeforeQueryRequest>;
|
|
40
|
+
/**
|
|
41
|
+
* Este método ejecuta el proceso de "After" después de la consulta a la base de datos.
|
|
42
|
+
* Retorna una Promesa con la información recopilada a través de la ejecución de la lista de pasos que recibe como parámetro.
|
|
43
|
+
* @param request instancia de la petición para el proceso "After"
|
|
44
|
+
* @param steps arreglo con la lista de acciones a ejecutar durante el proceso de "After" el cual ocurre después
|
|
45
|
+
* de ejecutar la consulta a la base de datos.
|
|
46
|
+
*/
|
|
47
|
+
after(request: AfterQueryRequest, steps?: Array<AfterAction>): Promise<AfterQueryRequest>;
|
|
48
|
+
/**
|
|
49
|
+
* Método para generar la secuencia de los pasos (cadena de responsabilidades) a ejecutar en un determinado proceso.
|
|
50
|
+
* La cadena de responsabilidades generada está conformada por un conjunto de eslabones (métodos) que se ejecutan de manera secuencial,
|
|
51
|
+
* cada método recibe una petición como parámetro, realizar el procesamiento correspondiente y pasa la petición y responabilidad al
|
|
52
|
+
* siguiente eslabón (método) de la cadena, así hasta haber pasado por todos los eslabones.
|
|
53
|
+
* @param factory objeto que permite generar la instancia de Link de la cadena de responsabilidades
|
|
54
|
+
* @param steps arreglo con la lista de pasos (Links) a enlazar en la cadena de responsabilidades.
|
|
55
|
+
*/
|
|
56
|
+
private getChain;
|
|
57
|
+
/**
|
|
58
|
+
* Método para generar la secuencia de los pasos (cadena de responsabilidades) a ejecutar en el proceso Before
|
|
59
|
+
* @param steps arreglo con la lista de pasos (Links) a enlazar en la cadena de responsabilidades.
|
|
60
|
+
*/
|
|
61
|
+
private getBeforeChain;
|
|
62
|
+
/**
|
|
63
|
+
* Método para generar la secuencia de los pasos (cadena de responabilidades) a ejecutar en el proceso After
|
|
64
|
+
* @param steps arreglo con la lista de pasos (Links) a enlazar en la cadena de responsabilidades.
|
|
65
|
+
*/
|
|
66
|
+
private getAfterChain;
|
|
67
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ActionsController = exports.getActionsController = void 0;
|
|
13
|
+
const after_action_1 = require("./after/after_action");
|
|
14
|
+
const before_action_1 = require("./before/before_action");
|
|
15
|
+
let actionsController;
|
|
16
|
+
function getActionsController() {
|
|
17
|
+
if (actionsController === undefined) {
|
|
18
|
+
actionsController = new ActionsController();
|
|
19
|
+
}
|
|
20
|
+
return actionsController;
|
|
21
|
+
}
|
|
22
|
+
exports.getActionsController = getActionsController;
|
|
23
|
+
class ActionsController {
|
|
24
|
+
/**
|
|
25
|
+
* Este método ejecuta el proceso de "Before" antes de la consulta a la base de datos.
|
|
26
|
+
* Retorna una Promesa con la información recopilada a través de la ejecución de la lista de pasos que recibe como parámetro.
|
|
27
|
+
* @param request instancia de la petición para el proceso "Before"
|
|
28
|
+
* @param steps arreglo con la lista de las acciones a ejecutar durante el proceso de "Before" el cual ocurre
|
|
29
|
+
* antes de ejecutar la consulta a la base de datos.
|
|
30
|
+
*/
|
|
31
|
+
before(request, steps) {
|
|
32
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
33
|
+
const chain = this.getBeforeChain(steps);
|
|
34
|
+
yield chain.process(request);
|
|
35
|
+
return request;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Este método ejecuta el proceso de "After" después de la consulta a la base de datos.
|
|
40
|
+
* Retorna una Promesa con la información recopilada a través de la ejecución de la lista de pasos que recibe como parámetro.
|
|
41
|
+
* @param request instancia de la petición para el proceso "After"
|
|
42
|
+
* @param steps arreglo con la lista de acciones a ejecutar durante el proceso de "After" el cual ocurre después
|
|
43
|
+
* de ejecutar la consulta a la base de datos.
|
|
44
|
+
*/
|
|
45
|
+
after(request, steps) {
|
|
46
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
+
const chain = this.getAfterChain(steps);
|
|
48
|
+
yield chain.process(request);
|
|
49
|
+
return request;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Método para generar la secuencia de los pasos (cadena de responsabilidades) a ejecutar en un determinado proceso.
|
|
54
|
+
* La cadena de responsabilidades generada está conformada por un conjunto de eslabones (métodos) que se ejecutan de manera secuencial,
|
|
55
|
+
* cada método recibe una petición como parámetro, realizar el procesamiento correspondiente y pasa la petición y responabilidad al
|
|
56
|
+
* siguiente eslabón (método) de la cadena, así hasta haber pasado por todos los eslabones.
|
|
57
|
+
* @param factory objeto que permite generar la instancia de Link de la cadena de responsabilidades
|
|
58
|
+
* @param steps arreglo con la lista de pasos (Links) a enlazar en la cadena de responsabilidades.
|
|
59
|
+
*/
|
|
60
|
+
getChain(factory, steps) {
|
|
61
|
+
if (steps && steps.length > 0) {
|
|
62
|
+
const chain = factory.create(steps[0]);
|
|
63
|
+
let last = chain;
|
|
64
|
+
for (let i = 1; i < steps.length; i++) {
|
|
65
|
+
const link = factory.create(steps[i]);
|
|
66
|
+
last = last.link(link);
|
|
67
|
+
}
|
|
68
|
+
return chain;
|
|
69
|
+
}
|
|
70
|
+
return factory.empty();
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Método para generar la secuencia de los pasos (cadena de responsabilidades) a ejecutar en el proceso Before
|
|
74
|
+
* @param steps arreglo con la lista de pasos (Links) a enlazar en la cadena de responsabilidades.
|
|
75
|
+
*/
|
|
76
|
+
getBeforeChain(steps) {
|
|
77
|
+
const factory = before_action_1.BeforeChainLinkFactory.getInstance();
|
|
78
|
+
return this.getChain(factory, steps);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Método para generar la secuencia de los pasos (cadena de responabilidades) a ejecutar en el proceso After
|
|
82
|
+
* @param steps arreglo con la lista de pasos (Links) a enlazar en la cadena de responsabilidades.
|
|
83
|
+
*/
|
|
84
|
+
getAfterChain(steps) {
|
|
85
|
+
const factory = after_action_1.AfterChainLinkFactory.getInstance();
|
|
86
|
+
return this.getChain(factory, steps);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.ActionsController = ActionsController;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ChainLinkAbstract } from "../chain";
|
|
2
|
+
import { AfterChainLink, AfterQueryRequest } from "./after_action";
|
|
3
|
+
export declare class AddValuesAfterAction extends ChainLinkAbstract<AfterQueryRequest> implements AfterChainLink {
|
|
4
|
+
private _tagKey;
|
|
5
|
+
constructor(params: {
|
|
6
|
+
tagKey: string;
|
|
7
|
+
});
|
|
8
|
+
run(req: AfterQueryRequest): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AddValuesAfterAction = void 0;
|
|
4
|
+
const chain_1 = require("../chain");
|
|
5
|
+
class AddValuesAfterAction extends chain_1.ChainLinkAbstract {
|
|
6
|
+
constructor(params) {
|
|
7
|
+
super();
|
|
8
|
+
this._tagKey = params.tagKey;
|
|
9
|
+
}
|
|
10
|
+
run(req) {
|
|
11
|
+
console.debug(`Processing action ${this.constructor.name}`);
|
|
12
|
+
const tags = req.getPointsQuery.tags;
|
|
13
|
+
const { periodicity } = tags;
|
|
14
|
+
const key = this._tagKey;
|
|
15
|
+
const groupedPoints = {};
|
|
16
|
+
if (key && key != "") {
|
|
17
|
+
for (const point of req.points) {
|
|
18
|
+
const time = point._time;
|
|
19
|
+
const year = point.year;
|
|
20
|
+
const month = point.month;
|
|
21
|
+
const tag = Array.isArray(tags[key]) ? tags[key].join(',') : tags[key];
|
|
22
|
+
const id = `${time}_${tag}`;
|
|
23
|
+
if (!groupedPoints[id]) {
|
|
24
|
+
groupedPoints[id] = { _time: time, year: year || new Date(time).getUTCFullYear(), _value: 0, [key]: [] };
|
|
25
|
+
}
|
|
26
|
+
if (periodicity === "Monthly" && month) {
|
|
27
|
+
groupedPoints[id].month = month;
|
|
28
|
+
}
|
|
29
|
+
groupedPoints[id]._value += point._value;
|
|
30
|
+
if (!groupedPoints[id][key].includes(point[key])) {
|
|
31
|
+
groupedPoints[id][key].push(point[key]);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
req.points = Object.values(groupedPoints);
|
|
35
|
+
}
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.AddValuesAfterAction = AddValuesAfterAction;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { GetPointsQuery } from "../../models";
|
|
2
|
+
import { AfterAction } from "../actions";
|
|
3
|
+
import { BaseChainLinkFactory } from "../base_chain_factory";
|
|
4
|
+
import { ChainLink } from "../chain";
|
|
5
|
+
/**
|
|
6
|
+
* Representación de una solicitud para la cadena de responsabilidades
|
|
7
|
+
* que se ejecuta después de la consulta a la base de datos.
|
|
8
|
+
*/
|
|
9
|
+
export interface AfterQueryRequest {
|
|
10
|
+
getPointsQuery: GetPointsQuery;
|
|
11
|
+
points: any[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Representa un eslabón de una cadena responsabilidades
|
|
15
|
+
* que se ejecuta después de la consulta a la base de datos.
|
|
16
|
+
* Recibe una solicitud del tipo "AfterQueryRequest".
|
|
17
|
+
*/
|
|
18
|
+
export interface AfterChainLink extends ChainLink<AfterQueryRequest> {
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Implementación del Factory para los eslabones de la cadena de responsabilidades
|
|
22
|
+
* que se ejecuta después de la consulta de la base de datos.
|
|
23
|
+
*/
|
|
24
|
+
export declare class AfterChainLinkFactory extends BaseChainLinkFactory<AfterAction, AfterChainLink> {
|
|
25
|
+
private constructor();
|
|
26
|
+
/**
|
|
27
|
+
* Permite obtener la instancia única del Factory
|
|
28
|
+
*/
|
|
29
|
+
static getInstance(): AfterChainLinkFactory;
|
|
30
|
+
/**
|
|
31
|
+
* Genera una instancia del eslabón vacío para la cadena de
|
|
32
|
+
* responsabilidades que se ejecuta después de la prueba
|
|
33
|
+
*/
|
|
34
|
+
empty(): AfterChainLink;
|
|
35
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AfterChainLinkFactory = void 0;
|
|
4
|
+
const base_chain_factory_1 = require("../base_chain_factory");
|
|
5
|
+
const null_action_1 = require("./null_action");
|
|
6
|
+
/**
|
|
7
|
+
* Ruta del archivo que contiene la lista de eslabones conocidos para
|
|
8
|
+
* la cadena de responsabilidades que se ejecuta después de la consulta a la base de datos.
|
|
9
|
+
*/
|
|
10
|
+
const AFTER_LINK_PATH = "../after-actions.json";
|
|
11
|
+
/**
|
|
12
|
+
* Instancia única de la Factory para eslabones de la cadena de responsabilidades
|
|
13
|
+
* que se ejecuta después de la consulta de la base de datos
|
|
14
|
+
*/
|
|
15
|
+
let afterChainLinkFactory = null;
|
|
16
|
+
/**
|
|
17
|
+
* Implementación del Factory para los eslabones de la cadena de responsabilidades
|
|
18
|
+
* que se ejecuta después de la consulta de la base de datos.
|
|
19
|
+
*/
|
|
20
|
+
class AfterChainLinkFactory extends base_chain_factory_1.BaseChainLinkFactory {
|
|
21
|
+
constructor() {
|
|
22
|
+
super(AFTER_LINK_PATH);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Permite obtener la instancia única del Factory
|
|
26
|
+
*/
|
|
27
|
+
static getInstance() {
|
|
28
|
+
if (afterChainLinkFactory === null) {
|
|
29
|
+
afterChainLinkFactory = new AfterChainLinkFactory();
|
|
30
|
+
}
|
|
31
|
+
return afterChainLinkFactory;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Genera una instancia del eslabón vacío para la cadena de
|
|
35
|
+
* responsabilidades que se ejecuta después de la prueba
|
|
36
|
+
*/
|
|
37
|
+
empty() {
|
|
38
|
+
return new null_action_1.NullAfterAction();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.AfterChainLinkFactory = AfterChainLinkFactory;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ChainLinkAbstract } from "../chain";
|
|
2
|
+
import { AfterChainLink, AfterQueryRequest } from "./after_action";
|
|
3
|
+
export declare class AverageAfterAction extends ChainLinkAbstract<AfterQueryRequest> implements AfterChainLink {
|
|
4
|
+
private groupColumn;
|
|
5
|
+
private years;
|
|
6
|
+
private timeColumn;
|
|
7
|
+
private valueColumn;
|
|
8
|
+
constructor(params: {
|
|
9
|
+
groupColumn: string;
|
|
10
|
+
years: number[];
|
|
11
|
+
timeColumn?: string;
|
|
12
|
+
valueColumn?: string;
|
|
13
|
+
});
|
|
14
|
+
run(req: AfterQueryRequest): Promise<void>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AverageAfterAction = void 0;
|
|
4
|
+
const chain_1 = require("../chain");
|
|
5
|
+
class AverageAfterAction extends chain_1.ChainLinkAbstract {
|
|
6
|
+
constructor(params) {
|
|
7
|
+
super();
|
|
8
|
+
this.timeColumn = "_time";
|
|
9
|
+
this.valueColumn = "_value";
|
|
10
|
+
this.groupColumn = params.groupColumn;
|
|
11
|
+
this.years = params.years;
|
|
12
|
+
if (params.timeColumn) {
|
|
13
|
+
this.timeColumn = params.timeColumn;
|
|
14
|
+
}
|
|
15
|
+
if (params.valueColumn) {
|
|
16
|
+
this.valueColumn = params.valueColumn;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
run(req) {
|
|
20
|
+
console.debug(`Processing action ${this.constructor.name}`);
|
|
21
|
+
const groupedPoints = {};
|
|
22
|
+
const k = this.groupColumn;
|
|
23
|
+
const t = this.timeColumn;
|
|
24
|
+
const v = this.valueColumn;
|
|
25
|
+
const isAnnual = req.getPointsQuery.tags["periodicity"] === "Annual" || req.getPointsQuery.tags["periodicity"] === "Agricultural Commercial Cycle";
|
|
26
|
+
if (req.points && Array.isArray(req.points) && req.points.length) {
|
|
27
|
+
req.points.forEach((point) => {
|
|
28
|
+
if (point[k] && point[t]) {
|
|
29
|
+
try {
|
|
30
|
+
const key = point[k];
|
|
31
|
+
if (!groupedPoints[key]) {
|
|
32
|
+
groupedPoints[key] = { years: [], values: [] };
|
|
33
|
+
}
|
|
34
|
+
const date = new Date(point[t]);
|
|
35
|
+
const year = date.getUTCFullYear();
|
|
36
|
+
if (this.years.includes(year)) {
|
|
37
|
+
if (point[v]) {
|
|
38
|
+
const group = groupedPoints[key];
|
|
39
|
+
group.values.push(point[v]);
|
|
40
|
+
if (!group.years.includes(year)) {
|
|
41
|
+
group.years.push(year);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch (reason) { }
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
var _sum = 0;
|
|
50
|
+
var _years = [];
|
|
51
|
+
for (const key in groupedPoints) {
|
|
52
|
+
const group = groupedPoints[key];
|
|
53
|
+
if (group.values.length === 1) {
|
|
54
|
+
if (!_years.includes(parseInt(key))) {
|
|
55
|
+
_years.push(parseInt(key));
|
|
56
|
+
}
|
|
57
|
+
_sum += group.values[0];
|
|
58
|
+
}
|
|
59
|
+
const sum = group.values.reduce((a, b) => a + b, 0);
|
|
60
|
+
const avg = sum / group.values.length;
|
|
61
|
+
const point = {
|
|
62
|
+
isAverage: true,
|
|
63
|
+
years: group.years,
|
|
64
|
+
_value: avg,
|
|
65
|
+
};
|
|
66
|
+
if (!isAnnual) {
|
|
67
|
+
point[k] = key;
|
|
68
|
+
req.points.push(point);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (isAnnual) {
|
|
72
|
+
const point = {
|
|
73
|
+
isAverage: true,
|
|
74
|
+
years: _years,
|
|
75
|
+
_value: _sum / _years.length,
|
|
76
|
+
};
|
|
77
|
+
req.points.push(point);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.AverageAfterAction = AverageAfterAction;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from "./add_values";
|
|
2
|
+
export * from "./after_action";
|
|
3
|
+
export * from "./average";
|
|
4
|
+
export * from "./null_action";
|
|
5
|
+
export * from "./omit_years";
|
|
6
|
+
export * from "./only_average";
|
|
7
|
+
export * from "./parse_int_columns";
|
|
8
|
+
export * from "./print_points";
|
|
9
|
+
export * from "./set_month_index";
|
|
10
|
+
export * from "./sort";
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./add_values"), exports);
|
|
18
|
+
__exportStar(require("./after_action"), exports);
|
|
19
|
+
__exportStar(require("./average"), exports);
|
|
20
|
+
__exportStar(require("./null_action"), exports);
|
|
21
|
+
__exportStar(require("./omit_years"), exports);
|
|
22
|
+
__exportStar(require("./only_average"), exports);
|
|
23
|
+
__exportStar(require("./parse_int_columns"), exports);
|
|
24
|
+
__exportStar(require("./print_points"), exports);
|
|
25
|
+
__exportStar(require("./set_month_index"), exports);
|
|
26
|
+
__exportStar(require("./sort"), exports);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ChainLinkAbstract } from "../chain";
|
|
2
|
+
import { AfterChainLink, AfterQueryRequest } from "./after_action";
|
|
3
|
+
export declare class NullAfterAction extends ChainLinkAbstract<AfterQueryRequest> implements AfterChainLink {
|
|
4
|
+
constructor();
|
|
5
|
+
run(req: AfterQueryRequest): Promise<void>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NullAfterAction = void 0;
|
|
4
|
+
const chain_1 = require("../chain");
|
|
5
|
+
class NullAfterAction extends chain_1.ChainLinkAbstract {
|
|
6
|
+
constructor() {
|
|
7
|
+
super();
|
|
8
|
+
}
|
|
9
|
+
run(req) {
|
|
10
|
+
console.debug(`Processing action ${this.constructor.name}`);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.NullAfterAction = NullAfterAction;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ChainLinkAbstract } from "../chain";
|
|
2
|
+
import { AfterChainLink, AfterQueryRequest } from "./after_action";
|
|
3
|
+
export declare class OmitYearsAfterAction extends ChainLinkAbstract<AfterQueryRequest> implements AfterChainLink {
|
|
4
|
+
private years;
|
|
5
|
+
private timeColumn;
|
|
6
|
+
constructor(params: {
|
|
7
|
+
years: number[];
|
|
8
|
+
timeColumn?: string;
|
|
9
|
+
});
|
|
10
|
+
run(req: AfterQueryRequest): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OmitYearsAfterAction = void 0;
|
|
4
|
+
const chain_1 = require("../chain");
|
|
5
|
+
class OmitYearsAfterAction extends chain_1.ChainLinkAbstract {
|
|
6
|
+
constructor(params) {
|
|
7
|
+
var _a;
|
|
8
|
+
super();
|
|
9
|
+
this.timeColumn = "_time";
|
|
10
|
+
this.years = params.years;
|
|
11
|
+
this.timeColumn = (_a = params.timeColumn) !== null && _a !== void 0 ? _a : this.timeColumn;
|
|
12
|
+
}
|
|
13
|
+
run(req) {
|
|
14
|
+
console.debug(`Processing action ${this.constructor.name}`);
|
|
15
|
+
if (req.points && Array.isArray(req.points)) {
|
|
16
|
+
req.points = req.points.filter(point => {
|
|
17
|
+
if (point.year) {
|
|
18
|
+
return !this.years.includes(point.year);
|
|
19
|
+
}
|
|
20
|
+
const timeKey = this.timeColumn;
|
|
21
|
+
const date = new Date(point[timeKey]);
|
|
22
|
+
const year = date.getUTCFullYear();
|
|
23
|
+
return !this.years.includes(year);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.OmitYearsAfterAction = OmitYearsAfterAction;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ChainLinkAbstract } from "../chain";
|
|
2
|
+
import { AfterChainLink, AfterQueryRequest } from "./after_action";
|
|
3
|
+
export declare class OnlyAverageAfterAction extends ChainLinkAbstract<AfterQueryRequest> implements AfterChainLink {
|
|
4
|
+
constructor();
|
|
5
|
+
run(req: AfterQueryRequest): Promise<void>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OnlyAverageAfterAction = void 0;
|
|
4
|
+
const chain_1 = require("../chain");
|
|
5
|
+
class OnlyAverageAfterAction extends chain_1.ChainLinkAbstract {
|
|
6
|
+
constructor() {
|
|
7
|
+
super();
|
|
8
|
+
}
|
|
9
|
+
run(req) {
|
|
10
|
+
console.debug(`Processing action ${this.constructor.name}`);
|
|
11
|
+
if (req.points && Array.isArray(req.points)) {
|
|
12
|
+
req.points = req.points.filter(p => p.isAverage);
|
|
13
|
+
}
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.OnlyAverageAfterAction = OnlyAverageAfterAction;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ChainLinkAbstract } from "../chain";
|
|
2
|
+
import { AfterChainLink, AfterQueryRequest } from "./after_action";
|
|
3
|
+
export declare class ParseIntColumnsAfterAction extends ChainLinkAbstract<AfterQueryRequest> implements AfterChainLink {
|
|
4
|
+
private columns;
|
|
5
|
+
constructor(params: {
|
|
6
|
+
columns: string | string[];
|
|
7
|
+
});
|
|
8
|
+
run(req: AfterQueryRequest): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ParseIntColumnsAfterAction = void 0;
|
|
4
|
+
const chain_1 = require("../chain");
|
|
5
|
+
class ParseIntColumnsAfterAction extends chain_1.ChainLinkAbstract {
|
|
6
|
+
constructor(params) {
|
|
7
|
+
super();
|
|
8
|
+
if (Array.isArray(params.columns)) {
|
|
9
|
+
this.columns = params.columns;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
this.columns = params.columns.split(",");
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
run(req) {
|
|
16
|
+
console.debug(`Processing action ${this.constructor.name}`);
|
|
17
|
+
if (req.points && Array.isArray(req.points)) {
|
|
18
|
+
req.points.forEach((point) => {
|
|
19
|
+
this.columns.forEach((k) => {
|
|
20
|
+
if (point[k]) {
|
|
21
|
+
if (typeof point[k] === "string") {
|
|
22
|
+
try {
|
|
23
|
+
const n = parseInt(point[k], 10);
|
|
24
|
+
point[k] = n;
|
|
25
|
+
}
|
|
26
|
+
catch (error) { }
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.ParseIntColumnsAfterAction = ParseIntColumnsAfterAction;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ChainLinkAbstract } from "../chain";
|
|
2
|
+
import { AfterChainLink, AfterQueryRequest } from "./after_action";
|
|
3
|
+
export declare class PrintPointsAfterAction extends ChainLinkAbstract<AfterQueryRequest> implements AfterChainLink {
|
|
4
|
+
constructor();
|
|
5
|
+
run(req: AfterQueryRequest): Promise<void>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PrintPointsAfterAction = void 0;
|
|
4
|
+
const chain_1 = require("../chain");
|
|
5
|
+
class PrintPointsAfterAction extends chain_1.ChainLinkAbstract {
|
|
6
|
+
constructor() {
|
|
7
|
+
super();
|
|
8
|
+
}
|
|
9
|
+
run(req) {
|
|
10
|
+
if (req.points && Array.isArray(req.points)) {
|
|
11
|
+
req.points.forEach((point) => console.log(point));
|
|
12
|
+
}
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.PrintPointsAfterAction = PrintPointsAfterAction;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ChainLinkAbstract } from "../chain";
|
|
2
|
+
import { AfterChainLink, AfterQueryRequest } from "./after_action";
|
|
3
|
+
export declare class SetMonthIndexAfterAction extends ChainLinkAbstract<AfterQueryRequest> implements AfterChainLink {
|
|
4
|
+
private column;
|
|
5
|
+
constructor(params?: {
|
|
6
|
+
column?: string;
|
|
7
|
+
});
|
|
8
|
+
run(req: AfterQueryRequest): Promise<void>;
|
|
9
|
+
}
|