62 lines
2.0 KiB
C#
62 lines
2.0 KiB
C#
using LCU.API.Internal.DocumentLib.Containers;
|
|
using LCU.API.Internal.DocumentLib.Utilities;
|
|
using Microsoft.Extensions.Logging;
|
|
using MongoDB.Driver;
|
|
|
|
namespace OwnerNumberMigration.Logging;
|
|
|
|
public delegate IAttributeMigration AttributeMigrationLoggingDecoratorFactory
|
|
(
|
|
IAttributeMigration migration,
|
|
string attributeName,
|
|
string destinationAttributeName
|
|
);
|
|
|
|
public class AttributeMigrationLoggingDecorator : IAttributeMigration
|
|
{
|
|
private readonly IAttributeMigration _migration;
|
|
private readonly ILogger _logger;
|
|
private readonly IMongoCollection<DocumentInformation> _documents;
|
|
private readonly string _attributeName;
|
|
private readonly string _destinationAttributeName;
|
|
private readonly IDocumentFilterFactory _filterFactory;
|
|
|
|
public AttributeMigrationLoggingDecorator
|
|
(
|
|
IAttributeMigration migration,
|
|
ILogger logger,
|
|
IMongoCollectionFactory collectionFactory,
|
|
string attributeName,
|
|
string destinationAttributeName,
|
|
IDocumentFilterFactory filterFactory
|
|
)
|
|
{
|
|
_migration = migration;
|
|
_logger = logger;
|
|
_documents = collectionFactory.GetCollection<DocumentInformation>();
|
|
_attributeName = attributeName;
|
|
_destinationAttributeName = destinationAttributeName;
|
|
_filterFactory = filterFactory;
|
|
}
|
|
|
|
public async Task Migrate(CancellationToken cancellationToken)
|
|
{
|
|
var countToMigration = await _documents.CountDocumentsAsync
|
|
(
|
|
_filterFactory.AppliesForMigrationFilterFactory(_attributeName, _destinationAttributeName),
|
|
cancellationToken: cancellationToken
|
|
);
|
|
_logger.LogInformation
|
|
(
|
|
"starting to migration {attribute} with {count} documents",
|
|
_attributeName,
|
|
countToMigration
|
|
);
|
|
var start = DateTime.Now;
|
|
|
|
await _migration.Migrate(cancellationToken);
|
|
|
|
var duration = DateTime.Now - start;
|
|
_logger.LogInformation("finished migration for {attribute} in {elapsed}", _attributeName, duration);
|
|
}
|
|
} |