This is it. Don't get scared now. (Converted to Ratermania.Automation)
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using PartSource.Automation.Models.Configuration;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using PartSource.Automation.Models.Configuration;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
@@ -13,9 +14,9 @@ namespace PartSource.Automation.Services
|
||||
{
|
||||
private readonly EmailConfiguration _emailConfiguration;
|
||||
|
||||
public EmailService(EmailConfiguration emailConfiguration)
|
||||
public EmailService(IConfiguration configuration)
|
||||
{
|
||||
_emailConfiguration = emailConfiguration;
|
||||
_emailConfiguration = configuration.GetSection("emailConfiguration").Get<EmailConfiguration>();
|
||||
}
|
||||
|
||||
public void Send(string subject, string body)
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
using PartSource.Automation.Models.Configuration;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using PartSource.Automation.Models.Configuration;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
@@ -13,23 +15,38 @@ namespace PartSource.Automation.Services
|
||||
|
||||
public FtpService(FtpConfiguration ftpConfiguration)
|
||||
{
|
||||
_ftpConfiguration = ftpConfiguration;
|
||||
_ftpConfiguration = ftpConfiguration;
|
||||
}
|
||||
|
||||
public string[] ListFiles(string directory)
|
||||
{
|
||||
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri($"{_ftpConfiguration.Url}/{directory}"));
|
||||
request.Credentials = new NetworkCredential(_ftpConfiguration.Username, _ftpConfiguration.Password);
|
||||
request.Method = WebRequestMethods.Ftp.ListDirectory;
|
||||
|
||||
using FtpWebResponse response = (FtpWebResponse)request.GetResponse();
|
||||
using StreamReader reader = new StreamReader(response.GetResponseStream());
|
||||
|
||||
string files = reader.ReadToEnd();
|
||||
|
||||
return files.Length > 0
|
||||
? files.Split("\r\n")
|
||||
: Array.Empty<string>();
|
||||
}
|
||||
|
||||
public void Download(string filename)
|
||||
{
|
||||
FtpWebRequest request = (FtpWebRequest)WebRequest.Create($"{_ftpConfiguration.Url}/{filename}");
|
||||
string file = $"{_ftpConfiguration.Destination}\\{filename.Replace("/", "\\")}";
|
||||
|
||||
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri($"{_ftpConfiguration.Url}/{filename}"));
|
||||
request.Credentials = new NetworkCredential(_ftpConfiguration.Username, _ftpConfiguration.Password);
|
||||
request.Method = WebRequestMethods.Ftp.DownloadFile;
|
||||
|
||||
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
|
||||
{
|
||||
using (Stream responseStream = response.GetResponseStream())
|
||||
using (FileStream fileStream = new FileStream($"{_ftpConfiguration.Destination}\\{filename}", FileMode.Create))
|
||||
{
|
||||
responseStream.CopyTo(fileStream);
|
||||
}
|
||||
}
|
||||
using FtpWebResponse response = (FtpWebResponse)request.GetResponse();
|
||||
using Stream responseStream = response.GetResponseStream();
|
||||
using FileStream fileStream = new FileStream($"{_ftpConfiguration.Destination}\\{filename.Replace("/", "\\")}", FileMode.Create);
|
||||
|
||||
responseStream.CopyTo(fileStream);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ using System.Threading.Tasks;
|
||||
using PartSource.Automation.Models.Configuration;
|
||||
using System.Configuration;
|
||||
using System.Diagnostics;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
|
||||
namespace PartSource.Automation.Services
|
||||
{
|
||||
@@ -14,9 +15,9 @@ namespace PartSource.Automation.Services
|
||||
{
|
||||
private readonly SsisConfiguration _ssisConfiguration;
|
||||
|
||||
public SsisService(SsisConfiguration ssisConfiguration)
|
||||
public SsisService(IConfiguration configuration)
|
||||
{
|
||||
_ssisConfiguration = ssisConfiguration;
|
||||
_ssisConfiguration = configuration.GetSection("ssisConfiguration").Get<SsisConfiguration>();
|
||||
}
|
||||
|
||||
public bool Execute(string packageName)
|
||||
|
||||
79
PartSource.Automation/Services/WhiSeoService.cs
Normal file
79
PartSource.Automation/Services/WhiSeoService.cs
Normal file
@@ -0,0 +1,79 @@
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using PartSource.Automation.Models.Configuration;
|
||||
using PartSource.Automation.Models.Enums;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Text;
|
||||
|
||||
namespace PartSource.Automation.Services
|
||||
{
|
||||
public class WhiSeoService
|
||||
{
|
||||
private readonly FtpService _ftpService;
|
||||
private readonly string _connectionString;
|
||||
private readonly ILogger<WhiSeoService> _logger;
|
||||
|
||||
public WhiSeoService(IConfiguration configuration, ILogger<WhiSeoService> logger)
|
||||
{
|
||||
FtpConfiguration ftpConfiguration = configuration.GetSection("FtpServers:WhiConfiguration").Get<FtpConfiguration>();
|
||||
_ftpService = new FtpService(ftpConfiguration);
|
||||
|
||||
_connectionString = configuration.GetConnectionString("PartSourceDatabase");
|
||||
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public void GetFiles(SeoDataType seoDataType)
|
||||
{
|
||||
string seoDataTypeString = seoDataType.ToString().ToLowerInvariant();
|
||||
string[] files = _ftpService.ListFiles(seoDataTypeString);
|
||||
|
||||
foreach (string file in files)
|
||||
{
|
||||
if (file.EndsWith("csv.gz"))
|
||||
{
|
||||
try
|
||||
{
|
||||
_ftpService.Download($"{seoDataTypeString}/{file}");
|
||||
_logger.LogInformation($"Finished downloading {file}.");
|
||||
}
|
||||
|
||||
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogWarning($"Failed to download {file}, quitting", ex);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Truncate(SeoDataType seoDataType)
|
||||
{
|
||||
using SqlConnection connection = new SqlConnection(_connectionString);
|
||||
connection.Open();
|
||||
|
||||
#pragma warning disable CA2100 // Review SQL queries for security vulnerabilities
|
||||
using SqlCommand command = new SqlCommand($"TRUNCATE TABLE [{seoDataType}]", connection);
|
||||
command.ExecuteNonQuery();
|
||||
#pragma warning restore CA2100 // Review SQL queries for security vulnerabilities
|
||||
}
|
||||
|
||||
public void BulkCopy(SeoDataType seoDataType, DataTable dataTable)
|
||||
{
|
||||
using SqlConnection connection = new SqlConnection(_connectionString);
|
||||
connection.Open();
|
||||
|
||||
using SqlBulkCopy bulk = new SqlBulkCopy(connection)
|
||||
{
|
||||
DestinationTableName = seoDataType.ToString(),
|
||||
BulkCopyTimeout = 14400
|
||||
};
|
||||
|
||||
bulk.WriteToServer(dataTable);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user