| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- const API = require('../../../../lib/API.js')
- const { BaseStdResponse } = require('../../../../BaseStdResponse.js')
- const AccessControl = require('../../../../lib/AccessControl.js')
- const QgProxyManager = require('../../../../lib/Lepao/QgProxyManager')
- const { lookupIpv4Region, extractIpFromServer } = require('../../../../lib/Lepao/ipRegionLookup')
- const { parseDetail } = require('../../../../lib/Lepao/lepaoProxyLogDisplay')
- class AdminLepaoProxyStatus extends API {
- constructor() {
- super()
- this.setPath('/Admin/Lepao/Proxy/Status')
- this.setMethod('GET')
- }
- async onRequest(req, res) {
- const { uuid, session } = req.query
- if ([uuid, session].some(v => v === '' || v == null))
- return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
- if (!await AccessControl.checkSession(uuid, session))
- return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED })
- const permission = await AccessControl.getPermission(uuid)
- if (!permission.includes('admin') && !permission.includes('service'))
- return res.json({ ...BaseStdResponse.PERMISSION_DENIED })
- try {
- const snap = await QgProxyManager.getStatusSnapshot()
- const redisEntry = snap.redis_current || null
- const valid = redisEntry ? QgProxyManager.cacheStillValid(redisEntry) : false
- let nodeRegion = null
- let egressRegion = null
- if (redisEntry?.server) {
- const nip = extractIpFromServer(redisEntry.server)
- nodeRegion = nip ? await lookupIpv4Region(nip) : null
- }
- if (redisEntry?.proxyIp) egressRegion = await lookupIpv4Region(redisEntry.proxyIp)
- let lastFetchEnriched = snap.last_fetch_log || null
- if (lastFetchEnriched?.detail) {
- const d = parseDetail(lastFetchEnriched.detail)
- const pip = d.proxy_ip
- lastFetchEnriched = {
- ...lastFetchEnriched,
- proxy_ip_region:
- pip && String(pip).match(/^(\d{1,3}\.){3}\d{1,3}$/) ? await lookupIpv4Region(pip) : null
- }
- }
- return res.json({
- ...BaseStdResponse.OK,
- data: {
- proxy_enabled: snap.proxy_enabled,
- area: snap.area,
- area_ex: snap.area_ex,
- isp: snap.isp,
- distinct_extract: snap.distinct_extract,
- updated_at: snap.updated_at,
- extract_key_configured: snap.extract_key_configured,
- proxy_auth_configured: snap.proxy_auth_configured,
- current_proxy: redisEntry
- ? {
- server: redisEntry.server,
- deadline: redisEntry.deadline,
- proxy_ip: redisEntry.proxyIp,
- request_id: redisEntry.requestId,
- fetched_at: redisEntry.fetchedAt,
- stale: !valid,
- node_region: nodeRegion || '未知',
- proxy_ip_region: egressRegion || '未知'
- }
- : null,
- last_fetch_log: lastFetchEnriched
- }
- })
- } catch (e) {
- this.logger?.error?.(`AdminLepaoProxyStatus: ${e.stack || e}`)
- return res.json({ ...BaseStdResponse.ERR, msg: '读取代理状态失败' })
- }
- }
- }
- module.exports.AdminLepaoProxyStatus = AdminLepaoProxyStatus
|