59 lines
1.8 KiB
C#
59 lines
1.8 KiB
C#
using Omika.Core.Observability.External;
|
|
using Omika.Diagnostics.Import;
|
|
|
|
namespace Omika.Diagnostics.Tests.Fakes;
|
|
|
|
/// <summary>
|
|
/// Source JSONL en mémoire : modèle un flux de <see cref="RemoteDiagnosticRecord"/>
|
|
/// avec un checkpoint (LineIndex = index du dernier enregistrement lu). Permet de
|
|
/// tester l'importeur et son avancement de checkpoint sans PostgreSQL.
|
|
/// </summary>
|
|
public sealed class FakeDiagnosticJsonlSource : IDiagnosticJsonlSource
|
|
{
|
|
private readonly List<RemoteDiagnosticRecord> _records;
|
|
private DiagnosticImportCheckpoint? _checkpoint;
|
|
|
|
public FakeDiagnosticJsonlSource(IReadOnlyList<RemoteDiagnosticRecord> records)
|
|
{
|
|
_records = records.ToList();
|
|
}
|
|
|
|
public int CommitCount { get; private set; }
|
|
|
|
public DiagnosticImportCheckpoint? LastCommitted { get; private set; }
|
|
|
|
public DiagnosticImportCheckpoint? LoadCheckpoint() => _checkpoint;
|
|
|
|
public DiagnosticJsonlReadResult ReadNext(DiagnosticImportCheckpoint? after, int maxCount)
|
|
{
|
|
int start = after is null ? 0 : after.LineIndex + 1;
|
|
if (start >= _records.Count)
|
|
{
|
|
return new DiagnosticJsonlReadResult { ReachedEnd = true };
|
|
}
|
|
|
|
int count = Math.Min(maxCount, _records.Count - start);
|
|
List<RemoteDiagnosticRecord> records = _records.GetRange(start, count);
|
|
|
|
var next = new DiagnosticImportCheckpoint
|
|
{
|
|
FileName = "fake.jsonl",
|
|
LineIndex = start + count - 1
|
|
};
|
|
|
|
return new DiagnosticJsonlReadResult
|
|
{
|
|
Records = records,
|
|
NextPosition = next,
|
|
ReachedEnd = start + count >= _records.Count
|
|
};
|
|
}
|
|
|
|
public void Commit(DiagnosticImportCheckpoint position)
|
|
{
|
|
_checkpoint = position;
|
|
LastCommitted = position;
|
|
CommitCount++;
|
|
}
|
|
}
|