public async Task Execute(string site, OutputSettings output) { // var output = appConfig.GetSection("output").Get<OutputSettings>(); Directory.CreateDirectory(output.ReportDirectory); var logger = Logs.Factory.CreateLogger <CheckLinkJob>(); logger.LogInformation($"Saving report to {output.ReportFilePath}"); var links = await LinkChecker.GetLinks(site); var checkedLinks = await LinkChecker.Check(links); using (var file = File.CreateText(output.ReportFilePath)) using (var linksDb = new LinksDb()) { foreach (var link in checkedLinks.OrderBy(l => l.Exists)) { var status = link.IsMissing ? "Missing" : "Ok"; await file.WriteLineAsync($"{status} - {link.Link}"); await linksDb.AddAsync(link); } await linksDb.SaveChangesAsync(); } }
public CheckLinkJob(ILogger <CheckLinkJob> logger, IOptions <OutputSettings> outputOptions, IOptions <SiteSettings> siteOptions, LinkChecker linkChecker) { _Logger = logger; _Logger.LogInformation($"{Guid.NewGuid()}"); _Output = outputOptions.Value; _Site = siteOptions.Value; _LinkChecker = linkChecker; }
public CheckLinksJob( ILogger <CheckLinksJob> logger, IOptions <OutputSettings> output, IOptions <SiteSettings> siteSettings, LinkChecker linkChecker) { _logger = logger; _output = output.Value; _siteSettings = siteSettings.Value; _linkChecker = linkChecker; }
static void Main(string[] args) { var site = "https://g0t4.github.io/pluralsight-dotnet-core-xplat-apps"; var client = new HttpClient(); var body = client.GetStringAsync(site); Console.WriteLine(body.Result); var links = LinkChecker.GetLinks(body.Result); links.ToList().ForEach(Console.WriteLine); }
public static void Main(string[] args) { var site = "https://lketema.github.io/"; // site = "https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/"; var client = new HttpClient(); // the below dumps content of site var bodyReturned = client.GetStringAsync(site); var links = LinkChecker.GetLinks(bodyReturned.Result); var result = LinkChecker.CheckLinks(links); LogToFile(result); }
static void Main(string[] args) { var site = "https://www.google.com"; var client = new HttpClient(); var body = client.GetStringAsync(site); Console.WriteLine(body.Result); Console.WriteLine(); Console.WriteLine("Links"); var links = LinkChecker.GetLinks(body.Result); links.ToList().ForEach(Console.WriteLine); }
static void Main(string[] args) { var config = new Config(args); Logs.Init(config.ConfigurationRoot); var logger = Logs.Factory.CreateLogger <Program>(); Directory.CreateDirectory(config.Output.GetReportDirectory()); logger.LogInformation(200, $"Saving report to {config.Output.GetReportDirectory()}"); var client = new HttpClient(); var body = client.GetStringAsync(config.Site); logger.LogDebug(body.Result); logger.LogInformation("Links"); var links = LinkChecker.GetLinks(config.Site, body.Result); links.ToList().ForEach(Console.WriteLine); var checkedLinks = LinkChecker.CheckLinks(links); using (var file = File.CreateText(config.Output.GetReportFilePath())) using (var linksDb = new LinksDb()) { foreach (var link in checkedLinks.OrderBy(l => l.Exists)) { var status = link.IsMissing ? "Missing" : "OK"; file.WriteLine($"{status} - {link.Link}"); linksDb.Links.Add(link); Console.WriteLine("{0} {1}", link.Id, link.Link); } /** * docker run -d --name sqllinux-netcore -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=1Secure*Password1' -e 'MSSQL_PID=Enterprise' -p 1433:1433 -d microsoft/mssql-server-linux:2017-latest * docker hub: https://hub.docker.com/r/microsoft/mssql-server-linux * docker run -d --name mysql-netcore -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=Links -p 3306:3306 mysql */ linksDb.SaveChanges(); } }
static void Main(string[] args) { // it is a convention to pass the applications fully qualified class name // as an overload into the logger to aid in more descriptive logging since it includes // the namespace and everything var config = new Config(args); Logs.Init(config.ConfigurationRoot); var logger = Logs.Factory.CreateLogger <Program>(); Directory.CreateDirectory(config.Output.GetReportDirectory()); // could also do configuration.GetSection("output").Get<OutputSettings>(); and this would also skipping creating the new outputsettings object logger.LogInformation($"Saving file to {config.Output.GetReportFilePath()}"); var client = new HttpClient(); var body = client.GetStringAsync(config.Site); logger.LogDebug(body.Result); var links = LinkChecker.GetLinks(config.Site, body.Result); // write out links // File.WriteAllLines(outputPath, links); var checkedLinks = LinkChecker.CheckLinks(links); using (var file = File.CreateText(config.Output.GetReportFilePath())) using (var linksDb = new LinksDb()) // using is like a try block, allows the system to drop the connection if something does wrong { foreach (var link in checkedLinks.OrderBy(l => l.IsMissing)) { var status = link.IsMissing ? "missing" : "ok"; file.WriteLine($"{status} - {link.Link}"); linksDb.Links.Add(link); } linksDb.SaveChanges(); } }