Endpoint get-issues-queue-size created

This commit is contained in:
Pavel Gnedov 2022-05-01 20:46:05 +07:00
parent 7a9b450732
commit 607743b071
5 changed files with 53 additions and 10 deletions

View file

@ -63,23 +63,27 @@ export class RedmineEventsGateway {
} }
addIssues(issues: number[]): void { addIssues(issues: number[]): void {
issues.forEach(issue => { issues.forEach((issue) => {
if (!this.issuesChangesQueue.isItemExists(issue)) { if (!this.issuesChangesQueue.isItemExists(issue)) {
this.issuesChangesQueue.add([issue]); this.issuesChangesQueue.add([issue]);
} }
}); });
} }
getQueueSize(): number {
return this.issuesChangesQueue.getQueueSize();
}
private sendWebHookFullDataEvents(data: RedmineIssueData[]): void { private sendWebHookFullDataEvents(data: RedmineIssueData[]): void {
const webhooks = this.config.get<WebhookConfigItemModel[]>("webhooks"); const webhooks = this.config.get<WebhookConfigItemModel[]>('webhooks');
webhooks.forEach(webhook => { webhooks.forEach((webhook) => {
let config = undefined; let config = undefined;
if (webhook.apiKeyName && webhook.apiKeyValue) { if (webhook.apiKeyName && webhook.apiKeyValue) {
config = {headers: {}}; config = { headers: {} };
config.headers[webhook.apiKeyName] = webhook.apiKeyValue; config.headers[webhook.apiKeyName] = webhook.apiKeyValue;
} }
axios.post(webhook.url, data, config).catch((err) => { axios.post(webhook.url, data, config).catch((err) => {
console.error('Error at webhook send request:', err) console.error('Error at webhook send request:', err);
}); });
}); });
} }

View file

@ -16,4 +16,9 @@ export class MainController {
async appendIssues(@Body() issues: number[]): Promise<void> { async appendIssues(@Body() issues: number[]): Promise<void> {
this.redmineEventsGateway.addIssues(issues); this.redmineEventsGateway.addIssues(issues);
} }
@Get('get-issues-queue-size')
getIssuesQueueSize(): number {
return this.redmineEventsGateway.getQueueSize();
}
} }

View file

@ -1,7 +1,6 @@
import { Subject } from "rxjs"; import { Subject } from 'rxjs';
export class Queue<T, NT> { export class Queue<T, NT> {
private items: T[] = []; private items: T[] = [];
queue: Subject<NT[]> = new Subject<NT[]>(); queue: Subject<NT[]> = new Subject<NT[]>();
@ -9,7 +8,7 @@ export class Queue<T, NT> {
constructor( constructor(
private updateInterval: number, private updateInterval: number,
private itemsLimit: number, private itemsLimit: number,
private transformationFn: ((arg: Array<T>) => Promise<Array<NT>>) private transformationFn: (arg: Array<T>) => Promise<Array<NT>>,
) {} ) {}
add(values: T[]): void { add(values: T[]): void {
@ -29,6 +28,10 @@ export class Queue<T, NT> {
this.updateTimeout = null; this.updateTimeout = null;
} }
getQueueSize(): number {
return this.items.length;
}
private updateTimeout; private updateTimeout;
private async update(): Promise<void> { private async update(): Promise<void> {
@ -41,5 +44,4 @@ export class Queue<T, NT> {
this.update(); this.update();
}, this.updateInterval); }, this.updateInterval);
} }
}
}

View file

@ -30,6 +30,7 @@
"imap-simple": "^5.1.0", "imap-simple": "^5.1.0",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"rss-parser": "^3.12.0",
"rxjs": "^7.2.0", "rxjs": "^7.2.0",
"socket.io": "^4.4.1" "socket.io": "^4.4.1"
}, },

View file

@ -2081,6 +2081,11 @@ enhanced-resolve@^5.0.0, enhanced-resolve@^5.7.0, enhanced-resolve@^5.9.2:
graceful-fs "^4.2.4" graceful-fs "^4.2.4"
tapable "^2.2.0" tapable "^2.2.0"
entities@^2.0.3:
version "2.2.0"
resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
error-ex@^1.3.1: error-ex@^1.3.1:
version "1.3.2" version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
@ -4252,6 +4257,14 @@ rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2:
dependencies: dependencies:
glob "^7.1.3" glob "^7.1.3"
rss-parser@^3.12.0:
version "3.12.0"
resolved "https://registry.yarnpkg.com/rss-parser/-/rss-parser-3.12.0.tgz#b8888699ea46304a74363fbd8144671b2997984c"
integrity sha512-aqD3E8iavcCdkhVxNDIdg1nkBI17jgqF+9OqPS1orwNaOgySdpvq6B+DoONLhzjzwV8mWg37sb60e4bmLK117A==
dependencies:
entities "^2.0.3"
xml2js "^0.4.19"
run-async@^2.4.0: run-async@^2.4.0:
version "2.4.1" version "2.4.1"
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
@ -4293,6 +4306,11 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sax@>=0.6.0:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
saxes@^5.0.1: saxes@^5.0.1:
version "5.0.1" version "5.0.1"
resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
@ -5147,6 +5165,19 @@ xml-name-validator@^3.0.0:
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
xml2js@^0.4.19:
version "0.4.23"
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"
integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==
dependencies:
sax ">=0.6.0"
xmlbuilder "~11.0.0"
xmlbuilder@~11.0.0:
version "11.0.1"
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
xmlchars@^2.2.0: xmlchars@^2.2.0:
version "2.2.0" version "2.2.0"
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"