99using System . Text ;
1010using System . Text . RegularExpressions ;
1111using System . Threading . Tasks ;
12+ using Autofac ;
1213using ICSharpCode . SharpZipLib ;
1314using ICSharpCode . SharpZipLib . GZip ;
15+ using Microsoft . Extensions . Configuration ;
16+ using Microsoft . Extensions . DependencyInjection ;
1417using Microsoft . Extensions . Logging ;
18+ using Microsoft . Extensions . Options ;
1519using Microsoft . WindowsAzure . Storage ;
1620using NuGet . Jobs ;
1721using Stats . AzureCdnLogs . Common ;
2024
2125namespace Stats . CollectAzureCdnLogs
2226{
23- public class Job
24- : JobBase
27+ public class Job : JsonConfigurationJob
2528 {
2629 private static readonly DateTime _unixTimestamp = new DateTime ( 1970 , 1 , 1 , 0 , 0 , 0 , 0 , DateTimeKind . Utc ) ;
2730 private Uri _ftpServerUri ;
28- private string _ftpUsername ;
29- private string _ftpPassword ;
30- private string _azureCdnAccountNumber ;
3131 private AzureCdnPlatform _azureCdnPlatform ;
3232 private CloudStorageAccount _cloudStorageAccount ;
33- private string _cloudStorageContainerName ;
33+
34+ private CollectAzureCdnLogsConfiguration _configuration ;
3435
3536 public override void Init ( IServiceContainer serviceContainer , IDictionary < string , string > jobArgsDictionary )
3637 {
37- var ftpLogFolder = JobConfigurationManager . GetArgument ( jobArgsDictionary , JobArgumentNames . FtpSourceUri ) ;
38- var azureCdnPlatform = JobConfigurationManager . GetArgument ( jobArgsDictionary , JobArgumentNames . AzureCdnPlatform ) ;
39- var cloudStorageAccount = JobConfigurationManager . GetArgument ( jobArgsDictionary , JobArgumentNames . AzureCdnCloudStorageAccount ) ;
40- _cloudStorageContainerName = JobConfigurationManager . GetArgument ( jobArgsDictionary , JobArgumentNames . AzureCdnCloudStorageContainerName ) ;
41- _azureCdnAccountNumber = JobConfigurationManager . GetArgument ( jobArgsDictionary , JobArgumentNames . AzureCdnAccountNumber ) ;
42- _ftpUsername = JobConfigurationManager . GetArgument ( jobArgsDictionary , JobArgumentNames . FtpSourceUsername ) ;
43- _ftpPassword = JobConfigurationManager . GetArgument ( jobArgsDictionary , JobArgumentNames . FtpSourcePassword ) ;
44-
45- _ftpServerUri = ValidateFtpUri ( ftpLogFolder ) ;
46- _azureCdnPlatform = ValidateAzureCdnPlatform ( azureCdnPlatform ) ;
47- _cloudStorageAccount = ValidateAzureCloudStorageAccount ( cloudStorageAccount ) ;
38+ base . Init ( serviceContainer , jobArgsDictionary ) ;
39+
40+ InitializeJobConfiguration ( _serviceProvider ) ;
41+ }
42+
43+ public void InitializeJobConfiguration ( IServiceProvider serviceProvider )
44+ {
45+ _configuration = serviceProvider . GetRequiredService < IOptionsSnapshot < CollectAzureCdnLogsConfiguration > > ( ) . Value ;
46+
47+ if ( string . IsNullOrEmpty ( _configuration . AzureCdnAccountNumber ) )
48+ {
49+ throw new ArgumentException ( "Configuration 'AzureCdnAccountNumber' is required" , nameof ( _configuration ) ) ;
50+ }
51+
52+ if ( string . IsNullOrEmpty ( _configuration . AzureCdnCloudStorageContainerName ) )
53+ {
54+ throw new ArgumentException ( "Configuration 'AzureCdnCloudStorageContainerName' is required" , nameof ( _configuration ) ) ;
55+ }
56+
57+ if ( string . IsNullOrEmpty ( _configuration . FtpSourceUsername ) ) {
58+ throw new ArgumentException ( "Configuration 'FtpSourceUsername' is required" , nameof ( _configuration ) ) ;
59+ }
60+
61+ if ( string . IsNullOrEmpty ( _configuration . FtpSourcePassword ) )
62+ {
63+ throw new ArgumentException ( "Configuration 'FtpSourcePassword' is required" , nameof ( _configuration ) ) ;
64+ }
65+
66+ _cloudStorageAccount = ValidateAzureCloudStorageAccount ( _configuration . AzureCdnCloudStorageAccount ) ;
67+ _azureCdnPlatform = ValidateAzureCdnPlatform ( _configuration . AzureCdnPlatform ) ;
68+ _ftpServerUri = ValidateFtpUri ( _configuration . FtpSourceUri ) ;
4869 }
4970
5071 private static CloudStorageAccount ValidateAzureCloudStorageAccount ( string cloudStorageAccount )
@@ -110,14 +131,14 @@ private static Uri ValidateFtpUri(string serverUrl)
110131
111132 public override async Task Run ( )
112133 {
113- var ftpClient = new FtpRawLogClient ( LoggerFactory , _ftpUsername , _ftpPassword ) ;
134+ var ftpClient = new FtpRawLogClient ( LoggerFactory , _configuration . FtpSourceUsername , _configuration . FtpSourcePassword ) ;
114135 var azureClient = new CloudBlobRawLogClient ( LoggerFactory , _cloudStorageAccount ) ;
115136
116137 // Collect directory listing.
117138 var rawLogFileUris = await ftpClient . GetRawLogFileUris ( _ftpServerUri ) ;
118139
119140 // Prepare cloud storage blob container.
120- var cloudBlobContainer = await azureClient . CreateContainerIfNotExistsAsync ( _cloudStorageContainerName ) ;
141+ var cloudBlobContainer = await azureClient . CreateContainerIfNotExistsAsync ( _configuration . AzureCdnCloudStorageContainerName ) ;
121142
122143 foreach ( var rawLogFileUri in rawLogFileUris )
123144 {
@@ -126,7 +147,7 @@ public override async Task Run()
126147 var rawLogFile = new RawLogFileInfo ( rawLogFileUri ) ;
127148
128149 if ( _azureCdnPlatform != rawLogFile . AzureCdnPlatform
129- || ! _azureCdnAccountNumber . Equals ( rawLogFile . AzureCdnAccountNumber , StringComparison . InvariantCultureIgnoreCase ) )
150+ || ! _configuration . AzureCdnAccountNumber . Equals ( rawLogFile . AzureCdnAccountNumber , StringComparison . InvariantCultureIgnoreCase ) )
130151 {
131152 // Only process the raw log files matching the target CDN platform and account number.
132153 continue ;
@@ -367,5 +388,14 @@ private static string ToUnixTimeStamp(DateTime dateTime)
367388 var secondsPastEpoch = ( dateTime - _unixTimestamp ) . TotalSeconds ;
368389 return secondsPastEpoch . ToString ( CultureInfo . InvariantCulture ) ;
369390 }
391+
392+ protected override void ConfigureAutofacServices ( ContainerBuilder containerBuilder )
393+ {
394+ }
395+
396+ protected override void ConfigureJobServices ( IServiceCollection services , IConfigurationRoot configurationRoot )
397+ {
398+ ConfigureInitializationSection < CollectAzureCdnLogsConfiguration > ( services , configurationRoot ) ;
399+ }
370400 }
371401}
0 commit comments