44using System ;
55using System . Collections . Generic ;
66using System . ComponentModel . Design ;
7- using System . Data . SqlClient ;
87using System . Diagnostics . Tracing ;
98using System . Linq ;
109using System . Threading . Tasks ;
1312using Microsoft . WindowsAzure . Storage . Blob ;
1413using Newtonsoft . Json . Linq ;
1514using NuGet . Jobs ;
15+ using NuGet . Services . KeyVault ;
16+ using NuGet . Services . Sql ;
1617
1718namespace ArchivePackages
1819{
@@ -52,20 +53,22 @@ public class Job : JobBase
5253 /// Blob containing the cursor data. Cursor data comprises of cursorDateTime
5354 /// </summary>
5455 public string CursorBlobName { get ; set ; }
56+
57+ private ISqlConnectionFactory _packageDbConnectionFactory ;
5558
5659 protected CloudBlobContainer SourceContainer { get ; private set ; }
5760
5861 protected CloudBlobContainer PrimaryDestinationContainer { get ; private set ; }
5962
6063 protected CloudBlobContainer SecondaryDestinationContainer { get ; private set ; }
6164
62- private SqlConnectionStringBuilder PackageDatabase { get ; set ; }
63-
6465 public Job ( ) : base ( JobEventSource . Log ) { }
6566
6667 public override void Init ( IServiceContainer serviceContainer , IDictionary < string , string > jobArgsDictionary )
6768 {
68- PackageDatabase = RegisterDatabase ( serviceContainer , jobArgsDictionary , JobArgumentNames . PackageDatabase ) ;
69+ var secretInjector = ( ISecretInjector ) serviceContainer . GetService ( typeof ( ISecretInjector ) ) ;
70+ var packageDbConnectionString = JobConfigurationManager . GetArgument ( jobArgsDictionary , JobArgumentNames . PackageDatabase ) ;
71+ _packageDbConnectionFactory = new AzureSqlConnectionFactory ( packageDbConnectionString , secretInjector ) ;
6972
7073 Source = CloudStorageAccount . Parse (
7174 JobConfigurationManager . GetArgument ( jobArgsDictionary , JobArgumentNames . Source ) ) ;
@@ -89,18 +92,13 @@ public override void Init(IServiceContainer serviceContainer, IDictionary<string
8992
9093 public override async Task Run ( )
9194 {
92- JobEventSourceLog . PreparingToArchive (
93- Source . Credentials . AccountName , SourceContainer . Name ,
94- PrimaryDestination . Credentials . AccountName , PrimaryDestinationContainer . Name ,
95- PackageDatabase . DataSource , PackageDatabase . InitialCatalog ) ;
96-
95+ JobEventSourceLog . PreparingToArchive ( Source . Credentials . AccountName , SourceContainer . Name , PrimaryDestination . Credentials . AccountName , PrimaryDestinationContainer . Name , _packageDbConnectionFactory . DataSource , _packageDbConnectionFactory . InitialCatalog ) ;
9796 await Archive ( PrimaryDestinationContainer ) ;
9897
9998 // todo: consider reusing package query for primary and secondary archives
10099 if ( SecondaryDestinationContainer != null )
101100 {
102101 JobEventSourceLog . PreparingToArchive2 ( SecondaryDestination . Credentials . AccountName , SecondaryDestinationContainer . Name ) ;
103-
104102 await Archive ( SecondaryDestinationContainer ) ;
105103 }
106104 }
@@ -126,10 +124,9 @@ private async Task Archive(CloudBlobContainer destinationContainer)
126124
127125 JobEventSourceLog . CursorData ( cursorDateTime . ToString ( DateTimeFormatSpecifier ) ) ;
128126
129- JobEventSourceLog . GatheringPackagesToArchiveFromDb ( PackageDatabase . DataSource , PackageDatabase . InitialCatalog ) ;
130-
127+ JobEventSourceLog . GatheringPackagesToArchiveFromDb ( _packageDbConnectionFactory . DataSource , _packageDbConnectionFactory . InitialCatalog ) ;
131128 List < PackageRef > packages ;
132- using ( var connection = await OpenSqlConnectionAsync ( JobArgumentNames . PackageDatabase ) )
129+ using ( var connection = await _packageDbConnectionFactory . CreateAsync ( ) )
133130 {
134131 packages = ( await connection . QueryAsync < PackageRef > ( @"
135132 SELECT pr.Id, p.NormalizedVersion AS Version, p.Hash, p.LastEdited, p.Published
@@ -138,8 +135,7 @@ FROM Packages p
138135 WHERE Published > @cursorDateTime OR LastEdited > @cursorDateTime" , new { cursorDateTime = cursorDateTime } ) )
139136 . ToList ( ) ;
140137 }
141-
142- JobEventSourceLog . GatheredPackagesToArchiveFromDb ( packages . Count , PackageDatabase . DataSource , PackageDatabase . InitialCatalog ) ;
138+ JobEventSourceLog . GatheredPackagesToArchiveFromDb ( packages . Count , _packageDbConnectionFactory . DataSource , _packageDbConnectionFactory . InitialCatalog ) ;
143139
144140 var archiveSet = packages
145141 . AsParallel ( )
0 commit comments