// oms/ecosystem.config.js
module.exports = {
  apps: [
    {
      name: "oms", // PM2 进程名称
      script: "dist/src/app.js", // 编译后的主应用文件
      instances: 1, // 通常为 1，除非您需要多个 Node.js 实例
      exec_mode: "fork",
      autorestart: true, // 崩溃后自动重启
      watch: false, // 生产环境不监听文件变化
      // max_memory_restart: "1G", // 内存使用超过 1GB 时重启
      env_production: {
        // 生产环境特定环境变量
        NODE_ENV: "production",
        PORT: 3000,
        // MongoDB 连接：使用 localhost 访问宿主机上映射的 Docker 容器
        MONGO_URI: "mongodb://oms:oms123.@localhost:27717/omsdb?authSource=admin",
        // Redis 连接：使用 localhost 访问宿主机上映射的 Docker 容器
        REDIS_URI: "redis://localhost:6379",
        // RabbitMQ 连接：使用 localhost 访问宿主机上映射的 Docker 容器
        RABBITMQ_URL: "amqp://coloring:coloring123.@localhost:5672",
        RABBITMQ_EXCHANGE: "event-exchange",
        RABBITMQ_LOG_QUEUE: "log-event-queue",
        RABBITMQ_OMS_QUEUE: "oms-event-queue",
        // ClickHouse 连接：使用 localhost 访问宿主机上映射的 Docker 容器
        CLICKHOUSE_HOST: "http://localhost:8123",
        CLICKHOUSE_DATABASE: "omsdb",
        CLICKHOUSE_USER: "ckuser",
        CLICKHOUSE_PASSWORD: "ckpassword",
      },
      // 如果您需要本地开发调试，可以定义 env_development
      env_development: {
        NODE_ENV: "development",
        PORT: 3000,
        MONGO_URI: "mongodb://oms:oms123.@localhost:27717/omsdb?authSource=admin",
        REDIS_URI: "redis://localhost:6379",
        RABBITMQ_URL: "amqp://coloring:coloring123.@localhost:5672",
        RABBITMQ_EXCHANGE: "event-exchange",
        RABBITMQ_LOG_QUEUE: "log-event-queue",
        RABBITMQ_OMS_QUEUE: "oms-event-queue",
        CLICKHOUSE_HOST: "http://localhost:8123",
        CLICKHOUSE_DATABASE: "omsdb",
        CLICKHOUSE_USER: "ckuser",
        CLICKHOUSE_PASSWORD: "ckpassword",
      },
    },
    {
      name: "event-api-service", // 埋点 API 进程
      script: "dist/services/event-api-service.js", // 指向编译后的埋点服务文件
      instances: "max", // 可以根据 CPU 核心数启动多个实例
      exec_mode: "cluster", // 以集群模式运行，利用多核 CPU
      autorestart: true,
      watch: false,
      max_memory_restart: "500M", // 根据实际情况调整内存限制
      env_production: {
        NODE_ENV: "production",
        EVENT_PORT: 3001, // 埋点 API 进程使用不同的端口
        RABBITMQ_URL: "amqp://coloring:coloring123.@localhost:5672", // 使用 localhost 访问宿主机上映射的 Docker 容器
        RABBITMQ_EXCHANGE: "event-exchange", // 交换机名称
        RABBITMQ_LOG_QUEUE: "log-event-queue", // 日志服务队列
        RABBITMQ_OMS_QUEUE: "oms-event-queue", // 数据清洗整理到mongodb和clickhouse队列
      },
      env_development: {
        NODE_ENV: "development",
        EVENT_PORT: 3001, // 本地开发调试也使用不同端口
        RABBITMQ_URL: "amqp://coloring:coloring123.@localhost:5672",
        RABBITMQ_EXCHANGE: "event-exchange", // 交换机名称
        RABBITMQ_LOG_QUEUE: "log-event-queue", // 日志服务队列
        RABBITMQ_OMS_QUEUE: "oms-event-queue", // 数据清洗整理到mongodb和clickhouse队列
      },
    },
    {
      name: "log-service", // 日志服务进程
      script: "dist/services/log-service.js", // 指向编译后的日志服务文件
      instances: 1, // 通常只需要一个日志写入进程，但也可以是多个并行写入到不同文件或同一文件
      exec_mode: "fork",
      watch: false,
      max_memory_restart: "500M", // 根据日志量调整内存限制
      env_development: {
        NODE_ENV: "development", // 开发环境
        RABBITMQ_URL: "amqp://coloring:coloring123.@localhost:5672", // 使用 localhost 访问宿主机上映射的 Docker 容器
        RABBITMQ_LOG_QUEUE: "log-event-queue", // 日志服务订阅的队列 (已统一名称)
        LOG_DIR: "/home/guoziyun/logs", // <-- 推荐为开发环境提供一个宿主机路径，或者根据实际情况调整
      },
      env_production: {
        NODE_ENV: "production",
        RABBITMQ_URL: "amqp://coloring:coloring123.@localhost:5672", // 使用 localhost 访问宿主机上映射的 Docker 容器
        RABBITMQ_LOG_QUEUE: "log-event-queue", // 日志服务订阅的队列 (已统一名称)
        LOG_DIR: "/home/jccy/logs", // 日志文件存储路径 (宿主机路径)
      },
    },
    {
      name: "ingestor-service", // 数据摄取器进程
      script: "dist/services/ingestor-service.js", // 指向编译后的摄取器服务文件
      instances: 1, // 可以根据处理能力调整实例数量
      exec_mode: "fork",
      watch: false,
      max_memory_restart: "1G", // 根据数据量和处理逻辑调整内存限制
      env_production: {
        NODE_ENV: "production",
        RABBITMQ_URL: "amqp://coloring:coloring123.@localhost:5672", // 使用 localhost 访问宿主机上映射的 Docker 容器
        RABBITMQ_OMS_QUEUE: "oms-event-queue", // 摄取器订阅的队列
        MONGO_URI: "mongodb://oms:oms123.@localhost:27717/omsdb?authSource=admin", // 使用 localhost 访问宿主机上映射的 Docker 容器
        CLICKHOUSE_HOST: "http://localhost:8123", // 使用 localhost 访问宿主机上映射的 Docker 容器
        CLICKHOUSE_DATABASE: "omsdb", // ClickHouse数据库名
        CLICKHOUSE_USER: "ckuser", // ClickHouse用户
        CLICKHOUSE_PASSWORD: "ckpassword", // ClickHouse密码
      },
      // env_development 块可以在需要时添加
    },
    {
      name: "cron-jobs", // 定时任务进程
      script: "dist/services/cron-jobs/index.js", // 指向编译后的摄取器服务文件
      instances: 1, // 可以根据处理能力调整实例数量
      exec_mode: "fork",
      watch: false,
      max_memory_restart: "500M", // 根据数据量和处理逻辑调整内存限制
      env_production: {
        // 建议统一为 env_production
        NODE_ENV: "production",
        MONGO_URI: "mongodb://oms:oms123.@localhost:27717/omsdb?authSource=admin", // 使用 localhost 访问宿主机上映射的 Docker 容器
        REMOTE_SYNC_MONGO_URI: "mongodb://coloring:coloring123.@hk.jccytech.cn:7881?authSource=admin",
        INIT_SEQ: 7368116,
        CLICKHOUSE_HOST: "http://localhost:8123", // 使用 localhost 访问宿主机上映射的 Docker 容器
        CLICKHOUSE_DATABASE: "omsdb", // ClickHouse数据库名
        CLICKHOUSE_USER: "ckuser", // ClickHouse用户
        CLICKHOUSE_PASSWORD: "ckpassword", // ClickHouse密码
      },
      // env_development 块可以在需要时添加
    },
    {
      name: "oms-message-worker", // 监听消息推送活动，生成消息记录
      script: "dist/services/message-worker.js",
      instances: 1,
      exec_mode: "fork",
      exec_mode: "fork",
      autorestart: true,
      watch: false,
      env_production: {
        NODE_ENV: "production",
        RABBITMQ_URL: "amqp://coloring:coloring123.@localhost:5672",
      },
      env_development: {
        NODE_ENV: "development",
        RABBITMQ_URL: "amqp://coloring:coloring123.@localhost:5672",
      },
    },
    {
      name: "coloring-sync", // 同步art
      script: "dist/services/sync/sync-service.js",
      instances: 1,
      exec_mode: "fork",
      autorestart: true,
      watch: false,
    },
    {
      name: "schedule-message-sender", // 专门负责schedule消息发送
      script: "dist/services/message-sender-service.js",
      instances: 1,
      exec_mode: "fork",
      autorestart: true,
      watch: false,
    },
  ],
};
