keeyu-azure-service-bus 1.0.33 → 1.0.34
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/enums/message.d.ts +6 -0
- package/dist/enums/message.js +10 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +3 -3
- package/dist/interfaces/message.d.ts +53 -0
- package/dist/interfaces/message.js +2 -0
- package/dist/logger/logger.d.ts +3 -0
- package/dist/logger/logger.js +33 -0
- package/dist/models/job-info.model.d.ts +5 -1
- package/dist/models/job-info.model.js +8 -4
- package/dist/models/persist-data.model.d.ts +0 -9
- package/dist/models/persist-data.model.js +16 -12
- package/dist/models/query-metric-data-all.d.ts +3 -1
- package/dist/models/query-metric-data-all.js +5 -3
- package/dist/models/query-metric-data-chunked.d.ts +9 -9
- package/dist/models/query-metric-data-chunked.js +6 -28
- package/dist/models/query-metric-data-onboarding.d.ts +3 -1
- package/dist/models/query-metric-data-onboarding.js +5 -3
- package/dist/models/request-body.model.d.ts +3 -3
- package/dist/models/request-body.model.js +5 -5
- package/dist/models/request-info.model.d.ts +3 -2
- package/dist/models/request-info.model.js +3 -3
- package/dist/models/request-params.model.d.ts +2 -1
- package/dist/models/request-params.model.js +3 -1
- package/dist/services/persistence/api-request-service.d.ts +16 -0
- package/dist/services/persistence/api-request-service.js +68 -0
- package/dist/services/persistence/persistence-client.d.ts +13 -0
- package/dist/services/persistence/persistence-client.js +41 -0
- package/dist/services/service-bus/service-bus-client.d.ts +2 -5
- package/package.json +6 -2
- package/src/enums/message.ts +6 -0
- package/src/index.ts +3 -4
- package/src/interfaces/message.ts +59 -0
- package/src/logger/logger.ts +37 -0
- package/src/models/job-info.model.ts +12 -5
- package/src/models/persist-data.model.ts +16 -16
- package/src/models/query-metric-data-all.ts +8 -4
- package/src/models/query-metric-data-chunked.ts +15 -37
- package/src/models/query-metric-data-onboarding.ts +8 -4
- package/src/models/request-body.model.ts +5 -5
- package/src/models/request-info.model.ts +6 -4
- package/src/models/request-params.model.ts +4 -1
- package/src/services/persistence/api-request-service.ts +63 -0
- package/src/services/persistence/persistence-client.ts +37 -0
- package/src/services/service-bus/service-bus-client.ts +4 -7
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MessageEnum = void 0;
|
|
4
|
+
var MessageEnum;
|
|
5
|
+
(function (MessageEnum) {
|
|
6
|
+
MessageEnum["on_boarding"] = "OnBoarding";
|
|
7
|
+
MessageEnum["wider"] = "Wider";
|
|
8
|
+
MessageEnum["normal"] = "Normal";
|
|
9
|
+
MessageEnum["chunked"] = "Chunked";
|
|
10
|
+
})(MessageEnum || (exports.MessageEnum = MessageEnum = {}));
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import QueryMetricDataAll from "./models/query-metric-data-all";
|
|
2
2
|
import QueryMetricDataOnboarding from "./models/query-metric-data-onboarding";
|
|
3
3
|
import QueryMetricDataChunked from "./models/query-metric-data-chunked";
|
|
4
|
-
import PersistData from "./models/persist-data.model";
|
|
5
4
|
import ServiceBus from "./services/service-bus/service-bus-client";
|
|
6
5
|
import ServiceBusAdminClient from "./services/service-bus/service-bus-admin-client";
|
|
7
6
|
import { ServiceBusReceivedMessage, ProcessErrorArgs } from "@azure/service-bus";
|
|
8
|
-
|
|
7
|
+
import PersistenceClient from "./services/persistence/persistence-client";
|
|
8
|
+
export { ServiceBus, ServiceBusAdminClient, QueryMetricDataAll, QueryMetricDataOnboarding, ServiceBusReceivedMessage, ProcessErrorArgs, QueryMetricDataChunked, PersistenceClient };
|
package/dist/index.js
CHANGED
|
@@ -3,16 +3,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.PersistenceClient = exports.QueryMetricDataChunked = exports.QueryMetricDataOnboarding = exports.QueryMetricDataAll = exports.ServiceBusAdminClient = exports.ServiceBus = void 0;
|
|
7
7
|
const query_metric_data_all_1 = __importDefault(require("./models/query-metric-data-all"));
|
|
8
8
|
exports.QueryMetricDataAll = query_metric_data_all_1.default;
|
|
9
9
|
const query_metric_data_onboarding_1 = __importDefault(require("./models/query-metric-data-onboarding"));
|
|
10
10
|
exports.QueryMetricDataOnboarding = query_metric_data_onboarding_1.default;
|
|
11
11
|
const query_metric_data_chunked_1 = __importDefault(require("./models/query-metric-data-chunked"));
|
|
12
12
|
exports.QueryMetricDataChunked = query_metric_data_chunked_1.default;
|
|
13
|
-
const persist_data_model_1 = __importDefault(require("./models/persist-data.model"));
|
|
14
|
-
exports.PersistData = persist_data_model_1.default;
|
|
15
13
|
const service_bus_client_1 = __importDefault(require("./services/service-bus/service-bus-client"));
|
|
16
14
|
exports.ServiceBus = service_bus_client_1.default;
|
|
17
15
|
const service_bus_admin_client_1 = __importDefault(require("./services/service-bus/service-bus-admin-client"));
|
|
18
16
|
exports.ServiceBusAdminClient = service_bus_admin_client_1.default;
|
|
17
|
+
const persistence_client_1 = __importDefault(require("./services/persistence/persistence-client"));
|
|
18
|
+
exports.PersistenceClient = persistence_client_1.default;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import JobInfo from "../models/job-info.model";
|
|
2
|
+
import RequestBody from "../models/request-body.model";
|
|
3
|
+
import RequestsInfo from "../models/request-info.model";
|
|
4
|
+
import RequestParams from "../models/request-params.model";
|
|
5
|
+
export interface MessageDto {
|
|
6
|
+
tenantId: string;
|
|
7
|
+
channelId: string;
|
|
8
|
+
componentId: string;
|
|
9
|
+
componentName: string;
|
|
10
|
+
url: string;
|
|
11
|
+
connectorUrl: string;
|
|
12
|
+
headers: HeadersInfo[];
|
|
13
|
+
connectorId: string;
|
|
14
|
+
connectorInfo: ConnectorInfo;
|
|
15
|
+
scheduleFields: ScheduleFields;
|
|
16
|
+
metricDetailedConfiguration?: any;
|
|
17
|
+
componentOptions?: Record<string, string>;
|
|
18
|
+
params?: any;
|
|
19
|
+
}
|
|
20
|
+
export interface ChunkedMessageDto {
|
|
21
|
+
jobInfo: JobInfo;
|
|
22
|
+
requestInfo: RequestsInfo;
|
|
23
|
+
requestParams: RequestParams;
|
|
24
|
+
requestBody: RequestBody;
|
|
25
|
+
}
|
|
26
|
+
export interface HeadersInfo {
|
|
27
|
+
key: string;
|
|
28
|
+
value: string | boolean | number;
|
|
29
|
+
}
|
|
30
|
+
export interface ConnectorInfo {
|
|
31
|
+
_id: string;
|
|
32
|
+
name: string;
|
|
33
|
+
queueName: string;
|
|
34
|
+
}
|
|
35
|
+
export interface ScheduleFields {
|
|
36
|
+
componentId: string;
|
|
37
|
+
channelId?: string;
|
|
38
|
+
tenantId?: string;
|
|
39
|
+
normalPullSchedule: string;
|
|
40
|
+
widerPullSchedule: string;
|
|
41
|
+
normalTimeRange: number;
|
|
42
|
+
widerTimeRange: number;
|
|
43
|
+
persistenceCollection: string;
|
|
44
|
+
isProcessing: boolean;
|
|
45
|
+
lastRunTime: string | null;
|
|
46
|
+
requireOnboarding: boolean;
|
|
47
|
+
scheduleActive: boolean;
|
|
48
|
+
lastSuccessfulCompletionDate?: string | null;
|
|
49
|
+
}
|
|
50
|
+
export interface PostRequestAttributes {
|
|
51
|
+
params: Record<string, string>;
|
|
52
|
+
data: unknown;
|
|
53
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const winston_1 = __importDefault(require("winston"));
|
|
7
|
+
const winston_daily_rotate_file_1 = __importDefault(require("winston-daily-rotate-file"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const logFolder = 'logs';
|
|
10
|
+
// Ensure the logs directory exists
|
|
11
|
+
if (!fs_1.default.existsSync(logFolder)) {
|
|
12
|
+
fs_1.default.mkdirSync(logFolder);
|
|
13
|
+
}
|
|
14
|
+
// Define log formats
|
|
15
|
+
const logFormat = winston_1.default.format.printf(({ level, message, timestamp }) => {
|
|
16
|
+
return `${timestamp} ${level}: ${message}`;
|
|
17
|
+
});
|
|
18
|
+
// Define transports
|
|
19
|
+
const consoleTransport = new winston_1.default.transports.Console();
|
|
20
|
+
const fileTransport = new winston_daily_rotate_file_1.default({
|
|
21
|
+
dirname: logFolder,
|
|
22
|
+
filename: 'app-%DATE%.log',
|
|
23
|
+
datePattern: 'YYYY-MM-DD',
|
|
24
|
+
zippedArchive: true,
|
|
25
|
+
maxSize: '20m', // Set the maximum size for a log file
|
|
26
|
+
maxFiles: '1d', // Retain logs for 1 day
|
|
27
|
+
});
|
|
28
|
+
// Create the logger
|
|
29
|
+
const logger = winston_1.default.createLogger({
|
|
30
|
+
format: winston_1.default.format.combine(winston_1.default.format.timestamp(), logFormat),
|
|
31
|
+
transports: [consoleTransport, fileTransport],
|
|
32
|
+
});
|
|
33
|
+
exports.default = logger;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { MessageDto } from "../interfaces/message";
|
|
1
2
|
export default class JobInfo {
|
|
2
3
|
daysToPull: string;
|
|
3
4
|
tenantId: string;
|
|
@@ -7,6 +8,9 @@ export default class JobInfo {
|
|
|
7
8
|
startDate: string;
|
|
8
9
|
endDate: string;
|
|
9
10
|
persistenceCollection: string;
|
|
10
|
-
|
|
11
|
+
lastRunTime: string | null;
|
|
12
|
+
isProcessing: boolean;
|
|
13
|
+
queueName: string;
|
|
14
|
+
constructor(data: MessageDto);
|
|
11
15
|
private getFormatedDate;
|
|
12
16
|
}
|
|
@@ -6,12 +6,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const joi_1 = __importDefault(require("joi"));
|
|
7
7
|
class JobInfo {
|
|
8
8
|
constructor(data) {
|
|
9
|
+
var _a;
|
|
9
10
|
const schema = joi_1.default.object({
|
|
10
11
|
scheduleFields: joi_1.default.object({
|
|
11
12
|
normalTimeRange: joi_1.default.number().positive().required(),
|
|
12
13
|
widerTimeRange: joi_1.default.number().positive().required(),
|
|
13
14
|
requireOnboarding: joi_1.default.boolean().required(),
|
|
14
15
|
persistenceCollection: joi_1.default.required(),
|
|
16
|
+
lastRunTime: joi_1.default.optional(),
|
|
17
|
+
isProcessing: joi_1.default.required()
|
|
15
18
|
}).unknown(true),
|
|
16
19
|
tenantId: joi_1.default.required(),
|
|
17
20
|
channelId: joi_1.default.required(),
|
|
@@ -21,18 +24,19 @@ class JobInfo {
|
|
|
21
24
|
const { error, value } = schema.validate(data);
|
|
22
25
|
if (error)
|
|
23
26
|
throw new Error(error.message);
|
|
24
|
-
const { scheduleFields: { normalTimeRange, widerTimeRange, requireOnboarding, persistenceCollection }, tenantId, channelId, componentId, connectorId } = value;
|
|
27
|
+
const { scheduleFields: { normalTimeRange, widerTimeRange, requireOnboarding, persistenceCollection, isProcessing, lastRunTime }, tenantId, channelId, componentId, connectorId } = value;
|
|
28
|
+
this.queueName = (_a = data === null || data === void 0 ? void 0 : data.connectorInfo) === null || _a === void 0 ? void 0 : _a.queueName;
|
|
25
29
|
const today = new Date();
|
|
26
|
-
const startDate = new Date();
|
|
27
|
-
startDate.setUTCHours(0, 0, 0, 0);
|
|
28
30
|
this.daysToPull = requireOnboarding ? widerTimeRange : normalTimeRange;
|
|
29
31
|
this.tenantId = tenantId;
|
|
30
32
|
this.channelId = channelId;
|
|
31
33
|
this.connectorId = connectorId;
|
|
32
34
|
this.componentId = componentId;
|
|
33
35
|
this.persistenceCollection = persistenceCollection;
|
|
34
|
-
this.startDate = this.getFormatedDate(new Date(
|
|
36
|
+
this.startDate = this.getFormatedDate(new Date(today.getTime() - (requireOnboarding ? widerTimeRange : normalTimeRange) * 24 * 60 * 60 * 1000));
|
|
35
37
|
this.endDate = this.getFormatedDate(today);
|
|
38
|
+
this.isProcessing = isProcessing;
|
|
39
|
+
this.lastRunTime = lastRunTime;
|
|
36
40
|
}
|
|
37
41
|
getFormatedDate(date) {
|
|
38
42
|
return date.toISOString().split('.')[0] + "Z";
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
2
|
+
// export default class PersistData {
|
|
3
|
+
// connectorId: string;
|
|
4
|
+
// channelId: string;
|
|
5
|
+
// tenantId: string;
|
|
6
|
+
// componentId: string;
|
|
7
|
+
// idKey: string;
|
|
8
|
+
// data: any[];
|
|
9
|
+
// constructor(data: any) {
|
|
10
|
+
// this.connectorId = data.connectorId;
|
|
11
|
+
// this.componentId = data.componentId;
|
|
12
|
+
// this.channelId = data.channelId;
|
|
13
|
+
// this.tenantId = data.tenantId;
|
|
14
|
+
// this.idKey = data.idKey;
|
|
15
|
+
// this.data = data.record_list;
|
|
16
|
+
// }
|
|
17
|
+
// }
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
import { MessageDto } from "../interfaces/message";
|
|
1
2
|
import JobInfo from "./job-info.model";
|
|
2
3
|
import RequestBody from "./request-body.model";
|
|
3
4
|
import RequestsInfo from "./request-info.model";
|
|
4
5
|
import RequestParams from "./request-params.model";
|
|
5
6
|
export default class QueryMetricDataAll {
|
|
7
|
+
type: string;
|
|
6
8
|
jobInfo: JobInfo;
|
|
7
9
|
requestInfo: RequestsInfo;
|
|
8
10
|
requestParams: RequestParams;
|
|
9
11
|
requestBody: RequestBody;
|
|
10
|
-
constructor(data:
|
|
12
|
+
constructor(data: MessageDto);
|
|
11
13
|
}
|
|
@@ -3,16 +3,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const message_1 = require("../enums/message");
|
|
6
7
|
const job_info_model_1 = __importDefault(require("./job-info.model"));
|
|
7
8
|
const request_body_model_1 = __importDefault(require("./request-body.model"));
|
|
8
9
|
const request_info_model_1 = __importDefault(require("./request-info.model"));
|
|
9
10
|
const request_params_model_1 = __importDefault(require("./request-params.model"));
|
|
10
11
|
class QueryMetricDataAll {
|
|
11
12
|
constructor(data) {
|
|
13
|
+
this.type = message_1.MessageEnum.normal;
|
|
12
14
|
this.jobInfo = new job_info_model_1.default(data);
|
|
13
|
-
this.requestInfo = new request_info_model_1.default(data);
|
|
14
|
-
this.requestParams = new request_params_model_1.default(data);
|
|
15
|
-
this.requestBody = new request_body_model_1.default(data);
|
|
15
|
+
this.requestInfo = new request_info_model_1.default(data.headers, data.url);
|
|
16
|
+
this.requestParams = new request_params_model_1.default(data === null || data === void 0 ? void 0 : data.params);
|
|
17
|
+
this.requestBody = new request_body_model_1.default(data === null || data === void 0 ? void 0 : data.metricDetailedConfiguration, data === null || data === void 0 ? void 0 : data.componentOptions);
|
|
16
18
|
}
|
|
17
19
|
}
|
|
18
20
|
exports.default = QueryMetricDataAll;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
+
import { ChunkedMessageDto } from "../interfaces/message";
|
|
2
|
+
import JobInfo from "./job-info.model";
|
|
1
3
|
import RequestBody from "./request-body.model";
|
|
4
|
+
import RequestsInfo from "./request-info.model";
|
|
5
|
+
import RequestParams from "./request-params.model";
|
|
2
6
|
export default class QueryMetricDataChunked {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
persistenceCollection: string;
|
|
8
|
-
startDate: string;
|
|
9
|
-
endDate: string;
|
|
10
|
-
pageNo: number;
|
|
7
|
+
type: string;
|
|
8
|
+
jobInfo: JobInfo;
|
|
9
|
+
requestInfo: RequestsInfo;
|
|
10
|
+
requestParams: RequestParams;
|
|
11
11
|
requestBody: RequestBody;
|
|
12
|
-
constructor(data:
|
|
12
|
+
constructor(data: ChunkedMessageDto);
|
|
13
13
|
}
|
|
@@ -1,35 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const
|
|
3
|
+
const message_1 = require("../enums/message");
|
|
7
4
|
class QueryMetricDataChunked {
|
|
8
5
|
constructor(data) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
persistenceCollection: joi_1.default.required(),
|
|
15
|
-
startDate: joi_1.default.required(),
|
|
16
|
-
endDate: joi_1.default.required(),
|
|
17
|
-
pageNo: joi_1.default.required(),
|
|
18
|
-
}).unknown(true);
|
|
19
|
-
const { error, value } = schema.validate(data);
|
|
20
|
-
if (error)
|
|
21
|
-
throw new Error(error.message);
|
|
22
|
-
const { tenantId, channelId, componentId, connectorId, persistenceCollection, startDate, endDate, pageNo } = value;
|
|
23
|
-
this.tenantId = tenantId;
|
|
24
|
-
this.channelId = channelId;
|
|
25
|
-
this.connectorId = connectorId;
|
|
26
|
-
this.componentId = componentId;
|
|
27
|
-
this.connectorId = connectorId;
|
|
28
|
-
this.persistenceCollection = persistenceCollection;
|
|
29
|
-
this.startDate = startDate;
|
|
30
|
-
this.endDate = endDate;
|
|
31
|
-
this.pageNo = Number(pageNo);
|
|
32
|
-
this.requestBody = data.headers;
|
|
6
|
+
this.type = message_1.MessageEnum.chunked;
|
|
7
|
+
this.jobInfo = data.jobInfo;
|
|
8
|
+
this.requestInfo = data.requestInfo;
|
|
9
|
+
this.requestParams = data.requestParams;
|
|
10
|
+
this.requestBody = data.requestBody;
|
|
33
11
|
}
|
|
34
12
|
}
|
|
35
13
|
exports.default = QueryMetricDataChunked;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
import { MessageDto } from "../interfaces/message";
|
|
1
2
|
import JobInfo from "./job-info.model";
|
|
2
3
|
import RequestBody from "./request-body.model";
|
|
3
4
|
import RequestsInfo from "./request-info.model";
|
|
4
5
|
import RequestParams from "./request-params.model";
|
|
5
6
|
export default class QueryMetricDataOnboarding {
|
|
7
|
+
type: string;
|
|
6
8
|
jobInfo: JobInfo;
|
|
7
9
|
requestInfo: RequestsInfo;
|
|
8
10
|
requestParams: RequestParams;
|
|
9
11
|
requestBody: RequestBody;
|
|
10
|
-
constructor(data:
|
|
12
|
+
constructor(data: MessageDto);
|
|
11
13
|
}
|
|
@@ -3,16 +3,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const message_1 = require("../enums/message");
|
|
6
7
|
const job_info_model_1 = __importDefault(require("./job-info.model"));
|
|
7
8
|
const request_body_model_1 = __importDefault(require("./request-body.model"));
|
|
8
9
|
const request_info_model_1 = __importDefault(require("./request-info.model"));
|
|
9
10
|
const request_params_model_1 = __importDefault(require("./request-params.model"));
|
|
10
11
|
class QueryMetricDataOnboarding {
|
|
11
12
|
constructor(data) {
|
|
13
|
+
this.type = message_1.MessageEnum.on_boarding;
|
|
12
14
|
this.jobInfo = new job_info_model_1.default(data);
|
|
13
|
-
this.requestInfo = new request_info_model_1.default(data);
|
|
14
|
-
this.requestParams = new request_params_model_1.default(data);
|
|
15
|
-
this.requestBody = new request_body_model_1.default(data);
|
|
15
|
+
this.requestInfo = new request_info_model_1.default(data.headers, data.url);
|
|
16
|
+
this.requestParams = new request_params_model_1.default(data.params);
|
|
17
|
+
this.requestBody = new request_body_model_1.default(data === null || data === void 0 ? void 0 : data.metricDetailedConfiguration, data === null || data === void 0 ? void 0 : data.componentOptions);
|
|
16
18
|
}
|
|
17
19
|
}
|
|
18
20
|
exports.default = QueryMetricDataOnboarding;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export default class
|
|
1
|
+
export default class RequestBody {
|
|
2
2
|
metricDetailedConfiguration: any;
|
|
3
|
-
componentOptions: Record<string, string
|
|
4
|
-
constructor(
|
|
3
|
+
componentOptions: Record<string, string> | null | undefined;
|
|
4
|
+
constructor(metricDetailedConfiguration: any, componentOptions: Record<string, string> | null | undefined);
|
|
5
5
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
class
|
|
4
|
-
constructor(
|
|
5
|
-
this.metricDetailedConfiguration =
|
|
6
|
-
this.componentOptions =
|
|
3
|
+
class RequestBody {
|
|
4
|
+
constructor(metricDetailedConfiguration, componentOptions) {
|
|
5
|
+
this.metricDetailedConfiguration = metricDetailedConfiguration;
|
|
6
|
+
this.componentOptions = componentOptions;
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
|
-
exports.default =
|
|
9
|
+
exports.default = RequestBody;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { HeadersInfo } from "../interfaces/message";
|
|
1
2
|
export default class RequestsInfo {
|
|
2
|
-
kcHeaders:
|
|
3
|
+
kcHeaders: HeadersInfo[];
|
|
3
4
|
url: string;
|
|
4
|
-
constructor(
|
|
5
|
+
constructor(headers: HeadersInfo[], url: string);
|
|
5
6
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
class RequestsInfo {
|
|
4
|
-
constructor(
|
|
5
|
-
this.kcHeaders =
|
|
6
|
-
this.url =
|
|
4
|
+
constructor(headers, url) {
|
|
5
|
+
this.kcHeaders = headers;
|
|
6
|
+
this.url = url;
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
9
|
exports.default = RequestsInfo;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AxiosInstance } from "axios";
|
|
2
|
+
import { PostRequestAttributes } from "../../interfaces/message";
|
|
3
|
+
import QueryMetricDataAll from "../../models/query-metric-data-all";
|
|
4
|
+
import QueryMetricDataChunked from "../../models/query-metric-data-chunked";
|
|
5
|
+
import QueryMetricDataOnboarding from "../../models/query-metric-data-onboarding";
|
|
6
|
+
import ServiceBus from "../service-bus/service-bus-client";
|
|
7
|
+
export declare class ApiRequestService {
|
|
8
|
+
MaxRetryAttempts: number;
|
|
9
|
+
protected readonly axiosInstance: AxiosInstance;
|
|
10
|
+
protected sbClient: ServiceBus;
|
|
11
|
+
protected message: QueryMetricDataAll | QueryMetricDataChunked | QueryMetricDataOnboarding;
|
|
12
|
+
constructor(baseUrl: string, message: QueryMetricDataAll | QueryMetricDataChunked | QueryMetricDataOnboarding, sbClient: ServiceBus);
|
|
13
|
+
post<T>(url: string, requestAttributes: PostRequestAttributes): Promise<T>;
|
|
14
|
+
private handleResponse;
|
|
15
|
+
private handleError;
|
|
16
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.ApiRequestService = void 0;
|
|
16
|
+
const axios_1 = __importDefault(require("axios"));
|
|
17
|
+
const query_metric_data_chunked_1 = __importDefault(require("../../models/query-metric-data-chunked"));
|
|
18
|
+
const logger_1 = __importDefault(require("../../logger/logger"));
|
|
19
|
+
class ApiRequestService {
|
|
20
|
+
constructor(baseUrl, message, sbClient) {
|
|
21
|
+
this.MaxRetryAttempts = 3;
|
|
22
|
+
this.message = message;
|
|
23
|
+
this.sbClient = sbClient;
|
|
24
|
+
this.axiosInstance = axios_1.default.create({
|
|
25
|
+
baseURL: baseUrl,
|
|
26
|
+
headers: {
|
|
27
|
+
"Content-Type": "application/json",
|
|
28
|
+
maxContentLength: 100000000,
|
|
29
|
+
maxBodyLength: 1000000000
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
this.axiosInstance.interceptors.response.use(this.handleResponse, this.handleError);
|
|
33
|
+
}
|
|
34
|
+
post(url, requestAttributes) {
|
|
35
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
36
|
+
const response = yield this.axiosInstance.post(url, requestAttributes);
|
|
37
|
+
return response === null || response === void 0 ? void 0 : response.data;
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
handleResponse(response) {
|
|
41
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
42
|
+
return response;
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
handleError(error) {
|
|
46
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
+
if (error.response) {
|
|
48
|
+
// Rate limit exceeded, retry after the specified delay
|
|
49
|
+
const resetTimeInSeconds = parseInt(error.response.headers['x-rate-limit-reset']);
|
|
50
|
+
const delayInSeconds = resetTimeInSeconds + 1;
|
|
51
|
+
logger_1.default.error(`got error, wait time is ${delayInSeconds}, header value is: ${error.response.headers['x-rate-limit-reset']}`);
|
|
52
|
+
if (delayInSeconds > 0 && this.MaxRetryAttempts > 0) {
|
|
53
|
+
yield new Promise((resolve) => setTimeout(resolve, delayInSeconds * 1000));
|
|
54
|
+
this.MaxRetryAttempts--;
|
|
55
|
+
return this.axiosInstance.post(error.request.config.url, { params: error.request.config.params, data: error.request.config.body });
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
const message = new query_metric_data_chunked_1.default(this.message);
|
|
59
|
+
const result = yield this.sbClient.scheduleMessage(this.message.jobInfo.queueName, 2, message);
|
|
60
|
+
logger_1.default.info(`Message is reschedule ${JSON.stringify(message)}`);
|
|
61
|
+
logger_1.default.info(`Response of schdule message method ${result}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
throw error;
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.ApiRequestService = ApiRequestService;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import QueryMetricDataAll from "../../models/query-metric-data-all";
|
|
2
|
+
import QueryMetricDataChunked from "../../models/query-metric-data-chunked";
|
|
3
|
+
import QueryMetricDataOnboarding from "../../models/query-metric-data-onboarding";
|
|
4
|
+
import ServiceBus from "../service-bus/service-bus-client";
|
|
5
|
+
import { ApiRequestService } from "./api-request-service";
|
|
6
|
+
declare class PersistenceClient {
|
|
7
|
+
protected axiosClient: ApiRequestService;
|
|
8
|
+
protected uniqueKey: string;
|
|
9
|
+
protected message: QueryMetricDataAll | QueryMetricDataChunked | QueryMetricDataOnboarding;
|
|
10
|
+
constructor(baseUrl: string, uniqueKey: string, message: QueryMetricDataAll | QueryMetricDataChunked | QueryMetricDataOnboarding, sbClient: ServiceBus);
|
|
11
|
+
protected persistData(data: unknown): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export default PersistenceClient;
|
|
@@ -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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const logger_1 = __importDefault(require("../../logger/logger"));
|
|
16
|
+
const api_request_service_1 = require("./api-request-service");
|
|
17
|
+
class PersistenceClient {
|
|
18
|
+
constructor(baseUrl, uniqueKey, message, sbClient) {
|
|
19
|
+
this.uniqueKey = uniqueKey;
|
|
20
|
+
this.message = message;
|
|
21
|
+
this.axiosClient = new api_request_service_1.ApiRequestService(baseUrl, message, sbClient);
|
|
22
|
+
}
|
|
23
|
+
persistData(data) {
|
|
24
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
const queryParams = {
|
|
26
|
+
startDate: this.message.jobInfo.startDate,
|
|
27
|
+
endDate: this.message.jobInfo.endDate,
|
|
28
|
+
tenantId: this.message.jobInfo.tenantId,
|
|
29
|
+
componentId: this.message.jobInfo.componentId,
|
|
30
|
+
connectorId: this.message.jobInfo.connectorId,
|
|
31
|
+
channelId: this.message.jobInfo.channelId,
|
|
32
|
+
persistenceCollection: this.message.jobInfo.persistenceCollection,
|
|
33
|
+
idKey: this.uniqueKey,
|
|
34
|
+
};
|
|
35
|
+
logger_1.default.info("API call to persistence service to save data");
|
|
36
|
+
const response = yield this.axiosClient.post("/save-data", { params: queryParams, data });
|
|
37
|
+
logger_1.default.info(`Response of persistence service after API call ${JSON.stringify(response)}`);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.default = PersistenceClient;
|
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
import { ProcessErrorArgs, ServiceBusClient, ServiceBusReceivedMessage } from "@azure/service-bus";
|
|
2
2
|
import QueryMetricDataAll from "../../models/query-metric-data-all";
|
|
3
|
-
import QueryMetricDataOnboarding from "../../models/query-metric-data-onboarding";
|
|
4
|
-
import PersistData from "../../models/persist-data.model";
|
|
5
|
-
import QueryMetricDataChunked from "../../models/query-metric-data-chunked";
|
|
6
3
|
type MessageHandler = (message: ServiceBusReceivedMessage) => void;
|
|
7
4
|
type ErrorHandler = (message: ProcessErrorArgs) => void;
|
|
8
5
|
declare class ServiceBus {
|
|
9
6
|
protected client: ServiceBusClient;
|
|
10
7
|
constructor(connectionString: string);
|
|
11
|
-
sendMessage(queueName: string, message: QueryMetricDataAll
|
|
8
|
+
sendMessage(queueName: string, message: QueryMetricDataAll): Promise<void>;
|
|
12
9
|
receiveMessage(queueName: string, onMessage: MessageHandler, onError: ErrorHandler): Promise<void>;
|
|
13
10
|
completeMessage(queueName: string, message: ServiceBusReceivedMessage): Promise<void>;
|
|
14
|
-
scheduleMessage(queueName: string, scheduleTime: number, message: QueryMetricDataAll
|
|
11
|
+
scheduleMessage(queueName: string, scheduleTime: number, message: QueryMetricDataAll): Promise<import("long").default[]>;
|
|
15
12
|
batchMessage(queueName: string, messages: any[]): Promise<void>;
|
|
16
13
|
}
|
|
17
14
|
export default ServiceBus;
|