@golemio/energetics 1.3.4 → 1.3.5-dev.1298662589
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/dist/input-gateway/index.d.ts +1 -0
- package/dist/input-gateway/index.js +18 -0
- package/dist/input-gateway/index.js.map +1 -0
- package/dist/input-gateway/ptas/PtasRouter.d.ts +12 -0
- package/dist/input-gateway/ptas/PtasRouter.js +80 -0
- package/dist/input-gateway/ptas/PtasRouter.js.map +1 -0
- package/dist/input-gateway/ptas/PtasWebScrapingController.d.ts +10 -0
- package/dist/input-gateway/ptas/PtasWebScrapingController.js +41 -0
- package/dist/input-gateway/ptas/PtasWebScrapingController.js.map +1 -0
- package/dist/input-gateway/ptas/index.d.ts +2 -0
- package/dist/input-gateway/ptas/index.js +19 -0
- package/dist/input-gateway/ptas/index.js.map +1 -0
- package/dist/integration-engine/commodity-providers/ioc/Di.js +4 -0
- package/dist/integration-engine/commodity-providers/ioc/Di.js.map +1 -1
- package/dist/integration-engine/commodity-providers/ioc/WorkerContainerToken.d.ts +2 -0
- package/dist/integration-engine/commodity-providers/ioc/WorkerContainerToken.js +2 -0
- package/dist/integration-engine/commodity-providers/ioc/WorkerContainerToken.js.map +1 -1
- package/dist/integration-engine/commodity-providers/transformations/PtasWebMeasurementTransformation.d.ts +17 -0
- package/dist/integration-engine/commodity-providers/transformations/PtasWebMeasurementTransformation.js +40 -0
- package/dist/integration-engine/commodity-providers/transformations/PtasWebMeasurementTransformation.js.map +1 -0
- package/dist/integration-engine/commodity-providers/workers/CommodityWorker.d.ts +3 -2
- package/dist/integration-engine/commodity-providers/workers/CommodityWorker.js +1 -0
- package/dist/integration-engine/commodity-providers/workers/CommodityWorker.js.map +1 -1
- package/dist/integration-engine/commodity-providers/workers/tasks/FetchMeasurementOptionsStaticDataTask.js +1 -0
- package/dist/integration-engine/commodity-providers/workers/tasks/FetchMeasurementOptionsStaticDataTask.js.map +1 -1
- package/dist/integration-engine/commodity-providers/workers/tasks/FetchPtasWebScrapedMeasurementsTask.d.ts +20 -0
- package/dist/integration-engine/commodity-providers/workers/tasks/FetchPtasWebScrapedMeasurementsTask.js +85 -0
- package/dist/integration-engine/commodity-providers/workers/tasks/FetchPtasWebScrapedMeasurementsTask.js.map +1 -0
- package/dist/schema-definitions/datasources/PtasWebScrapingJsonSchema.d.ts +3 -0
- package/dist/schema-definitions/datasources/PtasWebScrapingJsonSchema.js +41 -0
- package/dist/schema-definitions/datasources/PtasWebScrapingJsonSchema.js.map +1 -0
- package/dist/schema-definitions/datasources/interfaces/PtasWebScrapingInput.d.ts +16 -0
- package/dist/schema-definitions/datasources/interfaces/PtasWebScrapingInput.js +3 -0
- package/dist/schema-definitions/datasources/interfaces/PtasWebScrapingInput.js.map +1 -0
- package/dist/schema-definitions/models/helpers/CommodityProviderTypeEnum.d.ts +2 -1
- package/dist/schema-definitions/models/helpers/CommodityProviderTypeEnum.js +1 -0
- package/dist/schema-definitions/models/helpers/CommodityProviderTypeEnum.js.map +1 -1
- package/docs/assets/commodity_erd.jpg +0 -0
- package/docs/assets/consumption_energy_erd.png +0 -0
- package/docs/assets/vpalac_erd.png +0 -0
- package/docs/implementation_documentation.md +402 -0
- package/docs/openapi-input.yaml +97 -0
- package/package.json +10 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./ptas";
|
|
@@ -0,0 +1,18 @@
|
|
|
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("./ptas"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/input-gateway/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/// <reference types="express" />
|
|
2
|
+
import { Router } from "@golemio/core/dist/shared/express";
|
|
3
|
+
export declare class PtasRouter {
|
|
4
|
+
router: Router;
|
|
5
|
+
private controller;
|
|
6
|
+
constructor();
|
|
7
|
+
private initRoutes;
|
|
8
|
+
private post;
|
|
9
|
+
private parseCSV;
|
|
10
|
+
}
|
|
11
|
+
declare const ptasRouter: Router;
|
|
12
|
+
export { ptasRouter };
|
|
@@ -0,0 +1,80 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.ptasRouter = exports.PtasRouter = void 0;
|
|
36
|
+
const PtasWebScrapingController_1 = require("./PtasWebScrapingController");
|
|
37
|
+
const helpers_1 = require("@golemio/core/dist/input-gateway/helpers");
|
|
38
|
+
const express_1 = require("@golemio/core/dist/shared/express");
|
|
39
|
+
const csv = __importStar(require("@fast-csv/parse"));
|
|
40
|
+
class PtasRouter {
|
|
41
|
+
constructor() {
|
|
42
|
+
this.initRoutes = () => {
|
|
43
|
+
this.router.post("/:idOdbernehoMista", (0, helpers_1.checkContentTypeMiddleware)(["text/plain"]), this.post);
|
|
44
|
+
};
|
|
45
|
+
this.post = (req, res, next) => __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
try {
|
|
47
|
+
const parsedCsv = (yield this.parseCSV(req.body));
|
|
48
|
+
yield this.controller.processData({
|
|
49
|
+
idOdbernehoMista: req.params.idOdbernehoMista,
|
|
50
|
+
measurements: parsedCsv,
|
|
51
|
+
});
|
|
52
|
+
res.sendStatus(204);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
next(err);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
this.parseCSV = (data) => {
|
|
59
|
+
return new Promise((resolve, reject) => {
|
|
60
|
+
const parsedCsvData = [];
|
|
61
|
+
const stream = csv
|
|
62
|
+
.parse({ headers: true, delimiter: ";" })
|
|
63
|
+
.on("data", (data) => {
|
|
64
|
+
parsedCsvData.push(data);
|
|
65
|
+
})
|
|
66
|
+
.on("end", () => resolve(parsedCsvData))
|
|
67
|
+
.on("error", (error) => reject(error));
|
|
68
|
+
stream.write(data);
|
|
69
|
+
stream.end();
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
this.router = (0, express_1.Router)();
|
|
73
|
+
this.controller = new PtasWebScrapingController_1.PtasWebScrapingController();
|
|
74
|
+
this.initRoutes();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.PtasRouter = PtasRouter;
|
|
78
|
+
const ptasRouter = new PtasRouter().router;
|
|
79
|
+
exports.ptasRouter = ptasRouter;
|
|
80
|
+
//# sourceMappingURL=PtasRouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PtasRouter.js","sourceRoot":"","sources":["../../../src/input-gateway/ptas/PtasRouter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2EAA+E;AAE/E,sEAAsF;AACtF,+DAA4F;AAC5F,qDAAuC;AACvC,MAAa,UAAU;IAInB;QAMQ,eAAU,GAAG,GAAS,EAAE;YAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAA,oCAA0B,EAAC,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAClG,CAAC,CAAC;QAEM,SAAI,GAAG,CAAO,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAiB,EAAE;YACpF,IAAI;gBACA,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAuB,CAAC;gBAExE,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;oBAC9B,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,gBAAgB;oBAC7C,YAAY,EAAE,SAAS;iBAC1B,CAAC,CAAC;gBAEH,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aACvB;YAAC,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC,GAAG,CAAC,CAAC;aACb;QACL,CAAC,CAAA,CAAC;QAEM,aAAQ,GAAG,CAAC,IAAY,EAAE,EAAE;YAChC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACnC,MAAM,aAAa,GAAuB,EAAE,CAAC;gBAC7C,MAAM,MAAM,GAAG,GAAG;qBACb,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;qBACxC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;oBACjB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7B,CAAC,CAAC;qBACD,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;qBACvC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAE3C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACnB,MAAM,CAAC,GAAG,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAtCE,IAAI,CAAC,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,qDAAyB,EAAE,CAAC;QAClD,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;CAoCJ;AA5CD,gCA4CC;AAED,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC,MAAM,CAAC;AAElC,gCAAU"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IPtasWebScrapingInput } from "../../schema-definitions/datasources/interfaces/PtasWebScrapingInput";
|
|
2
|
+
import { BaseController } from "@golemio/core/dist/input-gateway/controllers";
|
|
3
|
+
import { JSONSchemaValidator } from "@golemio/core/dist/shared/golemio-validator";
|
|
4
|
+
export declare class PtasWebScrapingController extends BaseController {
|
|
5
|
+
name: string;
|
|
6
|
+
protected validator: JSONSchemaValidator;
|
|
7
|
+
protected queuePrefix: string;
|
|
8
|
+
constructor();
|
|
9
|
+
processData: (inputData: IPtasWebScrapingInput) => Promise<void>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
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.PtasWebScrapingController = void 0;
|
|
13
|
+
const constants_1 = require("../../integration-engine/commodity-providers/constants");
|
|
14
|
+
const PtasWebScrapingJsonSchema_1 = require("../../schema-definitions/datasources/PtasWebScrapingJsonSchema");
|
|
15
|
+
const controllers_1 = require("@golemio/core/dist/input-gateway/controllers");
|
|
16
|
+
const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
|
|
17
|
+
const golemio_validator_1 = require("@golemio/core/dist/shared/golemio-validator");
|
|
18
|
+
class PtasWebScrapingController extends controllers_1.BaseController {
|
|
19
|
+
constructor() {
|
|
20
|
+
super(constants_1.WORKER_NAME, new golemio_validator_1.JSONSchemaValidator("PtasWebScrapingController", PtasWebScrapingJsonSchema_1.ptasWebScrapingJsonSchema));
|
|
21
|
+
this.processData = (inputData) => __awaiter(this, void 0, void 0, function* () {
|
|
22
|
+
try {
|
|
23
|
+
yield this.validator.Validate(inputData);
|
|
24
|
+
const queue = "input." + this.queuePrefix + ".savePtasMeasurements";
|
|
25
|
+
yield this.sendMessageToExchange(queue, JSON.stringify(inputData), {
|
|
26
|
+
persistent: true,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
if (err instanceof golemio_errors_1.AbstractGolemioError) {
|
|
31
|
+
throw err;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
throw new golemio_errors_1.GeneralError("Error while validating input data.", this.name, err, 422);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.PtasWebScrapingController = PtasWebScrapingController;
|
|
41
|
+
//# sourceMappingURL=PtasWebScrapingController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PtasWebScrapingController.js","sourceRoot":"","sources":["../../../src/input-gateway/ptas/PtasWebScrapingController.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sFAAgE;AAChE,8GAAuF;AAEvF,8EAA8E;AAC9E,6EAA8F;AAC9F,mFAAkF;AAElF,MAAa,yBAA0B,SAAQ,4BAAc;IAKzD;QACI,KAAK,CAAC,uBAAW,EAAE,IAAI,uCAAmB,CAAC,2BAA2B,EAAE,qDAAyB,CAAC,CAAC,CAAC;QAGxG,gBAAW,GAAG,CAAO,SAAgC,EAAiB,EAAE;YACpE,IAAI;gBACA,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACzC,MAAM,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC,WAAW,GAAG,uBAAuB,CAAC;gBAEpE,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;oBAC/D,UAAU,EAAE,IAAI;iBACnB,CAAC,CAAC;aACN;YAAC,OAAO,GAAG,EAAE;gBACV,IAAI,GAAG,YAAY,qCAAoB,EAAE;oBACrC,MAAM,GAAG,CAAC;iBACb;qBAAM;oBACH,MAAM,IAAI,6BAAY,CAAC,oCAAoC,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;iBACrF;aACJ;QACL,CAAC,CAAA,CAAC;IAjBF,CAAC;CAkBJ;AAzBD,8DAyBC"}
|
|
@@ -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("./PtasRouter"), exports);
|
|
18
|
+
__exportStar(require("./PtasWebScrapingController"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/input-gateway/ptas/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,8DAA4C"}
|
|
@@ -19,6 +19,8 @@ const FetchPreMeasurementDataTask_1 = require("../workers/tasks/FetchPreMeasurem
|
|
|
19
19
|
const WorkerContainerToken_1 = require("./WorkerContainerToken");
|
|
20
20
|
const PreElectroApiDataSourceProvider_1 = require("../datasources/pre-elektro-api/PreElectroApiDataSourceProvider");
|
|
21
21
|
const PreElectroHelper_1 = require("../datasources/pre-elektro-api/helpers/PreElectroHelper");
|
|
22
|
+
const PtasWebMeasurementTransformation_1 = require("../transformations/PtasWebMeasurementTransformation");
|
|
23
|
+
const FetchPtasWebScrapedMeasurementsTask_1 = require("../workers/tasks/FetchPtasWebScrapedMeasurementsTask");
|
|
22
24
|
//#region Initialization
|
|
23
25
|
const CommodityContainer = Di_1.VPalaceContainer.createChildContainer();
|
|
24
26
|
exports.CommodityContainer = CommodityContainer;
|
|
@@ -38,6 +40,7 @@ CommodityContainer.register(WorkerContainerToken_1.WorkerContainerToken.StaticMe
|
|
|
38
40
|
CommodityContainer.registerSingleton(WorkerContainerToken_1.WorkerContainerToken.CemMeasurementTransformation, CemMeasurementTransformation_1.CemMeasurementTransformation);
|
|
39
41
|
CommodityContainer.registerSingleton(WorkerContainerToken_1.WorkerContainerToken.AveMeasurementTransformation, AveMeasurementTransformation_1.AveMeasurementTransformation);
|
|
40
42
|
CommodityContainer.registerSingleton(WorkerContainerToken_1.WorkerContainerToken.PreElectroTransformation, PreElectroTransformation_1.PreElectroTransformation);
|
|
43
|
+
CommodityContainer.registerSingleton(WorkerContainerToken_1.WorkerContainerToken.PtasWebMeasurementTransformation, PtasWebMeasurementTransformation_1.PtasWebMeasurementTransformation);
|
|
41
44
|
//#endregion
|
|
42
45
|
//#region Factory
|
|
43
46
|
//#endregion
|
|
@@ -47,6 +50,7 @@ CommodityContainer.register(WorkerContainerToken_1.WorkerContainerToken.FetchVeo
|
|
|
47
50
|
CommodityContainer.register(WorkerContainerToken_1.WorkerContainerToken.FetchPpasMeasurementsTask, FetchPpasMeasurementsTask_1.FetchPpasMeasurementsTask);
|
|
48
51
|
CommodityContainer.register(WorkerContainerToken_1.WorkerContainerToken.FetchMeasurementOptionsStaticDataTask, FetchMeasurementOptionsStaticDataTask_1.FetchMeasurementOptionsStaticDataTask);
|
|
49
52
|
CommodityContainer.register(WorkerContainerToken_1.WorkerContainerToken.FetchPreMeasurementDataTask, FetchPreMeasurementDataTask_1.FetchPreMeasurementDataTask);
|
|
53
|
+
CommodityContainer.registerSingleton(WorkerContainerToken_1.WorkerContainerToken.FetchPtasWebScrapedMeasurementsTask, FetchPtasWebScrapedMeasurementsTask_1.FetchPtasWebScrapedMeasurementsTask);
|
|
50
54
|
//#endregion
|
|
51
55
|
//#region Helpers
|
|
52
56
|
CommodityContainer.register(WorkerContainerToken_1.WorkerContainerToken.PreElectroHelper, PreElectroHelper_1.PreElectroHelper);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Di.js","sourceRoot":"","sources":["../../../../src/integration-engine/commodity-providers/ioc/Di.ts"],"names":[],"mappings":";;;AAAA,0GAA4H;AAC5H,8FAAgH;AAChH,4HAA8I;AAC9I,iFAAmG;AACnG,kGAAoH;AACpH,kHAAoI;AACpI,8FAAgH;AAChH,qCAA8C;AAE9C,2GAAwG;AACxG,iGAA8F;AAC9F,kGAA+F;AAC/F,0FAAuF;AACvF,4GAAyG;AACzG,0FAAuF;AACvF,8FAA2F;AAC3F,iEAA8D;AAC9D,oHAAiH;AACjH,8FAA2F;
|
|
1
|
+
{"version":3,"file":"Di.js","sourceRoot":"","sources":["../../../../src/integration-engine/commodity-providers/ioc/Di.ts"],"names":[],"mappings":";;;AAAA,0GAA4H;AAC5H,8FAAgH;AAChH,4HAA8I;AAC9I,iFAAmG;AACnG,kGAAoH;AACpH,kHAAoI;AACpI,8FAAgH;AAChH,qCAA8C;AAE9C,2GAAwG;AACxG,iGAA8F;AAC9F,kGAA+F;AAC/F,0FAAuF;AACvF,4GAAyG;AACzG,0FAAuF;AACvF,8FAA2F;AAC3F,iEAA8D;AAC9D,oHAAiH;AACjH,8FAA2F;AAC3F,0GAAuG;AACvG,8GAA2G;AAE3G,wBAAwB;AACxB,MAAM,kBAAkB,GAAwB,qBAAgB,CAAC,oBAAoB,EAAE,CAAC;AAyC/E,gDAAkB;AAxC3B,YAAY;AAEZ,oBAAoB;AACpB,kBAAkB,CAAC,QAAQ,CAAC,2CAAoB,CAAC,wBAAwB,EAAE,mDAAwB,CAAC,CAAC;AACrG,kBAAkB,CAAC,QAAQ,CAAC,2CAAoB,CAAC,4BAA4B,EAAE,2DAA4B,CAAC,CAAC;AAC7G,kBAAkB,CAAC,QAAQ,CAAC,2CAAoB,CAAC,kCAAkC,EAAE,uEAAkC,CAAC,CAAC;AACzH,kBAAkB,CAAC,QAAQ,CAAC,2CAAoB,CAAC,qCAAqC,EAAE,6EAAqC,CAAC,CAAC;AAC/H,kBAAkB,CAAC,QAAQ,CAAC,2CAAoB,CAAC,+BAA+B,EAAE,iEAA+B,CAAC,CAAC;AACnH,YAAY;AAEZ,sBAAsB;AACtB,kBAAkB,CAAC,QAAQ,CAAC,2CAAoB,CAAC,qBAAqB,EAAE,6CAAqB,CAAC,CAAC;AAC/F,kBAAkB,CAAC,QAAQ,CAAC,2CAAoB,CAAC,6BAA6B,EAAE,6DAA6B,CAAC,CAAC;AAC/G,YAAY;AAEZ,wBAAwB;AACxB,kBAAkB,CAAC,iBAAiB,CAAC,2CAAoB,CAAC,4BAA4B,EAAE,2DAA4B,CAAC,CAAC;AACtH,kBAAkB,CAAC,iBAAiB,CAAC,2CAAoB,CAAC,4BAA4B,EAAE,2DAA4B,CAAC,CAAC;AACtH,kBAAkB,CAAC,iBAAiB,CAAC,2CAAoB,CAAC,wBAAwB,EAAE,mDAAwB,CAAC,CAAC;AAC9G,kBAAkB,CAAC,iBAAiB,CAAC,2CAAoB,CAAC,gCAAgC,EAAE,mEAAgC,CAAC,CAAC;AAC9H,YAAY;AAEZ,iBAAiB;AACjB,YAAY;AAEZ,eAAe;AACf,kBAAkB,CAAC,QAAQ,CAAC,2CAAoB,CAAC,kCAAkC,EAAE,uEAAkC,CAAC,CAAC;AACzH,kBAAkB,CAAC,QAAQ,CAAC,2CAAoB,CAAC,2BAA2B,EAAE,yDAA2B,CAAC,CAAC;AAC3G,kBAAkB,CAAC,QAAQ,CAAC,2CAAoB,CAAC,yBAAyB,EAAE,qDAAyB,CAAC,CAAC;AACvG,kBAAkB,CAAC,QAAQ,CAAC,2CAAoB,CAAC,qCAAqC,EAAE,6EAAqC,CAAC,CAAC;AAC/H,kBAAkB,CAAC,QAAQ,CAAC,2CAAoB,CAAC,2BAA2B,EAAE,yDAA2B,CAAC,CAAC;AAC3G,kBAAkB,CAAC,iBAAiB,CAChC,2CAAoB,CAAC,mCAAmC,EACxD,yEAAmC,CACtC,CAAC;AACF,YAAY;AAEZ,iBAAiB;AACjB,kBAAkB,CAAC,QAAQ,CAAC,2CAAoB,CAAC,gBAAgB,EAAE,mCAAgB,CAAC,CAAC"}
|
|
@@ -15,5 +15,7 @@ declare const WorkerContainerToken: {
|
|
|
15
15
|
PreElectroTransformation: symbol;
|
|
16
16
|
PreElectroApiDataSourceProvider: symbol;
|
|
17
17
|
PreElectroHelper: symbol;
|
|
18
|
+
PtasWebMeasurementTransformation: symbol;
|
|
19
|
+
FetchPtasWebScrapedMeasurementsTask: symbol;
|
|
18
20
|
};
|
|
19
21
|
export { WorkerContainerToken };
|
|
@@ -18,6 +18,8 @@ const WorkerContainerToken = {
|
|
|
18
18
|
PreElectroTransformation: Symbol(),
|
|
19
19
|
PreElectroApiDataSourceProvider: Symbol(),
|
|
20
20
|
PreElectroHelper: Symbol(),
|
|
21
|
+
PtasWebMeasurementTransformation: Symbol(),
|
|
22
|
+
FetchPtasWebScrapedMeasurementsTask: Symbol(),
|
|
21
23
|
};
|
|
22
24
|
exports.WorkerContainerToken = WorkerContainerToken;
|
|
23
25
|
//# sourceMappingURL=WorkerContainerToken.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkerContainerToken.js","sourceRoot":"","sources":["../../../../src/integration-engine/commodity-providers/ioc/WorkerContainerToken.ts"],"names":[],"mappings":";;;AAAA,MAAM,oBAAoB,GAAG;IACzB,wBAAwB,EAAE,MAAM,EAAE;IAClC,4BAA4B,EAAE,MAAM,EAAE;IACtC,kCAAkC,EAAE,MAAM,EAAE;IAC5C,qCAAqC,EAAE,MAAM,EAAE;IAC/C,4BAA4B,EAAE,MAAM,EAAE;IACtC,4BAA4B,EAAE,MAAM,EAAE;IACtC,qBAAqB,EAAE,MAAM,EAAE;IAC/B,6BAA6B,EAAE,MAAM,EAAE;IACvC,kCAAkC,EAAE,MAAM,EAAE;IAC5C,2BAA2B,EAAE,MAAM,EAAE;IACrC,yBAAyB,EAAE,MAAM,EAAE;IACnC,qCAAqC,EAAE,MAAM,EAAE;IAC/C,2BAA2B,EAAE,MAAM,EAAE;IACrC,wBAAwB,EAAE,MAAM,EAAE;IAClC,+BAA+B,EAAE,MAAM,EAAE;IACzC,gBAAgB,EAAE,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"WorkerContainerToken.js","sourceRoot":"","sources":["../../../../src/integration-engine/commodity-providers/ioc/WorkerContainerToken.ts"],"names":[],"mappings":";;;AAAA,MAAM,oBAAoB,GAAG;IACzB,wBAAwB,EAAE,MAAM,EAAE;IAClC,4BAA4B,EAAE,MAAM,EAAE;IACtC,kCAAkC,EAAE,MAAM,EAAE;IAC5C,qCAAqC,EAAE,MAAM,EAAE;IAC/C,4BAA4B,EAAE,MAAM,EAAE;IACtC,4BAA4B,EAAE,MAAM,EAAE;IACtC,qBAAqB,EAAE,MAAM,EAAE;IAC/B,6BAA6B,EAAE,MAAM,EAAE;IACvC,kCAAkC,EAAE,MAAM,EAAE;IAC5C,2BAA2B,EAAE,MAAM,EAAE;IACrC,yBAAyB,EAAE,MAAM,EAAE;IACnC,qCAAqC,EAAE,MAAM,EAAE;IAC/C,2BAA2B,EAAE,MAAM,EAAE;IACrC,wBAAwB,EAAE,MAAM,EAAE;IAClC,+BAA+B,EAAE,MAAM,EAAE;IACzC,gBAAgB,EAAE,MAAM,EAAE;IAC1B,gCAAgC,EAAE,MAAM,EAAE;IAC1C,mCAAmC,EAAE,MAAM,EAAE;CAChD,CAAC;AAEO,oDAAoB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IMeasurementOption } from "../../../schema-definitions/datasources/interfaces/IStaticMeterSettings";
|
|
2
|
+
import { IPtasMeasurement } from "../../../schema-definitions/datasources/interfaces/PtasWebScrapingInput";
|
|
3
|
+
import { IMeasurementDto } from "../../../schema-definitions/models/interfaces/IMeasurementDto";
|
|
4
|
+
import { AbstractTransformation } from "@golemio/core/dist/helpers/transformation/AbstractTransformation";
|
|
5
|
+
export declare class PtasWebMeasurementTransformation extends AbstractTransformation<{
|
|
6
|
+
option: IMeasurementOption;
|
|
7
|
+
} & {
|
|
8
|
+
measurement: IPtasMeasurement;
|
|
9
|
+
}, IMeasurementDto> {
|
|
10
|
+
name: string;
|
|
11
|
+
private dateFormatSetting;
|
|
12
|
+
protected transformInternal: (data: {
|
|
13
|
+
option: IMeasurementOption;
|
|
14
|
+
} & {
|
|
15
|
+
measurement: IPtasMeasurement;
|
|
16
|
+
}) => IMeasurementDto;
|
|
17
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.PtasWebMeasurementTransformation = void 0;
|
|
10
|
+
const CommodityProviderTypeEnum_1 = require("../../../schema-definitions/models/helpers/CommodityProviderTypeEnum");
|
|
11
|
+
const AbstractTransformation_1 = require("@golemio/core/dist/helpers/transformation/AbstractTransformation");
|
|
12
|
+
const luxon_1 = require("@golemio/core/dist/shared/luxon");
|
|
13
|
+
const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
|
|
14
|
+
let PtasWebMeasurementTransformation = exports.PtasWebMeasurementTransformation = class PtasWebMeasurementTransformation extends AbstractTransformation_1.AbstractTransformation {
|
|
15
|
+
constructor() {
|
|
16
|
+
super(...arguments);
|
|
17
|
+
this.name = "PtasWebMeasurementTransformation";
|
|
18
|
+
this.dateFormatSetting = "d.M.yyyy H:mm";
|
|
19
|
+
this.transformInternal = (data) => {
|
|
20
|
+
return {
|
|
21
|
+
addr: data.option.Addr,
|
|
22
|
+
source: CommodityProviderTypeEnum_1.CommodityProviderType.PtasOptions,
|
|
23
|
+
meter: data.option.Meter,
|
|
24
|
+
timestamp: luxon_1.DateTime.fromFormat(`${data.measurement["Datum odečtu"]} ${data.measurement["Čas odečtu"]}`, this.dateFormatSetting, {
|
|
25
|
+
zone: "Europe/Prague",
|
|
26
|
+
})
|
|
27
|
+
.toUTC()
|
|
28
|
+
.toJSDate(),
|
|
29
|
+
variable: data.option.Var,
|
|
30
|
+
type: data.option.Type,
|
|
31
|
+
value: parseFloat(data.measurement["Odečet"].replaceAll(" ", "").replace(",", ".")),
|
|
32
|
+
measurement_category: data.option.Name,
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
exports.PtasWebMeasurementTransformation = PtasWebMeasurementTransformation = __decorate([
|
|
38
|
+
(0, tsyringe_1.injectable)()
|
|
39
|
+
], PtasWebMeasurementTransformation);
|
|
40
|
+
//# sourceMappingURL=PtasWebMeasurementTransformation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PtasWebMeasurementTransformation.js","sourceRoot":"","sources":["../../../../src/integration-engine/commodity-providers/transformations/PtasWebMeasurementTransformation.ts"],"names":[],"mappings":";;;;;;;;;AAEA,oHAAsF;AAEtF,6GAA0G;AAC1G,2DAA2D;AAC3D,iEAAgE;AAGzD,IAAM,gCAAgC,8CAAtC,MAAM,gCAAiC,SAAQ,+CAGrD;IAHM;;QAII,SAAI,GAAG,kCAAkC,CAAC;QACzC,sBAAiB,GAAG,eAAe,CAAC;QAElC,sBAAiB,GAAG,CAAC,IAAwE,EAAmB,EAAE;YACxH,OAAO;gBACH,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBACtB,MAAM,EAAE,iDAAqB,CAAC,WAAW;gBACzC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;gBACxB,SAAS,EAAE,gBAAQ,CAAC,UAAU,CAC1B,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,EACvE,IAAI,CAAC,iBAAiB,EACtB;oBACI,IAAI,EAAE,eAAe;iBACxB,CACJ;qBACI,KAAK,EAAE;qBACP,QAAQ,EAAE;gBACf,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;gBACzB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBACtB,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACnF,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;aACzC,CAAC;QACN,CAAC,CAAC;IACN,CAAC;CAAA,CAAA;2CA3BY,gCAAgC;IAD5C,IAAA,qBAAU,GAAE;GACA,gCAAgC,CA2B5C"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AbstractWorker } from "@golemio/core/dist/integration-engine";
|
|
2
|
+
import { ITask } from "@golemio/core/dist/integration-engine/workers/interfaces/ITask";
|
|
2
3
|
export declare class CommodityWorker extends AbstractWorker {
|
|
3
4
|
protected name: string;
|
|
4
5
|
constructor();
|
|
5
|
-
registerTask: (task:
|
|
6
|
+
registerTask: (task: ITask) => void;
|
|
6
7
|
}
|
|
@@ -19,6 +19,7 @@ class CommodityWorker extends integration_engine_1.AbstractWorker {
|
|
|
19
19
|
this.registerTask(Di_1.CommodityContainer.resolve(WorkerContainerToken_1.WorkerContainerToken.FetchVeoliaMeasurementsTask));
|
|
20
20
|
this.registerTask(Di_1.CommodityContainer.resolve(WorkerContainerToken_1.WorkerContainerToken.FetchPpasMeasurementsTask));
|
|
21
21
|
this.registerTask(Di_1.CommodityContainer.resolve(WorkerContainerToken_1.WorkerContainerToken.FetchPreMeasurementDataTask));
|
|
22
|
+
this.registerTask(Di_1.CommodityContainer.resolve(WorkerContainerToken_1.WorkerContainerToken.FetchPtasWebScrapedMeasurementsTask));
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
25
|
exports.CommodityWorker = CommodityWorker;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommodityWorker.js","sourceRoot":"","sources":["../../../../src/integration-engine/commodity-providers/workers/CommodityWorker.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"CommodityWorker.js","sourceRoot":"","sources":["../../../../src/integration-engine/commodity-providers/workers/CommodityWorker.ts"],"names":[],"mappings":";;;AAAA,8EAAuE;AAEvE,4CAA2C;AAC3C,kCAA+C;AAC/C,sEAAmE;AAEnE,MAAa,eAAgB,SAAQ,mCAAc;IAG/C;QACI,KAAK,EAAE,CAAC;QAHF,SAAI,GAAG,uBAAW,CAAC;QAmBtB,iBAAY,GAAG,CAAC,IAAW,EAAQ,EAAE;YACxC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC7C,CAAC,CAAC;QAjBE,iBAAiB;QACjB,IAAI,CAAC,YAAY,CAAC,uBAAkB,CAAC,OAAO,CAAQ,2CAAoB,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAE9G,IAAI,CAAC,YAAY,CAAC,uBAAkB,CAAC,OAAO,CAAQ,2CAAoB,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAEjH,IAAI,CAAC,YAAY,CAAC,uBAAkB,CAAC,OAAO,CAAQ,2CAAoB,CAAC,2BAA2B,CAAC,CAAC,CAAC;QAEvG,IAAI,CAAC,YAAY,CAAC,uBAAkB,CAAC,OAAO,CAAQ,2CAAoB,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAErG,IAAI,CAAC,YAAY,CAAC,uBAAkB,CAAC,OAAO,CAAQ,2CAAoB,CAAC,2BAA2B,CAAC,CAAC,CAAC;QAEvG,IAAI,CAAC,YAAY,CAAC,uBAAkB,CAAC,OAAO,CAAQ,2CAAoB,CAAC,mCAAmC,CAAC,CAAC,CAAC;IACnH,CAAC;CAMJ;AAxBD,0CAwBC"}
|
|
@@ -38,6 +38,7 @@ const optionLookupKeys = {
|
|
|
38
38
|
[CommodityProviderTypeEnum_1.CommodityProviderType.PpasAveV]: "AveVOptions",
|
|
39
39
|
[CommodityProviderTypeEnum_1.CommodityProviderType.PpasAveM]: "AveMOptions",
|
|
40
40
|
[CommodityProviderTypeEnum_1.CommodityProviderType.PreOptions]: "PreOptions",
|
|
41
|
+
[CommodityProviderTypeEnum_1.CommodityProviderType.PtasOptions]: "PtasOptions",
|
|
41
42
|
};
|
|
42
43
|
let FetchMeasurementOptionsStaticDataTask = exports.FetchMeasurementOptionsStaticDataTask = class FetchMeasurementOptionsStaticDataTask extends AbstractEmptyTask_1.AbstractEmptyTask {
|
|
43
44
|
constructor(logger, staticDataSourceProvider, meterSettingsRepository) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FetchMeasurementOptionsStaticDataTask.js","sourceRoot":"","sources":["../../../../../src/integration-engine/commodity-providers/workers/tasks/FetchMeasurementOptionsStaticDataTask.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAgE;AAChE,+HAA8I;AAC9I,yEAAwF;AACxF,oGAAmH;AAEnH,uHAAsF;AACtF,yHAAwF;AACxF,wEAAqE;AAErE,uGAAoG;AACpG,6EAAwE;AACxE,iEAAwE;AAExE,MAAM,gBAAgB,GAAG;IACrB,CAAC,iDAAqB,CAAC,iBAAiB,CAAC,EAAE,iBAAiB;IAC5D,CAAC,iDAAqB,CAAC,mBAAmB,CAAC,EAAE,mBAAmB;IAChE,CAAC,iDAAqB,CAAC,QAAQ,CAAC,EAAE,aAAa;IAC/C,CAAC,iDAAqB,CAAC,QAAQ,CAAC,EAAE,aAAa;IAC/C,CAAC,iDAAqB,CAAC,UAAU,CAAC,EAAE,YAAY;
|
|
1
|
+
{"version":3,"file":"FetchMeasurementOptionsStaticDataTask.js","sourceRoot":"","sources":["../../../../../src/integration-engine/commodity-providers/workers/tasks/FetchMeasurementOptionsStaticDataTask.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAgE;AAChE,+HAA8I;AAC9I,yEAAwF;AACxF,oGAAmH;AAEnH,uHAAsF;AACtF,yHAAwF;AACxF,wEAAqE;AAErE,uGAAoG;AACpG,6EAAwE;AACxE,iEAAwE;AAExE,MAAM,gBAAgB,GAAG;IACrB,CAAC,iDAAqB,CAAC,iBAAiB,CAAC,EAAE,iBAAiB;IAC5D,CAAC,iDAAqB,CAAC,mBAAmB,CAAC,EAAE,mBAAmB;IAChE,CAAC,iDAAqB,CAAC,QAAQ,CAAC,EAAE,aAAa;IAC/C,CAAC,iDAAqB,CAAC,QAAQ,CAAC,EAAE,aAAa;IAC/C,CAAC,iDAAqB,CAAC,UAAU,CAAC,EAAE,YAAY;IAChD,CAAC,iDAAqB,CAAC,WAAW,CAAC,EAAE,aAAa;CACrD,CAAC;AAGK,IAAM,qCAAqC,mDAA3C,MAAM,qCAAsC,SAAQ,qCAAiB;IAIxE,YAC8B,MAAuB,EAEjD,wBAAuE,EAEvE,uBAA8D;QAE9D,KAAK,CAAC,uBAAW,CAAC,CAAC;QANe,WAAM,GAAN,MAAM,CAAS;QAEzC,6BAAwB,GAAxB,wBAAwB,CAAuC;QAE/D,4BAAuB,GAAvB,uBAAuB,CAA+B;QARlD,cAAS,GAAG,mCAAmC,CAAC;QAChD,aAAQ,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,QAAQ;IAUnD,CAAC;IAEe,OAAO;;YACnB,MAAM,UAAU,GAAG,IAAI,CAAC,wBAAwB,CAAC,aAAa,EAAE,CAAC;YACjE,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;YAEhD,KAAK,MAAM,CAAC,iBAAiB,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;gBACrE,MAAM,OAAO,GAAG,IAAI,CAAC,8BAA8B,CAAC,aAAa,EAAE,GAAiC,CAAC,CAAC;gBACtG,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;oBACtB,SAAS;iBACZ;gBAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,MAAM,4BAA4B,iBAAiB,EAAE,CAAC,CAAC;gBAC3F,MAAM,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CACvC,iBAA0C,EAC1C,mDAAsB,CAAC,kBAAkB,EACzC,OAAO,CACV,CAAC;aACL;QACL,CAAC;KAAA;IAEO,8BAA8B,CAClC,aAAmC,EACnC,GAA+B;QAE/B,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,kBAAkB,CAAA,EAAE;YAC/B,MAAM,IAAI,6BAAY,CAAC,0CAA0C,GAAG,EAAE,CAAC,CAAC;SAC3E;QACD,OAAO,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,kBAAkB,CAAC;IACxC,CAAC;CACJ,CAAA;gDA3CY,qCAAqC;IADjD,IAAA,qBAAU,GAAE;IAMJ,WAAA,IAAA,iBAAM,EAAC,qBAAS,CAAC,MAAM,CAAC,CAAA;IACxB,WAAA,IAAA,iBAAM,EAAC,2CAAoB,CAAC,qCAAqC,CAAC,CAAA;IAElE,WAAA,IAAA,iBAAM,EAAC,2CAAoB,CAAC,6BAA6B,CAAC,CAAA;6CADzB,6EAAqC;QAEtC,6DAA6B;GATzD,qCAAqC,CA2CjD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { PreElectroHelper } from "../../datasources/pre-elektro-api/helpers/PreElectroHelper";
|
|
2
|
+
import { MeasurementRepository } from "../../repositories/MeasurementRepository";
|
|
3
|
+
import { StaticMeterSettingsRepository } from "../../repositories/StaticMeterSettingsRepository";
|
|
4
|
+
import { PtasWebMeasurementTransformation } from "../../transformations/PtasWebMeasurementTransformation";
|
|
5
|
+
import { IPtasWebScrapingInput } from "../../../../schema-definitions/datasources/interfaces/PtasWebScrapingInput";
|
|
6
|
+
import { AbstractTaskJsonSchema } from "@golemio/core/dist/integration-engine/workers/AbstractTaskJsonSchema";
|
|
7
|
+
import { JSONSchemaValidator } from "@golemio/core/dist/shared/golemio-validator";
|
|
8
|
+
import { ILogger } from "@golemio/core/dist/helpers/logger";
|
|
9
|
+
export declare class FetchPtasWebScrapedMeasurementsTask extends AbstractTaskJsonSchema<IPtasWebScrapingInput> {
|
|
10
|
+
private logger;
|
|
11
|
+
private meterSettingsRepository;
|
|
12
|
+
protected measurementRepository: MeasurementRepository;
|
|
13
|
+
protected transformation: PtasWebMeasurementTransformation;
|
|
14
|
+
protected helper: PreElectroHelper;
|
|
15
|
+
protected schema: JSONSchemaValidator;
|
|
16
|
+
readonly queueName = "savePtasMeasurements";
|
|
17
|
+
readonly queueTtl: number;
|
|
18
|
+
constructor(logger: ILogger, meterSettingsRepository: StaticMeterSettingsRepository, measurementRepository: MeasurementRepository, transformation: PtasWebMeasurementTransformation, helper: PreElectroHelper);
|
|
19
|
+
protected execute(data: IPtasWebScrapingInput): Promise<void>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
15
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
16
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
17
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
18
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
19
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
20
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.FetchPtasWebScrapedMeasurementsTask = void 0;
|
|
25
|
+
const constants_1 = require("../../constants");
|
|
26
|
+
const PreElectroHelper_1 = require("../../datasources/pre-elektro-api/helpers/PreElectroHelper");
|
|
27
|
+
const WorkerContainerToken_1 = require("../../ioc/WorkerContainerToken");
|
|
28
|
+
const MeasurementRepository_1 = require("../../repositories/MeasurementRepository");
|
|
29
|
+
const StaticMeterSettingsRepository_1 = require("../../repositories/StaticMeterSettingsRepository");
|
|
30
|
+
const PtasWebMeasurementTransformation_1 = require("../../transformations/PtasWebMeasurementTransformation");
|
|
31
|
+
const PtasWebScrapingJsonSchema_1 = require("../../../../schema-definitions/datasources/PtasWebScrapingJsonSchema");
|
|
32
|
+
const CommodityProviderTypeEnum_1 = require("../../../../schema-definitions/models/helpers/CommodityProviderTypeEnum");
|
|
33
|
+
const StaticDataResourceTypeEnum_1 = require("../../../../schema-definitions/models/helpers/StaticDataResourceTypeEnum");
|
|
34
|
+
const AbstractTaskJsonSchema_1 = require("@golemio/core/dist/integration-engine/workers/AbstractTaskJsonSchema");
|
|
35
|
+
const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
|
|
36
|
+
const golemio_validator_1 = require("@golemio/core/dist/shared/golemio-validator");
|
|
37
|
+
const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
|
|
38
|
+
const CoreToken_1 = require("@golemio/core/dist/helpers/ioc/CoreToken");
|
|
39
|
+
let FetchPtasWebScrapedMeasurementsTask = exports.FetchPtasWebScrapedMeasurementsTask = class FetchPtasWebScrapedMeasurementsTask extends AbstractTaskJsonSchema_1.AbstractTaskJsonSchema {
|
|
40
|
+
constructor(logger, meterSettingsRepository, measurementRepository, transformation, helper) {
|
|
41
|
+
super(constants_1.WORKER_NAME);
|
|
42
|
+
this.logger = logger;
|
|
43
|
+
this.meterSettingsRepository = meterSettingsRepository;
|
|
44
|
+
this.measurementRepository = measurementRepository;
|
|
45
|
+
this.transformation = transformation;
|
|
46
|
+
this.helper = helper;
|
|
47
|
+
this.schema = new golemio_validator_1.JSONSchemaValidator("FetchPtasWebScrapedMeasurementsTask", PtasWebScrapingJsonSchema_1.ptasWebScrapingJsonSchema);
|
|
48
|
+
this.queueName = "savePtasMeasurements";
|
|
49
|
+
this.queueTtl = 60 * 60 * 1000;
|
|
50
|
+
}
|
|
51
|
+
execute(data) {
|
|
52
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
const measurementOptions = yield this.meterSettingsRepository.getData(CommodityProviderTypeEnum_1.CommodityProviderType.PtasOptions, StaticDataResourceTypeEnum_1.StaticDataResourceType.MeasurementOptions);
|
|
54
|
+
if (!measurementOptions) {
|
|
55
|
+
throw new golemio_errors_1.GeneralError("Measurement options not found", this.constructor.name);
|
|
56
|
+
}
|
|
57
|
+
const batch = [];
|
|
58
|
+
//podle původního scraperu z C# bereme pouze teplo horké vody
|
|
59
|
+
const hotWaterMeasurements = data.measurements.filter((item) => item["Druh registru"] === "Teplo horké vody");
|
|
60
|
+
for (const measurement of hotWaterMeasurements) {
|
|
61
|
+
const option = measurementOptions.find((item) => item.Meter === data["idOdbernehoMista"]);
|
|
62
|
+
if (!option) {
|
|
63
|
+
this.logger.warn(`Incoming Meter id ${data["idOdbernehoMista"]} is missing in the static data file (measurement options).`);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
const consumptionData = this.transformation.transformElement({ option, measurement });
|
|
67
|
+
batch.push(consumptionData);
|
|
68
|
+
}
|
|
69
|
+
yield this.measurementRepository.bulkSave(batch);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
exports.FetchPtasWebScrapedMeasurementsTask = FetchPtasWebScrapedMeasurementsTask = __decorate([
|
|
74
|
+
(0, tsyringe_1.injectable)(),
|
|
75
|
+
__param(0, (0, tsyringe_1.inject)(CoreToken_1.CoreToken.Logger)),
|
|
76
|
+
__param(1, (0, tsyringe_1.inject)(WorkerContainerToken_1.WorkerContainerToken.StaticMeterSettingsRepository)),
|
|
77
|
+
__param(2, (0, tsyringe_1.inject)(WorkerContainerToken_1.WorkerContainerToken.MeasurementRepository)),
|
|
78
|
+
__param(3, (0, tsyringe_1.inject)(WorkerContainerToken_1.WorkerContainerToken.PtasWebMeasurementTransformation)),
|
|
79
|
+
__param(4, (0, tsyringe_1.inject)(WorkerContainerToken_1.WorkerContainerToken.PreElectroHelper)),
|
|
80
|
+
__metadata("design:paramtypes", [Object, StaticMeterSettingsRepository_1.StaticMeterSettingsRepository,
|
|
81
|
+
MeasurementRepository_1.MeasurementRepository,
|
|
82
|
+
PtasWebMeasurementTransformation_1.PtasWebMeasurementTransformation,
|
|
83
|
+
PreElectroHelper_1.PreElectroHelper])
|
|
84
|
+
], FetchPtasWebScrapedMeasurementsTask);
|
|
85
|
+
//# sourceMappingURL=FetchPtasWebScrapedMeasurementsTask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FetchPtasWebScrapedMeasurementsTask.js","sourceRoot":"","sources":["../../../../../src/integration-engine/commodity-providers/workers/tasks/FetchPtasWebScrapedMeasurementsTask.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAgE;AAChE,iGAAgH;AAChH,yEAAwF;AACxF,oFAAmG;AACnG,oGAAmH;AACnH,6GAA4H;AAC5H,oHAAuF;AAGvF,uHAAsF;AACtF,yHAAwF;AACxF,iHAA8G;AAC9G,6EAAwE;AACxE,mFAAkF;AAClF,iEAAwE;AAExE,wEAAqE;AAE9D,IAAM,mCAAmC,iDAAzC,MAAM,mCAAoC,SAAQ,+CAA6C;IAKlG,YAC8B,MAAuB,EAEjD,uBAA8D,EACV,qBAAsD,EAC3C,cAA0D,EAEzH,MAAkC;QAElC,KAAK,CAAC,uBAAW,CAAC,CAAC;QARe,WAAM,GAAN,MAAM,CAAS;QAEzC,4BAAuB,GAAvB,uBAAuB,CAA+B;QACA,0BAAqB,GAArB,qBAAqB,CAAuB;QACjC,mBAAc,GAAd,cAAc,CAAkC;QAE/G,WAAM,GAAN,MAAM,CAAkB;QAX5B,WAAM,GAAG,IAAI,uCAAmB,CAAC,qCAAqC,EAAE,qDAAyB,CAAC,CAAC;QAC7F,cAAS,GAAG,sBAAsB,CAAC;QACnC,aAAQ,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAY1C,CAAC;IAEe,OAAO,CAAC,IAA2B;;YAC/C,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,CACjE,iDAAqB,CAAC,WAAW,EACjC,mDAAsB,CAAC,kBAAkB,CAC5C,CAAC;YAEF,IAAI,CAAC,kBAAkB,EAAE;gBACrB,MAAM,IAAI,6BAAY,CAAC,+BAA+B,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aAClF;YAED,MAAM,KAAK,GAAG,EAAE,CAAC;YAEjB,6DAA6D;YAC7D,MAAM,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,kBAAkB,CAAC,CAAC;YAE9G,KAAK,MAAM,WAAW,IAAI,oBAAoB,EAAE;gBAC5C,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAwB,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBAE9G,IAAI,CAAC,MAAM,EAAE;oBACT,IAAI,CAAC,MAAM,CAAC,IAAI,CACZ,qBAAqB,IAAI,CAAC,kBAAkB,CAAC,4DAA4D,CAC5G,CAAC;oBACF,SAAS;iBACZ;gBAED,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;gBAEtF,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;aAC/B;YAED,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC;KAAA;CACJ,CAAA;8CAjDY,mCAAmC;IAD/C,IAAA,qBAAU,GAAE;IAOJ,WAAA,IAAA,iBAAM,EAAC,qBAAS,CAAC,MAAM,CAAC,CAAA;IACxB,WAAA,IAAA,iBAAM,EAAC,2CAAoB,CAAC,6BAA6B,CAAC,CAAA;IAE1D,WAAA,IAAA,iBAAM,EAAC,2CAAoB,CAAC,qBAAqB,CAAC,CAAA;IAClD,WAAA,IAAA,iBAAM,EAAC,2CAAoB,CAAC,gCAAgC,CAAC,CAAA;IAC7D,WAAA,IAAA,iBAAM,EAAC,2CAAoB,CAAC,gBAAgB,CAAC,CAAA;6CAHb,6DAA6B;QACuB,6CAAqB;QACjB,mEAAgC;QAEvG,mCAAgB;GAZ7B,mCAAmC,CAiD/C"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ptasWebScrapingJsonSchema = void 0;
|
|
4
|
+
exports.ptasWebScrapingJsonSchema = {
|
|
5
|
+
type: "object",
|
|
6
|
+
properties: {
|
|
7
|
+
idOdbernehoMista: { type: "string" },
|
|
8
|
+
measurements: {
|
|
9
|
+
type: "array",
|
|
10
|
+
items: {
|
|
11
|
+
type: "object",
|
|
12
|
+
properties: {
|
|
13
|
+
"Datum odečtu": { type: "string", pattern: "^\\d{1,2}.\\d{1,2}.\\d{4}$" },
|
|
14
|
+
"Čas odečtu": { type: "string" },
|
|
15
|
+
"Výrobní číslo": { type: "string" },
|
|
16
|
+
"Druh registru": { type: "string" },
|
|
17
|
+
Odečet: { type: "string" },
|
|
18
|
+
"MJ odečtu": { type: "string" },
|
|
19
|
+
"MJ zúčt.": { type: "string" },
|
|
20
|
+
"OM závislé": { type: "string" },
|
|
21
|
+
"Typ odečtu": { type: "string" },
|
|
22
|
+
"Status odečtu": { type: "string" },
|
|
23
|
+
},
|
|
24
|
+
required: [
|
|
25
|
+
"Datum odečtu",
|
|
26
|
+
"Čas odečtu",
|
|
27
|
+
"Druh registru",
|
|
28
|
+
"Výrobní číslo",
|
|
29
|
+
"Odečet",
|
|
30
|
+
"MJ odečtu",
|
|
31
|
+
"MJ zúčt.",
|
|
32
|
+
"OM závislé",
|
|
33
|
+
"Typ odečtu",
|
|
34
|
+
"Status odečtu",
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
required: ["idOdbernehoMista", "measurements"],
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=PtasWebScrapingJsonSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PtasWebScrapingJsonSchema.js","sourceRoot":"","sources":["../../../src/schema-definitions/datasources/PtasWebScrapingJsonSchema.ts"],"names":[],"mappings":";;;AAGa,QAAA,yBAAyB,GAA0C;IAC5E,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACpC,YAAY,EAAE;YACV,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACR,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,4BAA4B,EAAE;oBACzE,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAChC,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACnC,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACnC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC1B,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC/B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC9B,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAChC,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAChC,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBACtC;gBACD,QAAQ,EAAE;oBACN,cAAc;oBACd,YAAY;oBACZ,eAAe;oBACf,eAAe;oBACf,QAAQ;oBACR,WAAW;oBACX,UAAU;oBACV,YAAY;oBACZ,YAAY;oBACZ,eAAe;iBAClB;aACJ;SACJ;KACJ;IACD,QAAQ,EAAE,CAAC,kBAAkB,EAAE,cAAc,CAAC;CACjD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface IPtasWebScrapingInput {
|
|
2
|
+
idOdbernehoMista: string;
|
|
3
|
+
measurements: IPtasMeasurement[];
|
|
4
|
+
}
|
|
5
|
+
export interface IPtasMeasurement {
|
|
6
|
+
"Datum odečtu": string;
|
|
7
|
+
"Čas odečtu": string;
|
|
8
|
+
"Výrobní číslo": string;
|
|
9
|
+
"Druh registru": string;
|
|
10
|
+
Odečet: string;
|
|
11
|
+
"MJ odečtu": string;
|
|
12
|
+
"MJ zúčt.": string;
|
|
13
|
+
"OM závislé": string;
|
|
14
|
+
"Typ odečtu": string;
|
|
15
|
+
"Status odečtu": string;
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PtasWebScrapingInput.js","sourceRoot":"","sources":["../../../../src/schema-definitions/datasources/interfaces/PtasWebScrapingInput.ts"],"names":[],"mappings":""}
|
|
@@ -8,5 +8,6 @@ var CommodityProviderType;
|
|
|
8
8
|
CommodityProviderType["PpasAveV"] = "ppas_ave_api_v";
|
|
9
9
|
CommodityProviderType["PpasAveM"] = "ppas_ave_api_m";
|
|
10
10
|
CommodityProviderType["PreOptions"] = "pre_electro_ftp";
|
|
11
|
+
CommodityProviderType["PtasOptions"] = "ptas_hot_water";
|
|
11
12
|
})(CommodityProviderType || (exports.CommodityProviderType = CommodityProviderType = {}));
|
|
12
13
|
//# sourceMappingURL=CommodityProviderTypeEnum.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommodityProviderTypeEnum.js","sourceRoot":"","sources":["../../../../src/schema-definitions/models/helpers/CommodityProviderTypeEnum.ts"],"names":[],"mappings":";;;AAAA,IAAY,
|
|
1
|
+
{"version":3,"file":"CommodityProviderTypeEnum.js","sourceRoot":"","sources":["../../../../src/schema-definitions/models/helpers/CommodityProviderTypeEnum.ts"],"names":[],"mappings":";;;AAAA,IAAY,qBAOX;AAPD,WAAY,qBAAqB;IAC7B,mEAA0C,CAAA;IAC1C,uEAA8C,CAAA;IAC9C,oDAA2B,CAAA;IAC3B,oDAA2B,CAAA;IAC3B,uDAA8B,CAAA;IAC9B,uDAA8B,CAAA;AAClC,CAAC,EAPW,qBAAqB,qCAArB,qBAAqB,QAOhC"}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
# Implementační dokumentace modulu _energetics_
|
|
2
|
+
|
|
3
|
+
## Záměr
|
|
4
|
+
|
|
5
|
+
Modul slouží k ukládání dat o spotřebě energií v budovách a jednotlivých bytech a prostorách pro jejich nájemnce
|
|
6
|
+
|
|
7
|
+
## Vstupní data
|
|
8
|
+
|
|
9
|
+
### Data nám jsou posílána
|
|
10
|
+
|
|
11
|
+
- Přes Permission Proxy na Input Gateway data si bereme z webu https://portal.ptas.cz/portal, web scraping zajišťují dataři golemia, link gitlabu
|
|
12
|
+
https://gitlab.com/operator-ict/golemio/extras/importers/-/blob/development/imports/energetics/scrape_ptas.py?ref_type=heads
|
|
13
|
+
|
|
14
|
+
- POST (/ptas/{id}) s id odběrného místa jako parametrem => RabbitMQ send Message `savePtasMeasurements` ([Data example](../test/input-gateway/data/ptas-hot-water-data-input.csv))
|
|
15
|
+
|
|
16
|
+
### Data aktivně stahujeme
|
|
17
|
+
|
|
18
|
+
**Dostupní poskytovatelé**:
|
|
19
|
+
|
|
20
|
+
- OICT Energetika
|
|
21
|
+
- Unimonitor CEM API
|
|
22
|
+
- Vrtbovský palác
|
|
23
|
+
- Veolia měření P10 - vodoměry a elektroměry
|
|
24
|
+
- PPAS (Pražská plynárenská) InternetAVE API
|
|
25
|
+
- Měření plynu pro P10
|
|
26
|
+
- Azure Blob Storage
|
|
27
|
+
- Mapovací JSON pro měření přímo od poskytovatelů komodit
|
|
28
|
+
|
|
29
|
+
#### _OICT Energetika_
|
|
30
|
+
|
|
31
|
+
- zdroj dat
|
|
32
|
+
- url: https://api.oictenergetika.cz (config.datasources.OICTEnergetikaApiUrl)
|
|
33
|
+
- parametry dotazu: config.datasources.OICTEnergetikaApiHeaders
|
|
34
|
+
- API dokumentace: https://api.oictenergetika.cz/swagger/index.html
|
|
35
|
+
- formát dat
|
|
36
|
+
- protokol: http
|
|
37
|
+
- datový typ: json
|
|
38
|
+
- validační schéma: [datasources](../src/schema-definitions/datasources)
|
|
39
|
+
- příklad vstupnich dat: [fixtures](../test/integration-engine/workers/oict-energetika/transformations/fixture)
|
|
40
|
+
- frekvence stahování
|
|
41
|
+
- cron definice:
|
|
42
|
+
- cron.dataplatform.energeticsoict.fetchData (data za posledních 14 dní s parametrem `{ "targetDays": 14 }`)
|
|
43
|
+
- rabin `0 30 * * * *`
|
|
44
|
+
- prod `0 30 * * * *`
|
|
45
|
+
- názvy rabbitmq front
|
|
46
|
+
- dataplatform.energeticsoict.fetchData
|
|
47
|
+
- dataplatform.energeticsoict.fetchBuildings
|
|
48
|
+
- dataplatform.energeticsoict.fetchConsumption
|
|
49
|
+
- dataplatform.energeticsoict.fetchDevices
|
|
50
|
+
|
|
51
|
+
#### _Unimonitor CEM API - Vrtbovský palác_
|
|
52
|
+
|
|
53
|
+
- zdroj dat
|
|
54
|
+
- url: https://cemapi.unimonitor.eu/api (config.datasources.UnimonitorCemApiEnergetics.url)
|
|
55
|
+
- parametry dotazu: config.datasources.UnimonitorCemApiEnergetics
|
|
56
|
+
- API dokumentace: https://cemapi.unimonitor.eu/doc/en/index.jsp
|
|
57
|
+
- formát dat
|
|
58
|
+
- protokol: http
|
|
59
|
+
- datový typ: json
|
|
60
|
+
- validační schéma: [EnergeticsVpalac](../src/schema-definitions/providers/EnergeticsVpalac.ts)
|
|
61
|
+
- příklad vstupnich dat: [fixtures](../test/integration-engine/data)
|
|
62
|
+
- frekvence stahování
|
|
63
|
+
- cron definice:
|
|
64
|
+
- cron.dataplatform.energetics.fetchVpalacXHoursData (data za poslední hodinu s parametrem `{ "targetHours": 1 }`)
|
|
65
|
+
- rabin `0 0 * * * *`
|
|
66
|
+
- prod `0 0 * * * *`
|
|
67
|
+
- cron.dataplatform.energetics.fetchVpalacXDaysData (data za posledních 14 dní s parametrem `{ "targetDays": 14 }`)
|
|
68
|
+
- rabin `0 0 8 * * *`
|
|
69
|
+
- prod `0 0 8 * * *`
|
|
70
|
+
- názvy rabbitmq front
|
|
71
|
+
- dataplatform.energetics.fetchVpalacXHoursData
|
|
72
|
+
- dataplatform.energetics.fetchVpalacXDaysData
|
|
73
|
+
|
|
74
|
+
#### _Unimonitor CEM API - Veolia měření P10_
|
|
75
|
+
|
|
76
|
+
- zdroj dat
|
|
77
|
+
- url: https://cemapi.unimonitor.eu/api (module.UnimonitorCemApiEnergetics.url)
|
|
78
|
+
- parametry dotazu: module.energetics.commodityProviders.cem_api_veolia_water (vodoměry), module.energetics.commodityProviders.cem_api_veolia_electro (elektroměry)
|
|
79
|
+
- API dokumentace: https://cemapi.unimonitor.eu/doc/index.html?lang=cs
|
|
80
|
+
- formát dat
|
|
81
|
+
- protokol: http
|
|
82
|
+
- datový typ: json
|
|
83
|
+
- validační schéma: [Devices](../src/schema-definitions/datasources/commodity-providers/CemApiDevicesJsonSchema.ts), [Counters](../src/schema-definitions/datasources/commodity-providers/CemApiCountersJsonSchema.ts), [Measurements](../src/schema-definitions/datasources/commodity-providers/CemApiMeasurementsJsonSchema.ts)
|
|
84
|
+
- příklad vstupnich dat: viz [test](../test/integration-engine/commodity-providers/FetchVeoliaMeasurementsTask.test.ts)
|
|
85
|
+
- frekvence stahování
|
|
86
|
+
- cron definice:
|
|
87
|
+
- cron.dataplatform.energeticscommodity.fetchMeasurementsFromProviders (data za poslední dny)
|
|
88
|
+
- rabin `0 41 * * * *` (s parametrem `{ "targetDays": 14 }`)
|
|
89
|
+
- prod `0 41 * * * *` (s parametrem `{ "targetDays": 31 }`)
|
|
90
|
+
- názvy rabbitmq front
|
|
91
|
+
- dataplatform.energeticscommodity.fetchMeasurementsFromProviders
|
|
92
|
+
- dataplatform.energeticscommodity.fetchVeoliaMeasurements
|
|
93
|
+
|
|
94
|
+
#### _PPAS (Pražská plynárenská) InternetAVE API_
|
|
95
|
+
|
|
96
|
+
- zdroj dat
|
|
97
|
+
- url: https://iave.ppas.cz/website/api (module.energetics.commodityProviders.ppas_ave_api.baseUrl)
|
|
98
|
+
- API dokumentace: https://www.ave-system.com/Content/download/AveRestApiDocumentation.pdf
|
|
99
|
+
- formát dat
|
|
100
|
+
- protokol: http
|
|
101
|
+
- datový typ: json
|
|
102
|
+
- validační schéma: [Places](../src/schema-definitions/datasources/commodity-providers/AveApiPlacesJsonSchema.ts), [DeviceData](../src/schema-definitions/datasources/commodity-providers/AveApiDeviceDataJsonSchema.ts)
|
|
103
|
+
- příklad vstupnich dat: viz [test](../test/integration-engine/commodity-providers/FetchPpasMeasurementsTask.test.ts)
|
|
104
|
+
- frekvence stahování
|
|
105
|
+
- cron definice:
|
|
106
|
+
- cron.dataplatform.energeticscommodity.fetchMeasurementsFromProviders (data za poslední dny)
|
|
107
|
+
- rabin `0 41 * * * *` (s parametrem `{ "targetDays": 14 }`)
|
|
108
|
+
- prod `0 41 * * * *` (s parametrem `{ "targetDays": 31 }`)
|
|
109
|
+
- názvy rabbitmq front
|
|
110
|
+
- dataplatform.energeticscommodity.fetchMeasurementsFromProviders
|
|
111
|
+
- dataplatform.energeticscommodity.fetchPpasMeasurements
|
|
112
|
+
|
|
113
|
+
#### _PRE (Pražská energetika)_
|
|
114
|
+
|
|
115
|
+
- zdroj dat
|
|
116
|
+
- ftp: ftp://ftp.wa-test.oict.cz:16421 (module.energetics.pre_electro_ftp)
|
|
117
|
+
- formát dat
|
|
118
|
+
- protokol: ftp
|
|
119
|
+
- datový typ: csv
|
|
120
|
+
- validační schéma: [Data](../src/schema-definitions/datasources/PreElectricConsumptionJson.ts)
|
|
121
|
+
- frekvence stahování
|
|
122
|
+
- cron definice:
|
|
123
|
+
- cron.dataplatform.energeticscommodity.fetchMeasurementsFromProviders (data za poslední dny)
|
|
124
|
+
- rabin `0 41 * * * *` (s parametrem `{ "targetDays": 14 }`)
|
|
125
|
+
- prod `0 41 * * * *` (s parametrem `{ "targetDays": 31 }`)
|
|
126
|
+
- názvy rabbitmq front
|
|
127
|
+
- dataplatform.energeticscommodity.fetchPreElectroMeasurementsTask
|
|
128
|
+
|
|
129
|
+
#### _Azure Blob Storage - mapovací JSON pro měření_
|
|
130
|
+
|
|
131
|
+
- zdroj dat
|
|
132
|
+
- url: https://golemgolemio.blob.core.windows.net (module.energetics.commodityProviders.staticData.baseUrl)
|
|
133
|
+
- parametry dotazu: path `/golem-energetics/meterssettings.json` (module.energetics.commodityProviders.staticData.metersettings.path)
|
|
134
|
+
- API dokumentace: žádná
|
|
135
|
+
- formát dat
|
|
136
|
+
- protokol: http
|
|
137
|
+
- datový typ: json
|
|
138
|
+
- validační schéma: [MeterSettings](../src/schema-definitions/datasources/StaticMeterSettingsJsonSchema.ts)
|
|
139
|
+
- příklad vstupnich dat: viz [test](../test/integration-engine/commodity-providers/FetchMeasurementOptionsStaticDataTask.test.ts)
|
|
140
|
+
- frekvence stahování
|
|
141
|
+
- cron definice:
|
|
142
|
+
- dataplatform.energeticscommodity.fetchMeasurementOptionsStaticData (data za poslední dny)
|
|
143
|
+
- rabin `0 53 6 * * *` (s parametrem `{}`)
|
|
144
|
+
- prod `0 53 6 * * *` (s parametrem `{}`)
|
|
145
|
+
- názvy rabbitmq front
|
|
146
|
+
- dataplatform.energeticscommodity.fetchMeasurementOptionsStaticData
|
|
147
|
+
|
|
148
|
+
## Zpracování dat / transformace
|
|
149
|
+
|
|
150
|
+
Všechny tabulky se nachází ve schématu `energetics`
|
|
151
|
+
|
|
152
|
+
### _CommodityWorker_
|
|
153
|
+
|
|
154
|
+
Worker se stará o stahování dat (odečty, měřidla a počítadla) přímo od poskytovatelů komodit
|
|
155
|
+
|
|
156
|
+
#### _task: FetchMeasurementOptionsStaticDataTask_
|
|
157
|
+
|
|
158
|
+
Metoda sbírá mapovací JSON pro měření - odlehčený `metersettings.json` (bez secretů) z původní implementace energetické DB https://gitlab.com/operator-ict/oddeleni-vyvoje/energetika/spotreby-energii-mestskych-budov/stahovani-dat-meridel/-/blob/main/src/OIct.EnergyConsumptionGrabber/meterssettings.json. Za obsah a správu souboru odpovídá Stanislav Krňák
|
|
159
|
+
|
|
160
|
+
- vstupní rabbitmq fronta
|
|
161
|
+
- název: dataplatform.energeticscommodity.fetchMeasurementOptionsStaticData
|
|
162
|
+
- TTL: 59 minut
|
|
163
|
+
- parametry: žádné
|
|
164
|
+
- závislé fronty (do kterých jsou odesílány zprávy z metody workeru)
|
|
165
|
+
- žádné
|
|
166
|
+
- datové zdroje
|
|
167
|
+
- Azure Blob Storage (golemgolemio.blob.core.windows.net/golem-energetics/meterssettings.json)
|
|
168
|
+
- transformace
|
|
169
|
+
- žádné
|
|
170
|
+
- data modely
|
|
171
|
+
- [StaticMeterSettingsModel](../src/schema-definitions/models/StaticMeterSettingsModel.ts) tabulka `commodity_static_meter_settings`
|
|
172
|
+
|
|
173
|
+
#### _task: FetchMeasurementsFromProvidersTask_
|
|
174
|
+
|
|
175
|
+
Metoda pouze rozesílá zprávy do ostatních front (fetchVeoliaMeasurements). Slouží k získání dat o spotřebě energií od poskytovatelů komodit za posledních X dní
|
|
176
|
+
|
|
177
|
+
- vstupní rabbitmq fronta
|
|
178
|
+
- název: dataplatform.energeticscommodity.fetchMeasurementsFromProviders
|
|
179
|
+
- TTL: 1 hodina
|
|
180
|
+
- parametry: `{ targetDays }`
|
|
181
|
+
- validační schéma: [DataEntrypointSchema](../src/integration-engine/commodity-providers/workers/schema/DataEntrypointSchema.ts)
|
|
182
|
+
- závislé fronty (do kterých jsou odesílány zprávy z metody workeru)
|
|
183
|
+
- dataplatform.energeticscommodity.fetchVeoliaMeasurements (vodoměry s parametry `{ providerType: cem_api_veolia_water, dateFrom, dateTo }`)
|
|
184
|
+
- dataplatform.energeticscommodity.fetchVeoliaMeasurements (elektroměry s parametry `{ providerType: cem_api_veolia_electro, dateFrom, dateTo }`)
|
|
185
|
+
- datové zdroje
|
|
186
|
+
- žádné
|
|
187
|
+
- transformace
|
|
188
|
+
- žádné
|
|
189
|
+
- data modely
|
|
190
|
+
- žádné
|
|
191
|
+
|
|
192
|
+
#### _task: FetchVeoliaMeasurementsTask_
|
|
193
|
+
|
|
194
|
+
Metoda sbírá data o spotřebách od poskytovatele komodit - Veolia P10 (vodoměry a elektroměry)
|
|
195
|
+
|
|
196
|
+
- vstupní rabbitmq fronta
|
|
197
|
+
- název: dataplatform.energeticscommodity.fetchVeoliaMeasurements
|
|
198
|
+
- TTL: 1 hodina
|
|
199
|
+
- parametry: `{ providerType, dateFrom, dateTo }`
|
|
200
|
+
- validační schéma: [VeoliaMeasurementsSchema](../src/integration-engine/commodity-providers/workers/schema/VeoliaMeasurementsSchema.ts)
|
|
201
|
+
- závislé fronty (do kterých jsou odesílány zprávy z metody workeru)
|
|
202
|
+
- žádné
|
|
203
|
+
- datové zdroje
|
|
204
|
+
- Unimonitor CEM API
|
|
205
|
+
- transformace
|
|
206
|
+
- [CemMeasurementTransformation](../src/integration-engine/commodity-providers/transformations/CemMeasurementTransformation.ts)
|
|
207
|
+
- data modely
|
|
208
|
+
- [StaticMeterSettingsModel](../src/schema-definitions/models/StaticMeterSettingsModel.ts) tabulka `commodity_static_meter_settings`
|
|
209
|
+
- [MeasurementModel](../src/schema-definitions/models/MeasurementsModel.ts) tabulka `consumption_energy_measurements`
|
|
210
|
+
|
|
211
|
+
#### _task: FetchPpasMeasurementsTask_
|
|
212
|
+
|
|
213
|
+
Metoda sbírá data o spotřebách od poskytovatele komodit - PPAS (Pražská plynárenská) P10
|
|
214
|
+
|
|
215
|
+
- vstupní rabbitmq fronta
|
|
216
|
+
- název: dataplatform.energeticscommodity.fetchPpasMeasurements
|
|
217
|
+
- TTL: 1 hodina
|
|
218
|
+
- parametry: `{ providerType, dateFrom, dateTo }`
|
|
219
|
+
- validační schéma: [PpasMeasurementsSchema](../src/integration-engine/commodity-providers/workers/schema/PpasMeasurementsSchema.ts)
|
|
220
|
+
- závislé fronty (do kterých jsou odesílány zprávy z metody workeru)
|
|
221
|
+
- žádné
|
|
222
|
+
- datové zdroje
|
|
223
|
+
- PPAS (Pražská plynárenská) InternetAVE API
|
|
224
|
+
- transformace
|
|
225
|
+
- [AveMeasurementTransformation](../src/integration-engine/commodity-providers/transformations/AveMeasurementTransformation.ts)
|
|
226
|
+
- data modely
|
|
227
|
+
- [StaticMeterSettingsModel](../src/schema-definitions/models/StaticMeterSettingsModel.ts) tabulka `commodity_static_meter_settings`
|
|
228
|
+
- [MeasurementModel](../src/schema-definitions/models/MeasurementsModel.ts) tabulka `consumption_energy_measurements`
|
|
229
|
+
|
|
230
|
+
#### _task: FetchPreElectroMeasurementsTask_
|
|
231
|
+
|
|
232
|
+
Metoda sbírá data o spotřebách od poskytovatele komodit - PRE (Pražská energetika)
|
|
233
|
+
|
|
234
|
+
- vstupní rabbitmq fronta
|
|
235
|
+
- název: dataplatform.energeticscommodity.fetchPreElectroMeasurementsTask
|
|
236
|
+
- TTL: 1 hodina
|
|
237
|
+
- parametry: `{ dateFrom, dateTo }`
|
|
238
|
+
- validační schéma: [MeasurementsSchema](../src/integration-engine/commodity-providers/workers/schema/MeasurementsSchema.ts)
|
|
239
|
+
- závislé fronty (do kterých jsou odesílány zprávy z metody workeru)
|
|
240
|
+
- žádné
|
|
241
|
+
- datové zdroje
|
|
242
|
+
- PRE (Pražská energetika) FTP
|
|
243
|
+
- transformace
|
|
244
|
+
- [PreElectroTransformation](../src/integration-engine/commodity-providers/transformations/PreElectroTransformation.ts)
|
|
245
|
+
- data modely
|
|
246
|
+
- [StaticMeterSettingsModel](../src/schema-definitions/models/StaticMeterSettingsModel.ts) tabulka `commodity_static_meter_settings`
|
|
247
|
+
- [MeasurementModel](../src/schema-definitions/models/MeasurementsModel.ts) tabulka `consumption_energy_measurements`
|
|
248
|
+
|
|
249
|
+
#### _task: FetchPtasWebScrapedMeasurementsTask_
|
|
250
|
+
|
|
251
|
+
Pomocí tohoto tasku zpracováváme a ukládáme data z input gateway z fronty savePtasMeasurements. Podle původního scraperu z C# bereme pouze teplo horké vody.
|
|
252
|
+
|
|
253
|
+
- vstupní rabbitmq fronta
|
|
254
|
+
- název: dataplatform.energeticscommodity.savePtasMeasurements
|
|
255
|
+
- TTL: 1 hodina
|
|
256
|
+
- input: parsované csv příklad ([Data example](../test/input-gateway/data/ptas-hot-water-data-input.csv))
|
|
257
|
+
- validační schéma: [PtasWebScrapingJsonSchema](../src/schema-definitions/datasources//PtasWebScrapingJsonSchema.ts)
|
|
258
|
+
- závislé fronty (do kterých jsou odesílány zprávy z metody workeru)
|
|
259
|
+
- žádné
|
|
260
|
+
- datové zdroje
|
|
261
|
+
- PTAS Pražská Teplárenská
|
|
262
|
+
- transformace
|
|
263
|
+
- [PtasWebMeasurementTransformation](../src/integration-engine/commodity-providers/transformations/PtasWebMeasurementTransformation.ts.ts)
|
|
264
|
+
- data modely
|
|
265
|
+
- [StaticMeterSettingsModel](../src/schema-definitions/models/StaticMeterSettingsModel.ts) tabulka `commodity_static_meter_settings`
|
|
266
|
+
- [MeasurementModel](../src/schema-definitions/models/MeasurementsModel.ts) tabulka `consumption_energy_measurements`
|
|
267
|
+
|
|
268
|
+
### _OictEnergetikaWorker_
|
|
269
|
+
|
|
270
|
+
Worker se stará o stahování dat (spotřeba, seznamy budov a meřidel) z datového zdroje OICT Energetika
|
|
271
|
+
|
|
272
|
+
#### _task: FetchDataTask_
|
|
273
|
+
|
|
274
|
+
Metoda pouze rozesílá zprávy do ostatních front (fetchBuildings, fetchConsumption, fetchDevices)
|
|
275
|
+
|
|
276
|
+
- vstupní rabbitmq fronta
|
|
277
|
+
- název: dataplatform.energeticsoict.fetchData
|
|
278
|
+
- TTL: 29 minut
|
|
279
|
+
- parametry: `{ targetDays }`
|
|
280
|
+
- validační schéma: [FetchDataSchema](../src/integration-engine/workers/oict-energetika/schema/FetchDataSchema.ts)
|
|
281
|
+
- závislé fronty (do kterých jsou odesílány zprávy z metody workeru)
|
|
282
|
+
- dataplatform.energeticsoict.fetchBuildings
|
|
283
|
+
- dataplatform.energeticsoict.fetchConsumption
|
|
284
|
+
- dataplatform.energeticsoict.fetchDevices
|
|
285
|
+
- datové zdroje
|
|
286
|
+
- žádné
|
|
287
|
+
- transformace
|
|
288
|
+
- žádné
|
|
289
|
+
- data modely
|
|
290
|
+
- žádné
|
|
291
|
+
|
|
292
|
+
#### _task: FetchBuildingsTask_
|
|
293
|
+
|
|
294
|
+
Metoda sbírá informace o budovách
|
|
295
|
+
|
|
296
|
+
- vstupní rabbitmq fronta
|
|
297
|
+
- název: dataplatform.energeticsoict.fetchBuildings
|
|
298
|
+
- TTL: 29 minut
|
|
299
|
+
- parametry: žádné
|
|
300
|
+
- závislé fronty (do kterých jsou odesílány zprávy z metody workeru)
|
|
301
|
+
- žádné
|
|
302
|
+
- datové zdroje
|
|
303
|
+
- OICT Energetika (buildings/full)
|
|
304
|
+
- transformace
|
|
305
|
+
- [BuildingsTransformation](../src/integration-engine/workers/oict-energetika/transformations/BuildingsTransformation.ts)
|
|
306
|
+
- data modely
|
|
307
|
+
- BuildingsModel `consumption_energy_buildings`
|
|
308
|
+
|
|
309
|
+
#### _task: FetchDevicesTask_
|
|
310
|
+
|
|
311
|
+
Metoda sbírá informace o měřičích
|
|
312
|
+
|
|
313
|
+
- vstupní rabbitmq fronta
|
|
314
|
+
- název: dataplatform.energeticsoict.fetchDevices
|
|
315
|
+
- TTL: 29 minut
|
|
316
|
+
- parametry: žádné
|
|
317
|
+
- závislé fronty (do kterých jsou odesílány zprávy z metody workeru)
|
|
318
|
+
- žádné
|
|
319
|
+
- datové zdroje
|
|
320
|
+
- OICT Energetika (devices/full)
|
|
321
|
+
- transformace
|
|
322
|
+
- [DevicesTransformation](../src/integration-engine/workers/oict-energetika/transformations/DevicesTransformation.ts)
|
|
323
|
+
- data modely
|
|
324
|
+
- DevicesModel `consumption_energy_devices`
|
|
325
|
+
|
|
326
|
+
#### _task: FetchConsumptionTask_
|
|
327
|
+
|
|
328
|
+
Metoda sbírá data o spotřebách od různých poskytovalů API (consumption) a ze systémů Dot Controls (visapp)
|
|
329
|
+
|
|
330
|
+
- vstupní rabbitmq fronta
|
|
331
|
+
- název: dataplatform.energeticsoict.fetchConsumption
|
|
332
|
+
- TTL: 10 hodin
|
|
333
|
+
- parametry: `{ dateFrom, dateTo }`
|
|
334
|
+
- validační schéma: [FetchDataSchema](../src/integration-engine/workers/oict-energetika/schema/FetchDataSchema.ts)
|
|
335
|
+
- závislé fronty (do kterých jsou odesílány zprávy z metody workeru)
|
|
336
|
+
- žádné
|
|
337
|
+
- datové zdroje
|
|
338
|
+
- OICT Energetika (data/consumption, data/visapp)
|
|
339
|
+
- transformace
|
|
340
|
+
- [ConsumptionTransformation](../src/integration-engine/workers/oict-energetika/transformations/ConsumptionTransformation.ts)
|
|
341
|
+
- data modely
|
|
342
|
+
- ConsumptionModel `consumption_energy_consumption`
|
|
343
|
+
|
|
344
|
+
### _EnergeticsVpalacWorker_
|
|
345
|
+
|
|
346
|
+
Worker se stará o stahování dat (odečty, měřidla a počítadla) z datového zdroje Unimonitor CEM API - Vrtbovský palác
|
|
347
|
+
|
|
348
|
+
#### _fetchXHoursData()_
|
|
349
|
+
|
|
350
|
+
Metoda sbírá aktuální data
|
|
351
|
+
|
|
352
|
+
- vstupní rabbitmq fronta
|
|
353
|
+
- název: dataplatform.energetics.fetchVpalacXHoursData
|
|
354
|
+
- TTL: 1 hodina
|
|
355
|
+
- parametry: `{ targetHours }`
|
|
356
|
+
- závislé fronty (do kterých jsou odesílány zprávy z metody workeru)
|
|
357
|
+
- žádné
|
|
358
|
+
- datové zdroje
|
|
359
|
+
- CEM API
|
|
360
|
+
- transformace
|
|
361
|
+
- [transformations](../src/integration-engine/transformations)
|
|
362
|
+
- data modely
|
|
363
|
+
- VpalacMeasurementModel `vpalac_measurement`
|
|
364
|
+
- VpalacMeasuringEquipmentModel `vpalac_measuring_equipment`
|
|
365
|
+
- VpalacMeterTypeModel `vpalac_meter_type`
|
|
366
|
+
- VpalacTypeMeasuringEquipmentModel `vpalac_type_measuring_equipment`
|
|
367
|
+
- VpalacUnitsModel `vpalac_units`
|
|
368
|
+
|
|
369
|
+
#### _fetchXDaysData()_
|
|
370
|
+
|
|
371
|
+
Metoda sbírá historická data
|
|
372
|
+
|
|
373
|
+
- vstupní rabbitmq fronta
|
|
374
|
+
- název: dataplatform.energetics.fetchVpalacXDaysData
|
|
375
|
+
- TTL: 1 den
|
|
376
|
+
- parametry: `{ targetDays }`
|
|
377
|
+
- závislé fronty (do kterých jsou odesílány zprávy z metody workeru)
|
|
378
|
+
- žádné
|
|
379
|
+
- datové zdroje
|
|
380
|
+
- CEM API
|
|
381
|
+
- transformace
|
|
382
|
+
- [transformations](../src/integration-engine/transformations)
|
|
383
|
+
- data modely
|
|
384
|
+
- VpalacMeasurementModel `vpalac_measurement`
|
|
385
|
+
- VpalacMeasuringEquipmentModel `vpalac_measuring_equipment`
|
|
386
|
+
- VpalacMeterTypeModel `vpalac_meter_type`
|
|
387
|
+
- VpalacTypeMeasuringEquipmentModel `vpalac_type_measuring_equipment`
|
|
388
|
+
- VpalacUnitsModel `vpalac_units`
|
|
389
|
+
|
|
390
|
+
## Uložení dat
|
|
391
|
+
|
|
392
|
+
- typ databáze
|
|
393
|
+
- PSQL
|
|
394
|
+
- databázové schéma
|
|
395
|
+
- OICT Energetika <br/>
|
|
396
|
+

|
|
397
|
+
- Vrtbovský palác <br/>
|
|
398
|
+

|
|
399
|
+
- Poskytovatelé komodit <br/>
|
|
400
|
+

|
|
401
|
+
- retence dat
|
|
402
|
+
- data si uchováváme
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
openapi: 3.0.3
|
|
2
|
+
info:
|
|
3
|
+
title: ⚡ Energetics
|
|
4
|
+
description: >-
|
|
5
|
+
<p> ⚡ Energetika</p>
|
|
6
|
+
version: 1.0.0
|
|
7
|
+
contact:
|
|
8
|
+
name: Golemio Prague Data Plaform
|
|
9
|
+
email: golemio@operatorict.cz
|
|
10
|
+
url: https://golemio.cz
|
|
11
|
+
servers:
|
|
12
|
+
- url: https://rabin.golemio.cz/v2
|
|
13
|
+
description: Test (development) server
|
|
14
|
+
- url: https://api.golemio.cz/v2
|
|
15
|
+
description: Main (production) server
|
|
16
|
+
|
|
17
|
+
paths:
|
|
18
|
+
/ptas/{id}:
|
|
19
|
+
post:
|
|
20
|
+
parameters:
|
|
21
|
+
- in: path
|
|
22
|
+
name: id
|
|
23
|
+
required: true
|
|
24
|
+
schema:
|
|
25
|
+
type: integer
|
|
26
|
+
minimum: 1
|
|
27
|
+
example: 3336025
|
|
28
|
+
description: The meter ID
|
|
29
|
+
tags:
|
|
30
|
+
- ⚡ Energetics
|
|
31
|
+
summary: Receive and save data
|
|
32
|
+
requestBody:
|
|
33
|
+
content:
|
|
34
|
+
text/plain:
|
|
35
|
+
schema:
|
|
36
|
+
$ref: "#/components/schemas/PtasMeasurement"
|
|
37
|
+
examples:
|
|
38
|
+
text/plain:
|
|
39
|
+
summary: Sample data
|
|
40
|
+
value:
|
|
41
|
+
"Datum odečtu;Čas odečtu;Výrobní číslo;Druh registru;Odečet;MJ odečtu;MJ zúčt.;OM závislé;Typ odečtu;Status odečtu
|
|
42
|
+
|
|
43
|
+
25.4.2024;00:56;68837353;Teplo horké vody;2 969,03;GJ;GJ;;;nenalezeno"
|
|
44
|
+
|
|
45
|
+
responses:
|
|
46
|
+
204:
|
|
47
|
+
description: OK
|
|
48
|
+
401:
|
|
49
|
+
$ref: "#/components/responses/UnauthorizedError"
|
|
50
|
+
404:
|
|
51
|
+
description: Not found
|
|
52
|
+
422:
|
|
53
|
+
description: Error while validating input data
|
|
54
|
+
|
|
55
|
+
components:
|
|
56
|
+
responses:
|
|
57
|
+
UnauthorizedError:
|
|
58
|
+
description: API key is missing or invalid
|
|
59
|
+
headers:
|
|
60
|
+
x-access-token:
|
|
61
|
+
schema:
|
|
62
|
+
type: string
|
|
63
|
+
schemas:
|
|
64
|
+
PtasMeasurement:
|
|
65
|
+
type: object
|
|
66
|
+
required:
|
|
67
|
+
- Datum odečtu
|
|
68
|
+
- Čas odečtu
|
|
69
|
+
- Výrobní číslo
|
|
70
|
+
- Druh registru
|
|
71
|
+
- Odečet
|
|
72
|
+
- MJ odečtu
|
|
73
|
+
- MJ zúčt.
|
|
74
|
+
- OM závislé
|
|
75
|
+
- Typ odečtu
|
|
76
|
+
- Status odečtu
|
|
77
|
+
properties:
|
|
78
|
+
Datum odečtu:
|
|
79
|
+
type: string
|
|
80
|
+
Čas odečtu:
|
|
81
|
+
type: string
|
|
82
|
+
Výrobní číslo:
|
|
83
|
+
type: string
|
|
84
|
+
Druh registru:
|
|
85
|
+
type: string
|
|
86
|
+
Odečet:
|
|
87
|
+
type: string
|
|
88
|
+
MJ odečtu:
|
|
89
|
+
type: string
|
|
90
|
+
MJ zúčt.:
|
|
91
|
+
type: string
|
|
92
|
+
OM závislé:
|
|
93
|
+
type: string
|
|
94
|
+
Typ odečtu:
|
|
95
|
+
type: string
|
|
96
|
+
Status odečtu:
|
|
97
|
+
type: string
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@golemio/energetics",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.5-dev.1298662589",
|
|
4
4
|
"description": "Golemio Energetics Module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
"pretest": "golemio import-db-data",
|
|
12
12
|
"test": "cross-env NODE_ENV=test mocha --exit --check-leaks --timeout 120000 -r ts-node/register -r tsconfig-paths/register -r dotenv/config --file 'test/setup.ts' 'test/**/*.test.ts'",
|
|
13
13
|
"test-debug": "run-s 'test -- --inspect-brk=9230'",
|
|
14
|
+
"apidocs-test": "npm run apidocs-test-input",
|
|
15
|
+
"apidocs-test-input": "cross-env NODE_ENV=test golemio swagger api-test --oas docs/openapi-input.yaml --script test/api-docs/input-gateway/server.js",
|
|
14
16
|
"code-coverage": "nyc run-s 'test -- -r source-map-support/register'",
|
|
15
17
|
"generate-docs": "typedoc --out docs/typedoc src",
|
|
16
18
|
"lint": "eslint \"{src,test}/**/*.ts\""
|
|
@@ -29,6 +31,7 @@
|
|
|
29
31
|
"npm": ">=8.0.0"
|
|
30
32
|
},
|
|
31
33
|
"devDependencies": {
|
|
34
|
+
"@apideck/portman": "^1.26.5",
|
|
32
35
|
"@commitlint/cli": "^11.0.0",
|
|
33
36
|
"@commitlint/config-conventional": "^11.0.0",
|
|
34
37
|
"@golemio/cli": "1.5.0",
|
|
@@ -39,7 +42,11 @@
|
|
|
39
42
|
"@types/chai-as-promised": "7.1.2",
|
|
40
43
|
"@types/mocha": "^8.2.0",
|
|
41
44
|
"@types/node": "^20.12.7",
|
|
45
|
+
"@types/papaparse": "^5.3.14",
|
|
42
46
|
"@types/sinon": "^9.0.10",
|
|
47
|
+
"@types/supertest": "^6.0.2",
|
|
48
|
+
"body-parser": "^1.20.2",
|
|
49
|
+
"body-parser-csv": "^1.1.0",
|
|
43
50
|
"chai": "4.2.0",
|
|
44
51
|
"chai-as-promised": "7.1.1",
|
|
45
52
|
"cross-env": "^7.0.3",
|
|
@@ -48,11 +55,13 @@
|
|
|
48
55
|
"mocha": "^9.1.2",
|
|
49
56
|
"npm-run-all": "^4.1.5",
|
|
50
57
|
"nyc": "^15.1.0",
|
|
58
|
+
"papaparse": "^5.4.1",
|
|
51
59
|
"prettier": "^2.5.1",
|
|
52
60
|
"pretty-quick": "^3.1.0",
|
|
53
61
|
"rimraf": "^3.0.2",
|
|
54
62
|
"sinon": "^9.2.3",
|
|
55
63
|
"source-map-support": "0.5.21",
|
|
64
|
+
"supertest": "^7.0.0",
|
|
56
65
|
"ts-node": "^10.9.1",
|
|
57
66
|
"ts-patch": "3.0.0-beta3",
|
|
58
67
|
"tsconfig-paths": "^4.2.0",
|