1
0
Fork 0
mirror of https://github.com/muerwre/vk-tg-bot.git synced 2025-04-25 15:06:41 +07:00

#5 added healthcheck

This commit is contained in:
Fedor Katurov 2021-05-12 14:24:56 +07:00
parent 46d24cd9dd
commit dd3c281af9
6 changed files with 37 additions and 4 deletions

View file

@ -27,6 +27,10 @@ services:
entrypoint: ./wait-for-it.sh -t 90 db:5432 -- node ./index.js entrypoint: ./wait-for-it.sh -t 90 db:5432 -- node ./index.js
depends_on: depends_on:
- db - db
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost", "||", "kill", "-s", "2", "1" ]
interval: 5m
timeout: 1m
volumes: volumes:
bot-db: bot-db:
node_modules: node_modules:

View file

@ -53,11 +53,12 @@ export class HttpApi {
const url = new URL(this.webhook.url); const url = new URL(this.webhook.url);
logger.info(`using webhook at ${url.pathname}`); logger.info(`using webhook at ${url.pathname}`);
this.app.post(url.pathname, this.handleWebhook); this.app.post(url.pathname, this.handleWebhook);
this.app.get(url.pathname, this.testWebhook); this.app.get(url.pathname, this.healthcheck);
} }
// VK event handler // VK event handler
this.app.post(this.vk.endpoint, this.vk.handle); this.app.post(this.vk.endpoint, this.vk.handle);
this.app.get("/", this.healthcheck);
} }
/** /**
@ -71,7 +72,12 @@ export class HttpApi {
/** /**
* Just returns 200 * Just returns 200
*/ */
private testWebhook = async (req: Request, res: Response) => { private healthcheck = async (req: Request, res: Response) => {
try {
await Promise.all([this.telegram.healthcheck(), this.vk.healthcheck()]);
res.sendStatus(200); res.sendStatus(200);
} catch (e) {
res.sendStatus(501);
}
}; };
} }

View file

@ -43,4 +43,5 @@ export interface Storage {
vkPostId: number vkPostId: number
): Promise<Post | undefined>; ): Promise<Post | undefined>;
findPostByEvent(eventId: number): Promise<Post | undefined>; findPostByEvent(eventId: number): Promise<Post | undefined>;
healthcheck(): Promise<void>;
} }

View file

@ -127,4 +127,8 @@ export class PostgresDB implements Storage {
createPost = async (eventId: number, text: string, vkPostId: number) => { createPost = async (eventId: number, text: string, vkPostId: number) => {
return this.posts.save({ eventId, text, vkPostId }); return this.posts.save({ eventId, text, vkPostId });
}; };
healthcheck = async () => {
await this.connection.query("SELECT 1");
};
} }

View file

@ -96,11 +96,22 @@ export class TelegramService {
}); });
}; };
stop = (signal: string) => { /**
* Stops service
* @param signal
*/
public stop = (signal: string) => {
if (!this.isWebhookEnabled) { if (!this.isWebhookEnabled) {
return; return;
} }
this.bot.stop(signal); this.bot.stop(signal);
}; };
/**
* Performs healthcheck for telegram
*/
public healthcheck = async () => {
await this.bot.telegram.getMe();
};
} }

View file

@ -133,4 +133,11 @@ export class VkService {
) )
); );
} }
/**
* Performs healthcheck for telegram
*/
public healthcheck = async () => {
await this.db.healthcheck();
};
} }