Added ping service

This commit is contained in:
Jyotirmoy Bandyopadhayaya 2023-04-22 12:08:58 +05:30
parent 78464fdd4c
commit 4e01083cd6
Signed by: bravo68web
GPG Key ID: F5671FD7BCB9917A
3 changed files with 95 additions and 0 deletions

View File

@ -0,0 +1,47 @@
import { Request, Response } from 'express'
import { makeResponse } from '../libs'
import PingService from '../services/ping.service'
export default class PingController extends PingService {
public ping = async (req: Request, res: Response) => {
try {
const { host } = req.query as { host: string }
const data = await this.pingHost(host)
res.send(makeResponse(data))
} catch (err: any) {
res.send(makeResponse(err.message, {}, 'Failed', true))
}
}
public pingParallel = async (req: Request, res: Response) => {
try {
const { hosts } = req.query as { hosts: string }
const data = await this.pingHostsParallel(hosts.split(','))
res.send(makeResponse(data))
} catch (err: any) {
res.send(makeResponse(err.message, {}, 'Failed', true))
}
}
public pingAll = async (req: Request, res: Response) => {
try {
const { hosts } = req.query as { hosts: string }
const data = await this.pingHosts(hosts.split(','))
res.send(makeResponse(data))
} catch (err: any) {
res.send(makeResponse(err.message, {}, 'Failed', true))
}
}
public pingSelf = async (req: Request, res: Response) => {
try {
const locIps = ['::1', '::ffff:', '127.0.0.1', 'localhost']
if (locIps.includes(req.ip))
return res.send(makeResponse('localhost', {}, 'Failed', true))
const data = await this.pingHost(req.ip)
res.send(makeResponse(data))
} catch (err: any) {
res.send(makeResponse(err.message, {}, 'Failed', true))
}
}
}

View File

@ -0,0 +1,12 @@
import { Router } from 'express'
import PingController from '../../controllers/ping.controller'
const router = Router()
const pingController = new PingController()
router.get('/', pingController.ping)
router.get('/parallel', pingController.pingParallel)
router.get('/all', pingController.pingAll)
router.get('/self', pingController.pingSelf)
export default router

View File

@ -0,0 +1,36 @@
import ping from 'ping'
export default class PingService {
public async pingHost(host: string) {
try {
const response = await ping.promise.probe(host)
return response
} catch (error) {
return error
}
}
public async pingHosts(hosts: string[]) {
try {
const response = await Promise.all(
hosts.map((host) => ping.promise.probe(host))
)
return response
} catch (error) {
return error
}
}
public async pingHostsParallel(hosts: string[]) {
try {
const response = await Promise.all(
hosts.map((host) =>
ping.promise.probe(host, { parallel: true })
)
)
return response
} catch (error) {
return error
}
}
}