keeyu-azure-service-bus 1.0.33 → 1.0.35

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.
Files changed (46) hide show
  1. package/dist/enums/message.d.ts +6 -0
  2. package/dist/enums/message.js +10 -0
  3. package/dist/index.d.ts +2 -2
  4. package/dist/index.js +3 -3
  5. package/dist/interfaces/message.d.ts +53 -0
  6. package/dist/interfaces/message.js +2 -0
  7. package/dist/logger/logger.d.ts +3 -0
  8. package/dist/logger/logger.js +33 -0
  9. package/dist/models/job-info.model.d.ts +5 -1
  10. package/dist/models/job-info.model.js +8 -4
  11. package/dist/models/persist-data.model.d.ts +0 -9
  12. package/dist/models/persist-data.model.js +16 -12
  13. package/dist/models/query-metric-data-all.d.ts +3 -1
  14. package/dist/models/query-metric-data-all.js +5 -3
  15. package/dist/models/query-metric-data-chunked.d.ts +9 -9
  16. package/dist/models/query-metric-data-chunked.js +6 -28
  17. package/dist/models/query-metric-data-onboarding.d.ts +3 -1
  18. package/dist/models/query-metric-data-onboarding.js +5 -3
  19. package/dist/models/request-body.model.d.ts +3 -3
  20. package/dist/models/request-body.model.js +5 -5
  21. package/dist/models/request-info.model.d.ts +3 -2
  22. package/dist/models/request-info.model.js +3 -3
  23. package/dist/models/request-params.model.d.ts +2 -1
  24. package/dist/models/request-params.model.js +3 -1
  25. package/dist/services/persistence/api-request-service.d.ts +16 -0
  26. package/dist/services/persistence/api-request-service.js +68 -0
  27. package/dist/services/persistence/persistence-client.d.ts +13 -0
  28. package/dist/services/persistence/persistence-client.js +41 -0
  29. package/dist/services/service-bus/service-bus-client.d.ts +2 -5
  30. package/package.json +6 -2
  31. package/src/enums/message.ts +6 -0
  32. package/src/index.ts +3 -4
  33. package/src/interfaces/message.ts +59 -0
  34. package/src/logger/logger.ts +37 -0
  35. package/src/models/job-info.model.ts +12 -5
  36. package/src/models/persist-data.model.ts +16 -16
  37. package/src/models/query-metric-data-all.ts +8 -4
  38. package/src/models/query-metric-data-chunked.ts +15 -37
  39. package/src/models/query-metric-data-onboarding.ts +8 -4
  40. package/src/models/request-body.model.ts +5 -5
  41. package/src/models/request-info.model.ts +6 -4
  42. package/src/models/request-params.model.ts +4 -1
  43. package/src/services/persistence/api-request-service.ts +63 -0
  44. package/src/services/persistence/persistence-client.ts +37 -0
  45. package/src/services/service-bus/service-bus-client.ts +4 -7
  46. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,6 @@
1
+ export declare enum MessageEnum {
2
+ on_boarding = "OnBoarding",
3
+ wider = "Wider",
4
+ normal = "Normal",
5
+ chunked = "Chunked"
6
+ }
@@ -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
- export { ServiceBus, ServiceBusAdminClient, QueryMetricDataAll, QueryMetricDataOnboarding, PersistData, ServiceBusReceivedMessage, ProcessErrorArgs, QueryMetricDataChunked };
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.QueryMetricDataChunked = exports.PersistData = exports.QueryMetricDataOnboarding = exports.QueryMetricDataAll = exports.ServiceBusAdminClient = exports.ServiceBus = void 0;
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,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ import winston from 'winston';
2
+ declare const logger: winston.Logger;
3
+ export default logger;
@@ -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
- constructor(data: any);
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(startDate.getTime() - (requireOnboarding ? widerTimeRange : normalTimeRange) * 24 * 60 * 60 * 1000));
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,9 +0,0 @@
1
- export default class PersistData {
2
- connectorId: string;
3
- channelId: string;
4
- tenantId: string;
5
- componentId: string;
6
- idKey: string;
7
- data: any[];
8
- constructor(data: any);
9
- }
@@ -1,13 +1,17 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- class PersistData {
4
- constructor(data) {
5
- this.connectorId = data.connectorId;
6
- this.componentId = data.componentId;
7
- this.channelId = data.channelId;
8
- this.tenantId = data.tenantId;
9
- this.idKey = data.idKey;
10
- this.data = data.record_list;
11
- }
12
- }
13
- exports.default = PersistData;
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: any);
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
- tenantId: string;
4
- channelId: string;
5
- componentId: string;
6
- connectorId: string;
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: any);
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 joi_1 = __importDefault(require("joi"));
3
+ const message_1 = require("../enums/message");
7
4
  class QueryMetricDataChunked {
8
5
  constructor(data) {
9
- const schema = joi_1.default.object({
10
- tenantId: joi_1.default.required(),
11
- channelId: joi_1.default.required(),
12
- componentId: joi_1.default.required(),
13
- connectorId: joi_1.default.required(),
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: any);
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 RequestParams {
1
+ export default class RequestBody {
2
2
  metricDetailedConfiguration: any;
3
- componentOptions: Record<string, string>;
4
- constructor(data: any);
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 RequestParams {
4
- constructor(data) {
5
- this.metricDetailedConfiguration = data === null || data === void 0 ? void 0 : data.metricDetailedConfiguration;
6
- this.componentOptions = data === null || data === void 0 ? void 0 : data.componentOptions;
3
+ class RequestBody {
4
+ constructor(metricDetailedConfiguration, componentOptions) {
5
+ this.metricDetailedConfiguration = metricDetailedConfiguration;
6
+ this.componentOptions = componentOptions;
7
7
  }
8
8
  }
9
- exports.default = RequestParams;
9
+ exports.default = RequestBody;
@@ -1,5 +1,6 @@
1
+ import { HeadersInfo } from "../interfaces/message";
1
2
  export default class RequestsInfo {
2
- kcHeaders: Record<string, string | boolean | number>;
3
+ kcHeaders: HeadersInfo[];
3
4
  url: string;
4
- constructor(data: any);
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(data) {
5
- this.kcHeaders = data.headers;
6
- this.url = data.url;
4
+ constructor(headers, url) {
5
+ this.kcHeaders = headers;
6
+ this.url = url;
7
7
  }
8
8
  }
9
9
  exports.default = RequestsInfo;
@@ -1,3 +1,4 @@
1
1
  export default class RequestParams {
2
- constructor(data: any);
2
+ params: Record<string, string | number | boolean> | null | undefined;
3
+ constructor(params: Record<string, string | number | boolean> | null | undefined);
3
4
  }
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  class RequestParams {
4
- constructor(data) { }
4
+ constructor(params) {
5
+ this.params = params;
6
+ }
5
7
  ;
6
8
  }
7
9
  exports.default = RequestParams;
@@ -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
+ 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 | QueryMetricDataOnboarding | PersistData | QueryMetricDataChunked): Promise<void>;
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 | QueryMetricDataOnboarding | PersistData | QueryMetricDataChunked): Promise<import("long").default[]>;
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;