d731800954
Co-authored-by: Claude Code <kjh2064@gmail.com> Co-committed-by: Claude Code <kjh2064@gmail.com>
91 lines
3.8 KiB
PowerShell
91 lines
3.8 KiB
PowerShell
#!/usr/bin/env pwsh
|
|
<#
|
|
.SYNOPSIS
|
|
Generate Phase 1 shadow run identifiers (RunId, JobId, JobRunId, CorrelationId, Idempotency-Key).
|
|
|
|
.DESCRIPTION
|
|
Produces a JSON-formatted versionset.json file with all identifiers needed to enqueue Phase 1.
|
|
Uses CRYPTOGRAPHIC random UUIDs and correlation for full traceability.
|
|
|
|
.PARAMETER OutputPath
|
|
Path to save versionset.json (default: ./versionset.json in current directory)
|
|
|
|
.EXAMPLE
|
|
.\generate-shadow-run-identifiers.ps1 -OutputPath ./phase1-versionset.json
|
|
|
|
.OUTPUTS
|
|
JSON file with structure:
|
|
{
|
|
"phase1_run": {
|
|
"runId": "UUID",
|
|
"jobId": "UUID",
|
|
"jobRunId": "UUID",
|
|
"correlationId": "UUID",
|
|
"idempotencyKey": "UUID",
|
|
"generatedAt": "ISO8601 timestamp",
|
|
"usage": "Use these IDs to enqueue Job 893 in Hangfire..."
|
|
}
|
|
}
|
|
#>
|
|
|
|
[CmdletBinding()]
|
|
param(
|
|
[string]$OutputPath = "./versionset.json"
|
|
)
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ForegroundColor Cyan
|
|
Write-Host "Phase 1: Generate Shadow Run Identifiers" -ForegroundColor Cyan
|
|
Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ForegroundColor Cyan
|
|
|
|
Write-Host "`n[1/3] Generating cryptographic UUIDs..."
|
|
|
|
$runId = [System.Guid]::NewGuid()
|
|
$jobId = [System.Guid]::NewGuid()
|
|
$jobRunId = [System.Guid]::NewGuid()
|
|
$correlationId = [System.Guid]::NewGuid()
|
|
$idempotencyKey = [System.Guid]::NewGuid()
|
|
|
|
Write-Host " ✅ RunId: $runId"
|
|
Write-Host " ✅ JobId: $jobId"
|
|
Write-Host " ✅ JobRunId: $jobRunId"
|
|
Write-Host " ✅ CorrelationId: $correlationId"
|
|
Write-Host " ✅ IdempotencyKey: $idempotencyKey"
|
|
|
|
Write-Host "`n[2/3] Creating JSON payload..."
|
|
|
|
$payload = @{
|
|
phase1_run = @{
|
|
runId = $runId.ToString()
|
|
jobId = $jobId.ToString()
|
|
jobRunId = $jobRunId.ToString()
|
|
correlationId = $correlationId.ToString()
|
|
idempotencyKey = $idempotencyKey.ToString()
|
|
generatedAt = [System.DateTime]::UtcNow.ToString("o")
|
|
windowStart = "2024-01-02"
|
|
windowEnd = "2024-09-10"
|
|
usage = "Use these IDs to enqueue Job 893 (Phase 1 shadow run) in Hangfire. Command: `n Invoke-WebRequest -Uri 'http://127.0.0.1:5002/api/shadow-runs' -Method POST -Headers @{ 'X-KArtSell-User'='admin'; 'X-KArtSell-Role'='Admin'; 'Content-Type'='application/json' } -Body (ConvertTo-Json @{ modelId='<modelId>'; datasetId='<datasetId>'; windowStart='2024-01-02'; windowEnd='2024-09-10'; phaseFilter='All' })"
|
|
}
|
|
}
|
|
|
|
Write-Host " ✅ JSON payload generated"
|
|
|
|
Write-Host "`n[3/3] Writing to file: $OutputPath"
|
|
|
|
$json = $payload | ConvertTo-Json -Depth 10
|
|
$json | Out-File -FilePath $OutputPath -Encoding UTF8
|
|
|
|
Write-Host " ✅ File saved: $(Resolve-Path $OutputPath)"
|
|
|
|
Write-Host "`n✅ IDENTIFIERS GENERATED`n"
|
|
Write-Host $json -ForegroundColor Green
|
|
|
|
Write-Host "`nNext Steps:`n"
|
|
Write-Host " 1. Copy the identifiers from above or read from $OutputPath"
|
|
Write-Host " 2. Call POST /api/shadow-runs with modelId/datasetId from frozen VersionSet"
|
|
Write-Host " 3. Hangfire will enqueue Job 893 with these correlation IDs"
|
|
Write-Host " 4. Monitor logs: grep 'CorrelationId: $correlationId' app.log"
|
|
|
|
Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ForegroundColor Cyan
|