public static async Task Run(string metadataFileName, string connectionString) { if (!File.Exists(metadataFileName)) { throw new ArgumentException($"File {metadataFileName} doesn't exist"); } try { Initialize(metadataFileName, connectionString); var startTime = _cursor.GetCursorTime(); Log.LogMessage($"Start time: {startTime.ToString("u")}"); var packagesRepository = new EntityRepository <Package>(_context); var packages = packagesRepository.GetAll().Include(p => p.PackageRegistration); int counter = 0; var result = await TryReadNextMetadata(); RepositoryMetadataLog metadata = null; while (result.success) { metadata = result.metadata; // Skip packages with create date that we already processed in a previous run. if (metadata.CreationDate >= startTime) { var package = packages.FirstOrDefault(p => p.PackageRegistration.Id == metadata.PackageId && p.NormalizedVersion == metadata.PackageVersion); if (package != null) { package.RepositoryUrl = metadata.RepositoryMetadata.Url; if (metadata.RepositoryMetadata.Type.Length >= 100) { await _log.LogError(metadata.PackageId, metadata.PackageVersion, $"Repository type too long: {metadata.RepositoryMetadata.Type}"); } else { package.RepositoryType = metadata.RepositoryMetadata.Type; } counter++; Console.Write("."); } else { await _log.LogError(metadata.PackageId, metadata.PackageVersion, "Couldn't find in DB"); } } if (counter >= BatchSize) { await CommitBatch(metadata.CreationDate); counter = 0; } result = await TryReadNextMetadata(); } if (counter > 0) { await CommitBatch(metadata.CreationDate); } } finally { Dispose(); } Console.Read(); }
public static async Task Run(string connectionString, Uri serviceDiscoveryUri, DateTime lastCreateTime) { try { await Initialize(connectionString, serviceDiscoveryUri); // Get start time from cursor. var startTime = _cursor.GetCursorTime(); Log.LogMessage($"Start time: {startTime.ToString("u")}"); var packagesRepository = new EntityRepository <Package>(_context); var allPackages = packagesRepository.GetAll().Where( p => p.Created <lastCreateTime && p.Created> startTime && (p.PackageStatusKey == PackageStatus.Available || p.PackageStatusKey == PackageStatus.Validating)); allPackages = allPackages.Include(p => p.PackageRegistration).OrderBy(p => p.Key); int counter = 0; foreach (var package in allPackages) { var packageId = package.PackageRegistration.Id; var version = package.NormalizedVersion; try { var repositoryMetadata = await GetRepositoryMetadata(packageId, version); if (!string.IsNullOrEmpty(repositoryMetadata.Branch) || !string.IsNullOrEmpty(repositoryMetadata.Commit) || !string.IsNullOrEmpty(repositoryMetadata.Type) || !string.IsNullOrEmpty(repositoryMetadata.Url)) { Log.LogMessage($"Found repo information for package {packageId} {version}"); await WriteMetadata(new RepositoryMetadataLog(repositoryMetadata, package.Created, packageId, version)); } else { Console.Write("."); } } catch (Exception e) { await _log.LogError(package.PackageRegistration.Id, package.NormalizedVersion, e); } counter++; if (counter >= SaveCounterAfter) { await _cursor.WriteCursor(package.Created); counter = 0; } } } finally { Dispose(); } Console.Read(); }