Brings up the pull-model scraper: the .NET C2 hands skin+wear jobs to Python nodriver workers that scrape cs.money and post results back, plus the supporting Core/EFCore data model, migrations, and docker-compose orchestration. IPRoyal proxying lets workers scale horizontally with a distinct residential exit IP each: every worker process mints its own sticky session at startup, and an in-process forwarding proxy injects the gateway auth so Chromium talks only to an auth-free localhost endpoint (zero CDP). On a Cloudflare challenge a worker rotates to a fresh session/IP and re-warms. Verified end-to-end against live IPRoyal: distinct US residential exits per worker and IP rotation on demand. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
24 lines
766 B
C#
24 lines
766 B
C#
using OpenTelemetry;
|
|
using OpenTelemetry.Logs;
|
|
|
|
namespace BlueLaminate.Cli.Logging;
|
|
|
|
/// <summary>
|
|
/// Minimal console sink for the OpenTelemetry log pipeline: one line per record
|
|
/// as "{utc timestamp} {message}". Requires IncludeFormattedMessage so the
|
|
/// message arrives with its template arguments already substituted.
|
|
/// </summary>
|
|
public sealed class CompactConsoleLogExporter : BaseExporter<LogRecord>
|
|
{
|
|
public override ExportResult Export(in Batch<LogRecord> batch)
|
|
{
|
|
foreach (var record in batch)
|
|
{
|
|
var message = record.FormattedMessage ?? record.Body ?? string.Empty;
|
|
Console.WriteLine($"[{record.Timestamp:yyyy-MM-dd HH:mm:ss.fff'Z'}] {message}");
|
|
}
|
|
|
|
return ExportResult.Success;
|
|
}
|
|
}
|