From 6b8297f20876b89add42e814b6e2cae91555ab78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20H=C3=A4felfinger?= Date: Mon, 29 Oct 2018 23:52:31 +0100 Subject: [PATCH] added some logoutputs --- Controllers/PlayListController.cs | 30 ++++++++++++++++++++++---- LoggingEvents.cs | 10 +++++++++ Program.cs | 7 ++++++ Startup.cs | 36 ++++++++++++++++--------------- appsettings.json | 10 +++++---- 5 files changed, 68 insertions(+), 25 deletions(-) create mode 100644 LoggingEvents.cs diff --git a/Controllers/PlayListController.cs b/Controllers/PlayListController.cs index 3a663c0..90fd1f0 100644 --- a/Controllers/PlayListController.cs +++ b/Controllers/PlayListController.cs @@ -5,6 +5,7 @@ using System.Text.RegularExpressions; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; namespace tv7playlist.Controllers { @@ -14,16 +15,23 @@ namespace tv7playlist.Controllers { private const string PlayListContentType = "audio/mpegurl"; + /// + /// This is the regex used to build up the proxy url. + /// The first part (udp://@) is ignored while generating the final url + /// The multicast address is expected to be a ip-address with a port and is reused + /// private static readonly Regex MultiCastRegex = new Regex(@"(udp\:\/\/@)([0-9.:]+)", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase); private readonly string _downloadFileName; + private readonly ILogger _logger; private readonly string _proxyUrl; private readonly string _tv7Url; - public PlayListController(IConfiguration configuration) + public PlayListController(ILogger logger, IConfiguration configuration) { + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); if (configuration == null) throw new ArgumentNullException(nameof(configuration)); var appConfig = configuration.Get(); @@ -34,14 +42,26 @@ namespace tv7playlist.Controllers } [HttpGet] - public async Task Get() + public async Task Get() { using (var httpClient = new HttpClient()) { + _logger.LogInformation(LoggingEvents.Playlist, "Downloading playlist from {tv7url}", _tv7Url); var tv7Response = await httpClient.GetAsync(_tv7Url); + if (!tv7Response.IsSuccessStatusCode) + { + _logger.LogWarning(LoggingEvents.PlaylistNotFound, + "Could not download playlist from {tv7url}. The StatusCode was: {StatusCode}", _tv7Url, + tv7Response.StatusCode); + return StatusCode((int) tv7Response.StatusCode); + } + var modifiedPlaylist = await BuildProxyPlaylist(tv7Response); + _logger.LogInformation(LoggingEvents.Playlist, "Sending updated playlist {filename}", + _downloadFileName); + return new FileStreamResult(modifiedPlaylist, PlayListContentType) { FileDownloadName = _downloadFileName @@ -53,6 +73,7 @@ namespace tv7playlist.Controllers { var outStream = new MemoryStream(); var outWriter = new StreamWriter(outStream); + _logger.LogInformation(LoggingEvents.Playlist, "Building m3u file content"); using (var tv7ReadStream = await tv7Response.Content.ReadAsStreamAsync()) using (var reader = new StreamReader(tv7ReadStream)) @@ -60,8 +81,9 @@ namespace tv7playlist.Controllers while (!reader.EndOfStream) { var line = await reader.ReadLineAsync(); - line = MultiCastRegex.Replace(line, $"{_proxyUrl}/$2/"); - outWriter.WriteLine(line); + var proxyLine = MultiCastRegex.Replace(line, $"{_proxyUrl}/$2/"); + outWriter.WriteLine(proxyLine); + _logger.LogDebug(LoggingEvents.Playlist, "Transformed {src} to {dst}", line, proxyLine); } await outWriter.FlushAsync(); diff --git a/LoggingEvents.cs b/LoggingEvents.cs new file mode 100644 index 0000000..87ffe62 --- /dev/null +++ b/LoggingEvents.cs @@ -0,0 +1,10 @@ +namespace tv7playlist +{ + public class LoggingEvents + { + public const int Startup = 1000; + public const int Playlist = 1001; + + public const int PlaylistNotFound = 4000; + } +} \ No newline at end of file diff --git a/Program.cs b/Program.cs index c023da7..0741b35 100644 --- a/Program.cs +++ b/Program.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Logging; namespace tv7playlist { @@ -15,6 +16,12 @@ namespace tv7playlist public static IWebHostBuilder CreateWebHostBuilder(string[] args) { return WebHost.CreateDefaultBuilder(args) + .ConfigureLogging((hostingContext, logging) => + { + logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging")); + logging.AddConsole(); + logging.AddDebug(); + }) .UseStartup(); } } diff --git a/Startup.cs b/Startup.cs index a3b1f20..08a705b 100644 --- a/Startup.cs +++ b/Startup.cs @@ -1,23 +1,20 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.HttpsPolicy; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; namespace tv7playlist { public class Startup { - public Startup(IConfiguration configuration) + private readonly ILogger _logger; + + public Startup(IConfiguration configuration, ILogger logger) { Configuration = configuration; + _logger = logger; } public IConfiguration Configuration { get; } @@ -33,15 +30,20 @@ namespace tv7playlist // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } - else - { - app.UseHsts(); - } + LogConfiguration(); + + if (env.IsDevelopment()) app.UseDeveloperExceptionPage(); + app.UseMvc(); } + + private void LogConfiguration() + { + var appConfig = Configuration.Get(); + _logger.LogInformation(LoggingEvents.Startup, "Using TV7 URL: {TV7Url}", appConfig.TV7Url); + _logger.LogInformation(LoggingEvents.Startup, "Using Udpxy URL: {UdpxyUrl}", appConfig.UdpxyUrl); + _logger.LogInformation(LoggingEvents.Startup, "Using DownloadFileName: {DownloadFileName}", + appConfig.DownloadFileName); + } } -} +} \ No newline at end of file diff --git a/appsettings.json b/appsettings.json index b0a37b7..78df315 100644 --- a/appsettings.json +++ b/appsettings.json @@ -1,11 +1,13 @@ { "Logging": { "LogLevel": { - "Default": "Warning" + "Default": "Information", + "System": "Information", + "Microsoft": "Information" } }, "AllowedHosts": "*", - "TV7Url":"https://api.init7.net/tvchannels.m3u", - "UdpxyUrl":"http://192.168.15.2:4022/udp", - "DownloadFileName":"PlaylistTV7udpxy.m3u" + "TV7Url": "https://api.init7.net/tvchannels.m3u", + "UdpxyUrl": "http://192.168.15.2:4022/udp", + "DownloadFileName": "PlaylistTV7udpxy.m3u" }