langpong
Version:
langcode api server version
104 lines (103 loc) • 3.54 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const commander_1 = require("commander");
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const Langpong_1 = require("../core/Langpong");
const ManagerStore_1 = require("../core/ManagerStore");
const program = new commander_1.Command();
program
.name("Langpong")
.description("CLI to launch the Langcode Api Server")
.version("1.0.7");
// Burada kısa isimleri ekliyoruz:
// -c => --config
// -p => --port
// -h => --host
program
.option("-c, --config <path>", "Path to config JSON/YAML file")
.option("-p, --port <number>", "Port number", process.env.PORT)
.option("-H, --host <string>", "Host/IP address", process.env.HOST)
.option("--maxConcurrentRunsPerManager <number>", "Manager concurrency limit")
.option("--maxConcurrentRunsGlobal <number>", "Global concurrency limit")
.option("--logLevel <level>", "Log level (info, debug, error)", process.env.LOG_LEVEL);
program.parse(process.argv);
const cliOpts = program.opts();
// Örnek varsayılan config
const defaultConfig = {
manager: {
maxConcurrentRunsPerManager: 3,
maxConcurrentRunsGlobal: 10,
maxIdleTimeMs: 600000,
maxLifeTimeMs: 3600000,
cleanupIntervalMs: 60000,
logsDir: "./logs",
logLevel: "info",
},
server: {
port: 4321,
host: "0.0.0.0",
},
pluginsDefault: [],
};
// Basit derin merge fonksiyonu
function deepMerge(target, source) {
for (const key of Object.keys(source)) {
if (source[key] &&
typeof source[key] === "object" &&
!Array.isArray(source[key])) {
if (!target[key])
target[key] = {};
deepMerge(target[key], source[key]);
}
else {
target[key] = source[key];
}
}
return target;
}
// 1) Başlangıç: default config
let mergedConfig = deepMerge({}, defaultConfig);
// 2) Dosyadan yükleme
if (cliOpts.config) {
try {
const raw = fs_1.default.readFileSync(path_1.default.resolve(cliOpts.config), "utf-8");
const fileConfig = JSON.parse(raw);
mergedConfig = deepMerge(mergedConfig, fileConfig);
}
catch (err) {
console.error("Failed to load config file:", err);
process.exit(1);
}
}
// 3) CLI parametrelerini override
if (cliOpts.port)
mergedConfig.server.port = parseInt(cliOpts.port, 10);
if (cliOpts.host)
mergedConfig.server.host = cliOpts.host;
if (cliOpts.maxConcurrentRunsPerManager) {
mergedConfig.manager.maxConcurrentRunsPerManager = parseInt(cliOpts.maxConcurrentRunsPerManager, 10);
}
if (cliOpts.maxConcurrentRunsGlobal) {
mergedConfig.manager.maxConcurrentRunsGlobal = parseInt(cliOpts.maxConcurrentRunsGlobal, 10);
}
if (cliOpts.logLevel) {
mergedConfig.manager.logLevel = cliOpts.logLevel;
}
// Nihai parametrelerle ManagerStore & Server
const finalManagerOpts = mergedConfig.manager;
const finalServerOpts = mergedConfig.server;
const store = ManagerStore_1.ManagerStore.getInstance(finalManagerOpts);
const server = new Langpong_1.Langpong({
port: finalServerOpts.port,
host: finalServerOpts.host,
managerStore: store,
});
server.start().catch((err) => {
console.error("Failed to start server:", err);
process.exit(1);
});