This is it. Don't get scared now. (Converted to Ratermania.Automation)

This commit is contained in:
2021-01-27 21:04:53 -05:00
parent b0935e9214
commit e1be26d798
29 changed files with 1694 additions and 1025 deletions

View File

@@ -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)

View File

@@ -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);
}
}
}

View File

@@ -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)

View 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);
}
}
}