feat(database): migration process and data_start_date updated (#14)

<!-- greptile_comment -->

<h3>Greptile Summary</h3>


This PR updates the `DATA_START_DATE` from March 2024 to February 2025 to exclude corrupt/unusable data, and adds a comprehensive migration script to clean the database and backfill the `processed_files` tracking table.

**Key changes:**
- Updated `DATA_START_DATE` constant with clear documentation about data corruption
- Added filtering in `discovery.py` to skip files before the new start date
- Created `migrate_processed_files.py` with backup functionality, dry-run mode, and verification
- Enhanced logging across all processing modules with table-specific prefixes (`[flow_stats]`, `[ip_stats]`, etc.)

**Minor issue found:**
- Documentation inconsistency: The docstring on line 7 mentions "Feb 11" as backfill start, but the constant on line 25 is set to Feb 1, 2025

<h3>Confidence Score: 4/5</h3>


- This PR is safe to merge after clarifying the Feb 1 vs Feb 11 date discrepancy
- The changes are well-structured with proper backup mechanisms and dry-run testing. The migration script follows best practices with phased execution and verification. Only concern is the minor documentation inconsistency about start dates that should be clarified.
- Review `netflow-db/migrate_processed_files.py` to confirm whether Feb 1 or Feb 11 is the correct backfill start date

<h3>Important Files Changed</h3>




| Filename | Overview |
|----------|----------|
| netflow-db/common.py | Updated DATA_START_DATE from 2024-03-01 to 2025-02-01 with clear documentation about data corruption |
| netflow-db/discovery.py | Added filtering to skip files before DATA_START_DATE during filesystem scan |
| netflow-db/migrate_processed_files.py | New migration script to clean post-Oct 2025 data and backfill processed_files table from netflow_stats; includes backup functionality |

</details>



<h3>Sequence Diagram</h3>

```mermaid
sequenceDiagram
    participant User
    participant MigrationScript as migrate_processed_files.py
    participant SQLite as Database
    participant FileSystem as NetFlow Files

    User->>MigrationScript: Run migration (with --dry-run or not)
    
    alt Dry Run Mode
        MigrationScript->>SQLite: Query current row counts
        MigrationScript->>SQLite: Count rows to delete (>= Oct 1, 2025)
        MigrationScript->>SQLite: Count backfill rows from netflow_stats
        MigrationScript->>User: Display what would change (no modifications)
    else Actual Migration
        MigrationScript->>SQLite: Create database backup
        SQLite-->>MigrationScript: Backup created
        
        Note over MigrationScript,SQLite: Phase 1: Delete post-Oct 1 data
        loop For each table
            MigrationScript->>SQLite: DELETE FROM table WHERE timestamp >= Oct 1
        end
        MigrationScript->>SQLite: COMMIT
        
        Note over MigrationScript,SQLite: Phase 2: Ensure table exists
        MigrationScript->>SQLite: init_processed_files_table()
        
        Note over MigrationScript,SQLite: Phase 3: Backfill processed_files
        MigrationScript->>SQLite: INSERT processed_files from netflow_stats (Feb 1 - Oct 1)
        MigrationScript->>SQLite: Mark all 5 tables as processed (status=1)
        MigrationScript->>SQLite: COMMIT
        
        Note over MigrationScript,SQLite: Phase 4: Verification
        MigrationScript->>SQLite: Query final row counts
        SQLite-->>MigrationScript: Return counts
        MigrationScript->>User: Display migration complete
    end
    
    Note over FileSystem: Meanwhile, discovery.py filters files
    FileSystem->>MigrationScript: Files with timestamp < Feb 1, 2025
    MigrationScript->>MigrationScript: Skip (filtered out by DATA_START_DATE check)
```

<!-- greptile_other_comments_section -->

<!-- /greptile_comment -->
2170a10118oliver committed on 1/15/2026, 9:38:23 PM· committed by GitHubparentse132f1f49a376c
8 files changedLine totals unavailable