added initial py analytics / rust core / ts orchestrator services
This commit is contained in:
parent
680b5fd2ae
commit
c862ed496b
62 changed files with 13459 additions and 0 deletions
83
apps/stock/orchestrator/src/index.ts
Normal file
83
apps/stock/orchestrator/src/index.ts
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
import { Hono } from 'hono';
|
||||
import { cors } from 'hono/cors';
|
||||
import { Server as SocketIOServer } from 'socket.io';
|
||||
import { createServer } from 'http';
|
||||
import { logger } from '@stock-bot/logger';
|
||||
import { ModeManager } from './core/ModeManager';
|
||||
import { createOrderRoutes } from './api/rest/orders';
|
||||
import { createPositionRoutes } from './api/rest/positions';
|
||||
import { createAnalyticsRoutes } from './api/rest/analytics';
|
||||
import { createBacktestRoutes } from './api/rest/backtest';
|
||||
import { setupWebSocketHandlers } from './api/websocket';
|
||||
import { container } from './container';
|
||||
|
||||
const PORT = process.env.PORT || 3002;
|
||||
|
||||
async function main() {
|
||||
// Initialize Hono app
|
||||
const app = new Hono();
|
||||
|
||||
// Middleware
|
||||
app.use('*', cors());
|
||||
app.use('*', async (c, next) => {
|
||||
const start = Date.now();
|
||||
await next();
|
||||
const ms = Date.now() - start;
|
||||
logger.debug(`${c.req.method} ${c.req.url} - ${ms}ms`);
|
||||
});
|
||||
|
||||
// Health check
|
||||
app.get('/health', (c) => {
|
||||
const modeManager = container.get('ModeManager');
|
||||
return c.json({
|
||||
status: 'healthy',
|
||||
mode: modeManager.getCurrentMode(),
|
||||
timestamp: new Date().toISOString()
|
||||
});
|
||||
});
|
||||
|
||||
// Mount routes
|
||||
app.route('/api/orders', createOrderRoutes());
|
||||
app.route('/api/positions', createPositionRoutes());
|
||||
app.route('/api/analytics', createAnalyticsRoutes());
|
||||
app.route('/api/backtest', createBacktestRoutes());
|
||||
|
||||
// Create HTTP server and Socket.IO
|
||||
const server = createServer(app.fetch);
|
||||
const io = new SocketIOServer(server, {
|
||||
cors: {
|
||||
origin: '*',
|
||||
methods: ['GET', 'POST']
|
||||
}
|
||||
});
|
||||
|
||||
// Setup WebSocket handlers
|
||||
setupWebSocketHandlers(io, container);
|
||||
|
||||
// Initialize mode manager
|
||||
const modeManager = container.get('ModeManager') as ModeManager;
|
||||
|
||||
// Default to paper trading mode
|
||||
await modeManager.initializeMode({
|
||||
mode: 'paper',
|
||||
startingCapital: 100000
|
||||
});
|
||||
|
||||
// Start server
|
||||
server.listen(PORT, () => {
|
||||
logger.info(`Trading orchestrator running on port ${PORT}`);
|
||||
});
|
||||
|
||||
// Graceful shutdown
|
||||
process.on('SIGINT', async () => {
|
||||
logger.info('Shutting down trading orchestrator...');
|
||||
await modeManager.shutdown();
|
||||
server.close();
|
||||
process.exit(0);
|
||||
});
|
||||
}
|
||||
|
||||
main().catch((error) => {
|
||||
logger.error('Failed to start trading orchestrator:', error);
|
||||
process.exit(1);
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue