InterferenceETL

InterferenceETL processes the newest complete hour of interference KPI files from Metrix storage. It reads seven ZIP/XLSX source types, converts each Sheet0 to CSV, and creates one merged interference summary.

Output

Each run writes one window directory:

output/2026073110001100/
├── converted/
│   ├── 5G下FDD干扰监控_2026073110001100.csv
│   ├── 5G干扰监控_2026073110001100.csv
│   └── ... seven source CSV files
├── interference_summary_2026073110001100.csv
└── manifest.json

The summary columns are:

hour_start,hour_end,source_type,cgi,cell_name,interference_dbm,source_path

The script never modifies source storage and does not write a database yet. Pending decisions are recorded in docs/assumptions.md.

Local development

python -m pip install -r requirements.txt
python -m unittest discover -s tests -v
python main.py --source-dir C:\path\to\mock-or-exported-tree --output-dir output

Use --window 2026073110001100 to require one exact source window. Without it, the script selects the newest window containing all seven source types and falls back if the newest observed window is incomplete.

Metrix Script Management

The target server is offline, so build the runtime image on a connected machine and import it through Metrix Container Management:

docker build -t interference-etl-runtime:1.0 .
New-Item -ItemType Directory -Force dist | Out-Null
docker save -o dist\interference-etl-runtime-1.0.tar interference-etl-runtime:1.0

The local dist/ directory is intentionally excluded from Git. Transfer the generated TAR as a deployment artifact rather than source code.

Create the Metrix script project with:

Name: InterferenceETL
Language: python
Base image: interference-etl-runtime:1.0
Network: bridge
Run command: python main.py
Timeout: 1800 seconds

Configure project environment variables in Metrix instead of committing secrets:

{
  "METRIX_API_BASE_URL": "http://172.17.0.1:8000",
  "METRIX_API_TOKEN": "<Metrix API token>",
  "METRIX_STORAGE_ID": "stg_4d9a910d72",
  "INTERFERENCE_SOURCE_ROOT": "/网优日常优化数据文档/(勿删)干扰定时小时指标",
  "INTERFERENCE_OUTPUT_DIR": "/workspace/output",
  "INTERFERENCE_LOOKBACK_DAYS": "3",
  "INTERFERENCE_PLMN": "460-00"
}

172.17.0.1 is the current Linux Docker default-bridge gateway used to reach the Metrix host port. Verify it before creating the online schedule because Docker bridge configuration can differ by server.

CLI options

--source-dir PATH      Read a local directory tree instead of Metrix API
--output-dir PATH      Output root, default output or INTERFERENCE_OUTPUT_DIR
--window WINDOW        Require an exact 16-digit source window
--lookback-days N      Number of newest date directories scanned, default 3
--api-base URL         Metrix API base URL
--api-token TOKEN      Metrix API token
--storage-id ID        Metrix storage connection ID
--root PATH            Source directory in Metrix storage
--plmn PLMN            LTE/SDR CGI PLMN prefix, default 460-00
S
Description
No description provided
Readme
132 KiB
Languages
Python 99.8%
Dockerfile 0.2%