fixed proxy handler
This commit is contained in:
parent
4d7c7df909
commit
cdc2f44e86
3 changed files with 79 additions and 91 deletions
|
|
@ -9,6 +9,7 @@ import { getLogger } from '@stock-bot/logger';
|
||||||
// Import handlers for bundling (ensures they're included in the build)
|
// Import handlers for bundling (ensures they're included in the build)
|
||||||
import './ceo/ceo.handler';
|
import './ceo/ceo.handler';
|
||||||
import './ib/ib.handler';
|
import './ib/ib.handler';
|
||||||
|
import './proxy/proxy.handler';
|
||||||
import './qm/qm.handler';
|
import './qm/qm.handler';
|
||||||
import './webshare/webshare.handler';
|
import './webshare/webshare.handler';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,6 @@ import { fetch } from '@stock-bot/utils';
|
||||||
|
|
||||||
import { PROXY_CONFIG } from '../shared/config';
|
import { PROXY_CONFIG } from '../shared/config';
|
||||||
import type { ProxySource } from '../shared/types';
|
import type { ProxySource } from '../shared/types';
|
||||||
httpClient = new HttpClient({ timeout: 10000 }, ctx.logger);
|
|
||||||
}
|
|
||||||
return httpClient;
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function fetchProxiesFromSources(): Promise<ProxyInfo[]> {
|
export async function fetchProxiesFromSources(): Promise<ProxyInfo[]> {
|
||||||
const ctx = {
|
const ctx = {
|
||||||
|
|
|
||||||
|
|
@ -1,43 +1,49 @@
|
||||||
/**
|
|
||||||
* Proxy Provider for new queue system
|
|
||||||
*/
|
|
||||||
import type { ServiceContainer } from '@stock-bot/di';
|
|
||||||
import { getLogger } from '@stock-bot/logger';
|
|
||||||
import type { ProxyInfo } from '@stock-bot/proxy';
|
|
||||||
import {
|
import {
|
||||||
createJobHandler,
|
BaseHandler,
|
||||||
handlerRegistry,
|
Handler,
|
||||||
type HandlerConfigWithSchedule,
|
Operation,
|
||||||
} from '@stock-bot/queue';
|
ScheduledOperation,
|
||||||
|
type IServiceContainer,
|
||||||
|
} from '@stock-bot/handlers';
|
||||||
|
import type { ProxyInfo } from '@stock-bot/proxy';
|
||||||
|
import { processItems } from '@stock-bot/queue';
|
||||||
|
import { fetchProxiesFromSources } from './operations/fetch.operations';
|
||||||
|
import { checkProxy } from './operations/check.operations';
|
||||||
|
|
||||||
const handlerLogger = getLogger('proxy-handler');
|
@Handler('proxy')
|
||||||
|
export class ProxyHandler extends BaseHandler {
|
||||||
// Initialize and register the Proxy provider
|
constructor(services: IServiceContainer) {
|
||||||
export function initializeProxyProvider(_container: ServiceContainer) {
|
super(services);
|
||||||
handlerLogger.debug('Registering proxy provider with scheduled jobs...');
|
|
||||||
|
|
||||||
const proxyProviderConfig: HandlerConfigWithSchedule = {
|
|
||||||
name: 'proxy',
|
|
||||||
|
|
||||||
operations: {
|
|
||||||
'fetch-from-sources': createJobHandler(async () => {
|
|
||||||
// Fetch proxies from all configured sources
|
|
||||||
handlerLogger.info('Processing fetch proxies from sources request');
|
|
||||||
const { fetchProxiesFromSources } = await import('./operations/fetch.operations');
|
|
||||||
const { processItems } = await import('@stock-bot/queue');
|
|
||||||
|
|
||||||
// Fetch all proxies from sources
|
|
||||||
const proxies = await fetchProxiesFromSources();
|
|
||||||
handlerLogger.info('Fetched proxies from sources', { count: proxies.length });
|
|
||||||
|
|
||||||
if (proxies.length === 0) {
|
|
||||||
handlerLogger.warn('No proxies fetched from sources');
|
|
||||||
return { processed: 0, successful: 0 };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get QueueManager instance - we have to use getInstance for now until handlers get container access
|
@Operation('fetch-from-sources')
|
||||||
const { QueueManager } = await import('@stock-bot/queue');
|
@ScheduledOperation('proxy-fetch-and-check', '0 0 * * 0', {
|
||||||
const queueManager = QueueManager.getInstance();
|
priority: 0,
|
||||||
|
description: 'Fetch and validate proxy list from sources',
|
||||||
|
// immediately: true, // Don't run immediately during startup to avoid conflicts
|
||||||
|
})
|
||||||
|
async fetchFromSources(): Promise<{
|
||||||
|
processed: number;
|
||||||
|
jobsCreated: number;
|
||||||
|
batchesCreated?: number;
|
||||||
|
mode: string;
|
||||||
|
}> {
|
||||||
|
// Fetch proxies from all configured sources
|
||||||
|
this.logger.info('Processing fetch proxies from sources request');
|
||||||
|
|
||||||
|
const proxies = await fetchProxiesFromSources();
|
||||||
|
this.logger.info('Fetched proxies from sources', { count: proxies.length });
|
||||||
|
|
||||||
|
if (proxies.length === 0) {
|
||||||
|
this.logger.warn('No proxies fetched from sources');
|
||||||
|
return { processed: 0, jobsCreated: 0, mode: 'direct' };
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get QueueManager from service container
|
||||||
|
const queueManager = this.queue;
|
||||||
|
if (!queueManager) {
|
||||||
|
throw new Error('Queue manager not available');
|
||||||
|
}
|
||||||
|
|
||||||
// Batch process the proxies through check-proxy operation
|
// Batch process the proxies through check-proxy operation
|
||||||
const batchResult = await processItems(proxies, 'proxy', {
|
const batchResult = await processItems(proxies, 'proxy', {
|
||||||
|
|
@ -53,7 +59,7 @@ export function initializeProxyProvider(_container: ServiceContainer) {
|
||||||
removeOnFail: 3,
|
removeOnFail: 3,
|
||||||
}, queueManager);
|
}, queueManager);
|
||||||
|
|
||||||
handlerLogger.info('Batch proxy validation completed', {
|
this.logger.info('Batch proxy validation completed', {
|
||||||
totalProxies: proxies.length,
|
totalProxies: proxies.length,
|
||||||
jobsCreated: batchResult.jobsCreated,
|
jobsCreated: batchResult.jobsCreated,
|
||||||
mode: batchResult.mode,
|
mode: batchResult.mode,
|
||||||
|
|
@ -67,29 +73,14 @@ export function initializeProxyProvider(_container: ServiceContainer) {
|
||||||
batchesCreated: batchResult.batchesCreated,
|
batchesCreated: batchResult.batchesCreated,
|
||||||
mode: batchResult.mode,
|
mode: batchResult.mode,
|
||||||
};
|
};
|
||||||
}),
|
}
|
||||||
|
|
||||||
'check-proxy': createJobHandler(async (payload: ProxyInfo) => {
|
@Operation('check-proxy')
|
||||||
|
async checkProxyOperation(payload: ProxyInfo): Promise<unknown> {
|
||||||
// payload is now the raw proxy info object
|
// payload is now the raw proxy info object
|
||||||
handlerLogger.debug('Processing proxy check request', {
|
this.logger.debug('Processing proxy check request', {
|
||||||
proxy: `${payload.host}:${payload.port}`,
|
proxy: `${payload.host}:${payload.port}`,
|
||||||
});
|
});
|
||||||
const { checkProxy } = await import('./operations/check.operations');
|
|
||||||
return checkProxy(payload);
|
return checkProxy(payload);
|
||||||
}),
|
}
|
||||||
},
|
|
||||||
scheduledJobs: [
|
|
||||||
{
|
|
||||||
type: 'proxy-fetch-and-check',
|
|
||||||
operation: 'fetch-from-sources',
|
|
||||||
cronPattern: '0 0 * * 0', // Every week at midnight on Sunday
|
|
||||||
priority: 0,
|
|
||||||
description: 'Fetch and validate proxy list from sources',
|
|
||||||
// immediately: true, // Don't run immediately during startup to avoid conflicts
|
|
||||||
},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
handlerRegistry.registerWithSchedule(proxyProviderConfig);
|
|
||||||
handlerLogger.debug('Proxy provider registered successfully with scheduled jobs');
|
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue