NETX_DATABASE_URL=postgresql+psycopg://netx:netx@127.0.0.1:5432/netx # Fernet key for managed NE passwords (python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())") NETX_CREDENTIAL_SECRET_KEY= NETX_NE_CONNECT_MAX_WORKERS=5 NETX_NE_CONNECT_TIMEOUT_SEC=30 # Managed NE CLI: max commands per exec request (default 5, hard cap 50). Lab can set 10+. NETX_NE_EXEC_MAX_COMMANDS=5 NETX_HOST=127.0.0.1 NETX_PORT=8890 NETX_VENDOR=ZTE NETX_SOURCE_TYPE=gateway_export_excel NETX_PARSER_CONFIG=netx_api/config/parsers/zte_alarm_monitor_v1.yaml NETX_OCLAW_ANALYZE_URL=http://127.0.0.1:8787/admin/api/ops-ai/analyze-sync NETX_OCLAW_ANALYZE_TOKEN= NETX_OCLAW_HEALTH_URL=http://127.0.0.1:8787/admin/api/ops-ai/health NETX_OCLAW_ALARM_WS_ENABLED=false NETX_OCLAW_ALARM_WS_URL=ws://127.0.0.1:8787/ws/netx-bridge # 告警 WSS 鉴权与 NETX_OCLAW_ANALYZE_TOKEN 共用(OClaw 侧 OCLAW_OPS_AI_SHARED_TOKEN) NETX_UME_BASE_URL=https://10.227.157.143:18014 NETX_UME_USERNAME= NETX_UME_PASSWORD= NETX_UME_AUTH_HEADER=accessToken NETX_UME_CONTENT_TYPE=application/yang-data+json;charset=UTF-8 NETX_UME_TOKEN_TTL_S=1800 NETX_UME_TOKEN_REFRESH_SKEW_S=60 NETX_UME_TOKEN_PATH=/restconf/operations/zte-security:oauth_token NETX_UME_TOKEN_HANDSHAKE_PATH=/restconf/operations/zte-security:oauth_handshake NETX_UME_TOKEN_LOGOUT_PATH=/restconf/operations/zte-security:oauth_token NETX_UME_NE_PATH=/restconf/data/zte-resources-module:network-elements NETX_UME_ALARMS_PATH=/restconf/data/zte-alarms:alarms/alarm-list NETX_UME_SYNC_ALARMS_CURRENT_ENABLED=true NETX_UME_SYNC_ALARMS_CURRENT_INTERVAL_S=18000 NETX_UME_SYNC_ALARMS_CURRENT_SKIP_WHEN_WS=true NETX_UME_STARTUP_SYNC_ALARMS_BEFORE_WS=true NETX_UME_ALARM_CLEARED_TOMBSTONE_S=300 NETX_UME_ALARM_WS_ENABLED=true NETX_UME_NOTIFICATION_ESTABLISH_PATH=/restconf/operations/zte-notifications:establish-subscription NETX_UME_NOTIFICATION_DELETE_PATH=/restconf/operations/zte-notifications:delete-subscription NETX_UME_NOTIFICATION_TOPIC=ALARM # TLS verify for UME (default true). Set false only for lab self-signed certs. # NETX_UME_VERIFY_TLS=true # Auth (lab defaults: admin/admin123 + data/auth/mcp_token) # NETX_AUTH_ENABLED=true # Leave NETX_AUTH_SECRET empty to auto-create data/auth/jwt_secret on first boot. # NETX_AUTH_SECRET= # NETX_AUTH_SECRET_FILE=data/auth/jwt_secret # NETX_BOOTSTRAP_ADMIN_USERNAME=admin # NETX_BOOTSTRAP_ADMIN_PASSWORD=admin123 # NETX_API_TOKEN= # MCP: leave empty to auto-read data/auth/mcp_token # API docs (/docs, /redoc, /openapi.json); default false. Lab: set true. # NETX_DOCS_ENABLED=true # NETX_ALLOW_INSECURE_DEFAULTS=false # Schema: Alembic auto-upgrades on API start (defaults on). Override only if needed: # NETX_ALEMBIC_UPGRADE_ON_START=false # NETX_SKIP_LEGACY_STARTUP_DDL=false # NETX_SQL_READONLY_DATABASE_URL=postgresql+psycopg://netx_ro:xxx@127.0.0.1:5432/netx # Device collectors run inline with the API by default (frontend+backend start is enough). # Production split only: NETX_RUN_INLINE_SCHEDULERS=false and run `python -m netx_api.worker` # NETX_RUN_INLINE_SCHEDULERS=false # NETX_AUDIT_ASYNC=true # NETX_AUDIT_SAMPLE_N=1 # DB pool (QueuePool). Aim: pool_size + max_overflow >= HTTP peak + NETX_CLI_MAX_CONCURRENT + UME WS burst. # NETX_DB_POOL_SIZE=20 # NETX_DB_MAX_OVERFLOW=20 # NETX_DB_POOL_RECYCLE_SEC=1800 # NETX_DB_POOL_TIMEOUT_SEC=30 # Global SSH/Netmiko concurrency across discover / collect / config_sync / port_traffic. # NETX_CLI_MAX_CONCURRENT=20 # NETX_CLI_TIMEOUT_POOL_WORKERS=16 # NETX_PORT_TRAFFIC_DISPATCH_WORKERS=4 # NETX_AUDIT_QUEUE_MAX=5000 # NETX_NE_COLLECT_MAX_OUTPUT_BYTES=8388608 # NETX_WEBCRT_SESSION_LOG_MAX_BYTES=4194304