fix
This commit is contained in:
parent
bd8a5bfe9e
commit
eb66086b2a
5 changed files with 59 additions and 37 deletions
|
|
@ -3,28 +3,28 @@
|
||||||
*/
|
*/
|
||||||
import { Hono } from 'hono';
|
import { Hono } from 'hono';
|
||||||
import { cors } from 'hono/cors';
|
import { cors } from 'hono/cors';
|
||||||
import { initializeConfig, getServiceConfig, getLoggingConfig, getDatabaseConfig } from '@stock-bot/config-new';
|
import { initializeServiceConfig } from '@stock-bot/config-new';
|
||||||
import { getLogger, shutdownLoggers, setLoggerConfig } from '@stock-bot/logger';
|
import { getLogger, setLoggerConfig, shutdownLoggers } from '@stock-bot/logger';
|
||||||
import { createAndConnectMongoDBClient, MongoDBClient } from '@stock-bot/mongodb-client';
|
import { createAndConnectMongoDBClient, MongoDBClient } from '@stock-bot/mongodb-client';
|
||||||
import { createAndConnectPostgreSQLClient, PostgreSQLClient } from '@stock-bot/postgres-client';
|
import { createAndConnectPostgreSQLClient, PostgreSQLClient } from '@stock-bot/postgres-client';
|
||||||
import { Shutdown } from '@stock-bot/shutdown';
|
import { Shutdown } from '@stock-bot/shutdown';
|
||||||
import { enhancedSyncManager } from './services/enhanced-sync-manager';
|
import { enhancedSyncManager } from './services/enhanced-sync-manager';
|
||||||
import { syncManager } from './services/sync-manager';
|
import { syncManager } from './services/sync-manager';
|
||||||
import { setPostgreSQLClient, setMongoDBClient } from './clients';
|
import { setMongoDBClient, setPostgreSQLClient } from './clients';
|
||||||
|
|
||||||
// Initialize configuration
|
// Initialize configuration with automatic monorepo config inheritance
|
||||||
await initializeConfig('./config');
|
const config = await initializeServiceConfig();
|
||||||
const serviceConfig = getServiceConfig();
|
const serviceConfig = config.service;
|
||||||
const databaseConfig = getDatabaseConfig();
|
const databaseConfig = config.database;
|
||||||
|
|
||||||
// Initialize logger with config
|
// Initialize logger with config
|
||||||
const loggingConfig = getLoggingConfig();
|
const loggingConfig = config.logging;
|
||||||
if (loggingConfig) {
|
if (loggingConfig) {
|
||||||
setLoggerConfig({
|
setLoggerConfig({
|
||||||
logLevel: loggingConfig.level,
|
logLevel: loggingConfig.level,
|
||||||
logConsole: true,
|
logConsole: true,
|
||||||
logFile: false,
|
logFile: false,
|
||||||
environment: serviceConfig.environment,
|
environment: config.environment,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -245,7 +245,7 @@ async function startServer() {
|
||||||
server = Bun.serve({
|
server = Bun.serve({
|
||||||
port: PORT,
|
port: PORT,
|
||||||
fetch: app.fetch,
|
fetch: app.fetch,
|
||||||
development: serviceConfig.environment === 'development',
|
development: config.environment === 'development',
|
||||||
});
|
});
|
||||||
|
|
||||||
logger.info(`Data Sync Service started on port ${PORT}`);
|
logger.info(`Data Sync Service started on port ${PORT}`);
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
*/
|
*/
|
||||||
import { Hono } from 'hono';
|
import { Hono } from 'hono';
|
||||||
import { cors } from 'hono/cors';
|
import { cors } from 'hono/cors';
|
||||||
import { initializeConfig, getServiceConfig, getLoggingConfig, getDatabaseConfig } from '@stock-bot/config-new';
|
import { initializeServiceConfig } from '@stock-bot/config-new';
|
||||||
import { getLogger, shutdownLoggers, setLoggerConfig } from '@stock-bot/logger';
|
import { getLogger, shutdownLoggers, setLoggerConfig } from '@stock-bot/logger';
|
||||||
import { createAndConnectMongoDBClient, MongoDBClient } from '@stock-bot/mongodb-client';
|
import { createAndConnectMongoDBClient, MongoDBClient } from '@stock-bot/mongodb-client';
|
||||||
import { createAndConnectPostgreSQLClient, PostgreSQLClient } from '@stock-bot/postgres-client';
|
import { createAndConnectPostgreSQLClient, PostgreSQLClient } from '@stock-bot/postgres-client';
|
||||||
|
|
@ -13,13 +13,13 @@ import { setPostgreSQLClient, setMongoDBClient } from './clients';
|
||||||
import { exchangeRoutes } from './routes/exchange.routes';
|
import { exchangeRoutes } from './routes/exchange.routes';
|
||||||
import { healthRoutes } from './routes/health.routes';
|
import { healthRoutes } from './routes/health.routes';
|
||||||
|
|
||||||
// Initialize configuration
|
// Initialize configuration with automatic monorepo config inheritance
|
||||||
await initializeConfig();
|
const config = await initializeServiceConfig();
|
||||||
const serviceConfig = getServiceConfig();
|
const serviceConfig = config.service;
|
||||||
const databaseConfig = getDatabaseConfig();
|
const databaseConfig = config.database;
|
||||||
|
|
||||||
// Initialize logger with config
|
// Initialize logger with config
|
||||||
const loggingConfig = getLoggingConfig();
|
const loggingConfig = config.logging;
|
||||||
if (loggingConfig) {
|
if (loggingConfig) {
|
||||||
setLoggerConfig({
|
setLoggerConfig({
|
||||||
logLevel: loggingConfig.level,
|
logLevel: loggingConfig.level,
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,19 @@
|
||||||
{
|
{
|
||||||
"app": {
|
"name": "stock-bot",
|
||||||
"name": "stock-bot",
|
"version": "1.0.0",
|
||||||
"version": "1.0.0"
|
"environment": "development",
|
||||||
},
|
|
||||||
"service": {
|
"service": {
|
||||||
"name": "default-service",
|
"name": "default-service",
|
||||||
"port": 3000,
|
"port": 3000,
|
||||||
"environment": "development"
|
"host": "0.0.0.0",
|
||||||
|
"healthCheckPath": "/health",
|
||||||
|
"metricsPath": "/metrics",
|
||||||
|
"shutdownTimeout": 30000,
|
||||||
|
"cors": {
|
||||||
|
"enabled": true,
|
||||||
|
"origin": "*",
|
||||||
|
"credentials": true
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"database": {
|
"database": {
|
||||||
"postgres": {
|
"postgres": {
|
||||||
|
|
@ -57,22 +64,14 @@
|
||||||
},
|
},
|
||||||
"providers": {
|
"providers": {
|
||||||
"yahoo": {
|
"yahoo": {
|
||||||
|
"name": "yahoo",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"rateLimit": 5,
|
"rateLimit": {
|
||||||
"timeout": 30000
|
"maxRequests": 5,
|
||||||
},
|
"windowMs": 60000
|
||||||
"quoteMedia": {
|
},
|
||||||
"enabled": false,
|
"timeout": 30000,
|
||||||
"apiKey": "",
|
"baseUrl": "https://query1.finance.yahoo.com"
|
||||||
"baseUrl": "https://app.quotemedia.com/data",
|
|
||||||
"rateLimit": 10,
|
|
||||||
"timeout": 30000
|
|
||||||
},
|
|
||||||
"interactiveBrokers": {
|
|
||||||
"enabled": false,
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 7497,
|
|
||||||
"clientId": 1
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"features": {
|
"features": {
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ export class ConfigManager<T = Record<string, unknown>> {
|
||||||
const configPath = options.configPath || join(process.cwd(), 'config');
|
const configPath = options.configPath || join(process.cwd(), 'config');
|
||||||
this.loaders = [
|
this.loaders = [
|
||||||
new FileLoader(configPath, this.environment),
|
new FileLoader(configPath, this.environment),
|
||||||
new EnvLoader('STOCKBOT_'), // Prefix for env vars
|
new EnvLoader(''), // No prefix for env vars to match our .env file
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,8 @@ export * from './utils/validation';
|
||||||
// Import necessary types for singleton
|
// Import necessary types for singleton
|
||||||
import { ConfigManager } from './config-manager';
|
import { ConfigManager } from './config-manager';
|
||||||
import { AppConfig, appConfigSchema } from './schemas';
|
import { AppConfig, appConfigSchema } from './schemas';
|
||||||
|
import { FileLoader } from './loaders/file.loader';
|
||||||
|
import { EnvLoader } from './loaders/env.loader';
|
||||||
|
|
||||||
// Create singleton instance
|
// Create singleton instance
|
||||||
let configInstance: ConfigManager<AppConfig> | null = null;
|
let configInstance: ConfigManager<AppConfig> | null = null;
|
||||||
|
|
@ -39,6 +41,27 @@ export async function initializeConfig(
|
||||||
return configInstance.initialize(appConfigSchema);
|
return configInstance.initialize(appConfigSchema);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize configuration for a service in a monorepo
|
||||||
|
* Automatically loads configs from:
|
||||||
|
* 1. Root config directory (../../config)
|
||||||
|
* 2. Service-specific config directory (./config)
|
||||||
|
* 3. Environment variables
|
||||||
|
*/
|
||||||
|
export async function initializeServiceConfig(): Promise<AppConfig> {
|
||||||
|
if (!configInstance) {
|
||||||
|
const environment = process.env.NODE_ENV || 'development';
|
||||||
|
configInstance = new ConfigManager<AppConfig>({
|
||||||
|
loaders: [
|
||||||
|
new FileLoader('../../config', environment), // Root config
|
||||||
|
new FileLoader('./config', environment), // Service config
|
||||||
|
new EnvLoader(''), // Environment variables
|
||||||
|
]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return configInstance.initialize(appConfigSchema);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the current configuration
|
* Get the current configuration
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue