# InfluxDB Export and Import Scripts This directory contains scripts for exporting and importing InfluxDB data for the Managing Apps project using query-based methods that work with standard read/write tokens. ## Prerequisites 1. **InfluxDB CLI** - Required for export/import operations ```bash brew install influxdb-cli ``` 2. **jq** - JSON parser for reading configuration files ```bash brew install jq ``` ## Available Scripts ### 1. `export-prices-bucket.sh` Exports OHLCV candle/price data from the `prices-bucket`. **What it exports:** - All candle data (open, high, low, close, volume) - Multiple exchanges, tickers, and timeframes - Configurable time ranges **Usage:** ```bash ./export-prices-bucket.sh ``` **Interactive Prompts:** - Select environment (SandboxLocal or ProductionLocal) - Select time range (7 days, 30 days, 90 days, 1 year, all data, or custom) **Output:** - CSV export: `./exports///prices-bucket_data.csv` - Metadata file with export details **Advantages:** - ✅ Works with regular read tokens (no admin required) - ✅ Flexible time range selection - ✅ Exports in standard CSV format - ✅ Can be imported to any InfluxDB instance --- ### 2. `import-csv-data.sh` Imports prices-bucket CSV export data into any InfluxDB environment. **What it imports:** - Prices-bucket data only - Supports large files (1.6M+ data points) - Automatically creates bucket if needed **Usage:** ```bash ./import-csv-data.sh ``` **Interactive Prompts:** 1. Select source environment (which export to import from) 2. Select export timestamp 3. Select target environment (where to import to) 4. Confirm the import operation **Features:** - ✅ Imports CSV exports to any environment - ✅ Works with regular read/write tokens - ✅ Batch processing for large files (5000 points per batch) - ✅ Automatic bucket creation if needed - ✅ Progress tracking for large imports **⚠️ Note:** Import adds data to the bucket. Existing data with the same timestamps will be overwritten. --- ## Configuration The scripts automatically read InfluxDB connection settings from: - `src/Managing.Api/appsettings.SandboxLocal.json` - `src/Managing.Api/appsettings.ProductionLocal.json` **Required settings in appsettings files:** ```json { "InfluxDb": { "Url": "https://influx-db.apps.managing.live", "Organization": "managing-org", "Token": "your-token-here" } } ``` ## Export/Import Structure ``` exports/ ├── SandboxLocal/ │ └── 20241028_143022/ │ ├── prices-bucket_data.csv │ └── export-metadata.txt └── ProductionLocal/ └── 20241028_160000/ ├── prices-bucket_data.csv └── export-metadata.txt ``` ## Data Structure ### prices-bucket (Managed by these scripts) - **Measurement**: `price` - **Contains**: OHLCV candle data - **Tags**: - `exchange` (e.g., Evm, Binance) - `ticker` (e.g., BTC, ETH, AAVE) - `timeframe` (e.g., FifteenMinutes, OneHour, OneDay) - **Fields**: - `open`, `high`, `low`, `close` (price values) - `baseVolume`, `quoteVolume` (volume data) - `TradeCount` (number of trades) - `takerBuyBaseVolume`, `takerBuyQuoteVolume` (taker buy volumes) ### agent-balances-bucket (Not included in export/import scripts) - **Measurement**: `agent_balance` - **Contains**: User balance history over time - **Note**: This bucket is not managed by these scripts. Balance data is derived from operational data and should be regenerated rather than migrated. ## Common Workflows ### Quick Export ```bash cd scripts/influxdb ./export-prices-bucket.sh # Select: 1 (SandboxLocal) # Select: 5 (All data) ``` ### Export Specific Time Range ```bash cd scripts/influxdb ./export-prices-bucket.sh # Select: 1 (SandboxLocal) # Select: 3 (Last 90 days) ``` ### Migrate Sandbox to Production ```bash cd scripts/influxdb # Step 1: Export from sandbox ./export-prices-bucket.sh # Select: 1 (SandboxLocal) # Select: 5 (All data) # Step 2: Import to production ./import-csv-data.sh # Select source: 1 (SandboxLocal) # Select: Latest export timestamp # Select target: 2 (ProductionLocal) # Confirm: yes ``` ### Backup Before Major Changes ```bash cd scripts/influxdb # Export current production data ./export-prices-bucket.sh # Select: 2 (ProductionLocal) # Select: 5 (All data) # If something goes wrong, restore it: ./import-csv-data.sh # Select the backup you just created ``` ### Clone Environment ```bash # Export from source ./export-prices-bucket.sh # Select source environment # Import to target ./import-csv-data.sh # Select target environment ``` ## Token Permissions ### Read Token (Export) Required for `export-prices-bucket.sh`: - ✅ Read access to buckets - ✅ This is what you typically have in production ### Write Token (Import) Required for `import-csv-data.sh`: - ✅ Read/Write access to target bucket - ✅ Ability to create buckets (optional, for auto-creation) ### How to Check Your Token Permissions ```bash influx auth list --host --token ``` ## Data Retention - Exports are stored indefinitely by default - Manual cleanup recommended: ```bash # Remove exports older than 90 days find ./exports -type d -mtime +90 -exec rm -rf {} + ``` ## Troubleshooting ### "influx command not found" Install InfluxDB CLI: ```bash brew install influxdb-cli ``` ### "jq command not found" Install jq: ```bash brew install jq ``` ### "Failed to parse configuration" Ensure the appsettings JSON file exists and is valid JSON. ### "Connection refused" - Check that InfluxDB URL is accessible - Verify network connectivity to the server - Check firewall rules ### "401 Unauthorized" - Verify the InfluxDB token in appsettings is correct - For exports: ensure token has read permissions for the bucket - For imports: ensure token has write permissions for the bucket ### "Bucket not found" The import script will automatically create the bucket if you have permissions. Or create it manually: ```bash influx bucket create \ --name prices-bucket \ --org managing-org \ --retention 0 \ --host https://influx-db.apps.managing.live \ --token YOUR_TOKEN ``` ### Import is slow - This is normal for large files (240MB+ with 1.6M+ data points) - Expected time: 5-15 minutes depending on network speed - The script processes data in batches of 5000 points - Progress is shown during import ### Duplicate data after import - Imports overwrite data with the same timestamp - To avoid duplicates, don't import the same data twice - To replace all data: delete the bucket first, then import ## Performance Tips ### For Large Exports - Export specific time ranges instead of all data when possible - Exports are faster than full database dumps - CSV files compress well (use `gzip` for storage) ### For Large Imports - Import during low-traffic periods - Monitor InfluxDB memory usage during import - Consider splitting very large imports into time ranges ## Verify Data After Import ```bash # Check recent data influx query 'from(bucket:"prices-bucket") |> range(start:-7d) |> limit(n:10)' \ --host https://influx-db.apps.managing.live \ --org managing-org \ --token YOUR_TOKEN # Count total records influx query 'from(bucket:"prices-bucket") |> range(start:2020-01-01T00:00:00Z) |> count()' \ --host https://influx-db.apps.managing.live \ --org managing-org \ --token YOUR_TOKEN # Check specific ticker influx query 'from(bucket:"prices-bucket") |> range(start:-30d) |> filter(fn: (r) => r.ticker == "BTC")' \ --host https://influx-db.apps.managing.live \ --org managing-org \ --token YOUR_TOKEN ``` ## Manual Export/Import Commands If you need to run commands manually: **Export:** ```bash influx query 'from(bucket: "prices-bucket") |> range(start: -30d)' \ --host https://influx-db.apps.managing.live \ --org managing-org \ --token YOUR_TOKEN \ --raw > export.csv ``` **Import:** ```bash influx write \ --host https://influx-db.apps.managing.live \ --org managing-org \ --token YOUR_TOKEN \ --bucket prices-bucket \ --format csv \ --file export.csv ``` ## Best Practices 1. **Regular Exports**: Schedule regular exports of production data 2. **Test Imports**: Test imports on sandbox before production 3. **Verify After Import**: Always verify data integrity after import 4. **Document Changes**: Keep notes of what data was imported when 5. **Backup Before Major Changes**: Export before major data operations ## Support For issues or questions, refer to: - [InfluxDB Query Documentation](https://docs.influxdata.com/influxdb/v2.0/query-data/) - [InfluxDB Write Documentation](https://docs.influxdata.com/influxdb/v2.0/write-data/) - Project documentation in `/docs` ## Script Locations All scripts are located in: `/Users/oda/Desktop/Projects/managing-apps/scripts/influxdb/` Configuration files: - Sandbox: `/Users/oda/Desktop/Projects/managing-apps/src/Managing.Api/appsettings.SandboxLocal.json` - Production: `/Users/oda/Desktop/Projects/managing-apps/src/Managing.Api/appsettings.ProductionLocal.json`