UNPKG

flexmonster-mongo-connector

Version:

MongoDB connector for Flexmonster Pivot Table and Charts

119 lines 6.74 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.DataManager = void 0; const LocalDataCache_1 = require("./impl/LocalDataCache"); const Register_1 = require("../requests/register/Register"); const ProbibalisticCacheStrategie_1 = require("./cacheStrategies/impl/ProbibalisticCacheStrategie"); const SimpleCacheStrategie_1 = require("./cacheStrategies/impl/SimpleCacheStrategie"); const RequestKey_1 = require("../requests/register/RequestKey"); const ConfigManager_1 = require("../config/ConfigManager"); const LoggingMessages_1 = require("../utils/consts/LoggingMessages"); const LoggingManager_1 = require("../logging/LoggingManager"); const RequestsFactory_1 = require("../requests/requestsFactory.ts/RequestsFactory"); const ArrayDataObject_1 = require("./dataObject/impl/ArrayDataObject"); const SimpleNumericIterator_1 = require("./customIterators/SimpleNumericIterator"); class DataManager { constructor(queryBuilder, queryExecutor) { this.isProbabilisticCacheFlushEnabled = true; this._queryBuilder = queryBuilder; this._queryExecutor = queryExecutor; const cacheStategie = this.isProbabilisticCacheFlushEnabled ? new ProbibalisticCacheStrategie_1.ProbibalisticCacheStrategie() : new SimpleCacheStrategie_1.SimpleCacheStrategie(); const currentConfig = ConfigManager_1.ConfigManager.getInstance().currentConfig; this._cacheManager = currentConfig.cacheEnabled ? new LocalDataCache_1.LocalDataCache(cacheStategie, ConfigManager_1.ConfigManager.getInstance().currentConfig) : null; this._requestsRegister = new Register_1.Register(); } getData(requestArgument, requestType, currentPage) { return __awaiter(this, void 0, void 0, function* () { if (currentPage.pageToken != null) { const registerItem = this._requestsRegister.deleteItem(currentPage.pageToken); if (registerItem == undefined) throw new Error("The data has been updated. Please refresh the page."); const retrievalResult = yield this.getDataChunk(registerItem.data, registerItem.iterator); let nextPageToken = null; if (!retrievalResult.isFinished) { nextPageToken = new RequestKey_1.RequestKey(registerItem.apiRequest.requestArgument.clientQuery).hash(); this._requestsRegister.addItem(nextPageToken, registerItem); } return registerItem.apiRequest.toJSON(retrievalResult.data, nextPageToken); } const apiRequest = RequestsFactory_1.RequestFactory.createRequestInstance(requestArgument, requestType); const dataInstance = yield this._getData(apiRequest); const iterator = this.getIterator(dataInstance); const retrievalResult = yield this.getDataChunk(dataInstance, iterator); let nextPageToken = null; if (!retrievalResult.isFinished) { nextPageToken = new RequestKey_1.RequestKey(apiRequest.requestArgument.clientQuery).hash(); this._requestsRegister.addItem(nextPageToken, { data: dataInstance, iterator: iterator, apiRequest: apiRequest }); } return apiRequest.toJSON(retrievalResult.data, nextPageToken); }); } _getData(apiRequest) { return __awaiter(this, void 0, void 0, function* () { const cacheKey = { databaseName: apiRequest.requestArgument.db.databaseName, index: apiRequest.requestArgument.index, clientQuery: apiRequest.requestArgument.clientQuery }; let data = this.getDataFromCache(cacheKey); LoggingManager_1.LoggingManager.log(`Client query: ${JSON.stringify(apiRequest.requestArgument.clientQuery)}`); if (data === undefined) { data = yield apiRequest.getData(this._queryBuilder, this._queryExecutor); this.setDataToCache(cacheKey, data); if (ConfigManager_1.ConfigManager.getInstance().currentConfig.cacheEnabled) { LoggingManager_1.LoggingManager.log(`Putting ${apiRequest.loggingTemplate} data to cache`); LoggingManager_1.LoggingManager.log(this.getCacheMemoryStatus()); } } else { LoggingManager_1.LoggingManager.log(`Getting ${apiRequest.loggingTemplate} data from cache`); } return data; }); } getDataFromCache(keyObject) { if (this._cacheManager === null) return undefined; return this._cacheManager.getCache(keyObject); } setDataToCache(keyObject, data) { if (this._cacheManager === null) return undefined; this._cacheManager.setCache(keyObject, data); } getCacheMemoryStatus() { if (this._cacheManager === null) return LoggingMessages_1.LoggingMessages.DISABLED_CACHE_MESSAGE; return this._cacheManager.getCacheMemoryStatus(); } getIterator(dataInstance) { if (dataInstance instanceof ArrayDataObject_1.ArrayDataObject) { return dataInstance.isCompleted ? dataInstance.getIterationKeys() : new SimpleNumericIterator_1.SimpleNumericIterator(); } return dataInstance.getIterationKeys(); } getDataChunk(dataInstance, iterator) { return __awaiter(this, void 0, void 0, function* () { if (dataInstance instanceof ArrayDataObject_1.ArrayDataObject) { return dataInstance.isCompleted ? dataInstance.getChunk(iterator) : dataInstance.getChunkAsync(iterator); } return dataInstance.getChunk(iterator); }); } } exports.DataManager = DataManager; //# sourceMappingURL=DataManager.js.map