From ba51677d98e45b7371f75c0a6d1bcc46e429dc91 Mon Sep 17 00:00:00 2001 From: Guillermo Marcel Date: Mon, 17 Feb 2025 22:20:51 -0300 Subject: [PATCH] feat: add docker support --- src/CasaBot/AutoScan/AutoScan.csproj | 2 +- src/CasaBot/AutoScan/AutoScanApp.cs | 5 ++ .../AutoScan/DependencyInjectionExtensions.cs | 7 +- src/CasaBot/AutoScan/Models/ShinobiFetch.cs | 34 ++++----- src/CasaBot/CasaBotApp/BotHandler.cs | 5 ++ src/CasaBot/CasaBotApp/CasaBotApp.csproj | 1 + src/CasaBot/CasaBotApp/Dockerfile | 71 +++++++++++++++---- src/CasaBot/CasaBotApp/Program.cs | 5 +- 8 files changed, 89 insertions(+), 41 deletions(-) diff --git a/src/CasaBot/AutoScan/AutoScan.csproj b/src/CasaBot/AutoScan/AutoScan.csproj index aa345e3..810204d 100644 --- a/src/CasaBot/AutoScan/AutoScan.csproj +++ b/src/CasaBot/AutoScan/AutoScan.csproj @@ -10,7 +10,7 @@ - + diff --git a/src/CasaBot/AutoScan/AutoScanApp.cs b/src/CasaBot/AutoScan/AutoScanApp.cs index 54bf240..3f48edf 100644 --- a/src/CasaBot/AutoScan/AutoScanApp.cs +++ b/src/CasaBot/AutoScan/AutoScanApp.cs @@ -25,6 +25,11 @@ public class AutoScanApp public async Task Run(CancellationToken cancellationToken) { + if (!_options.Enabled) + { + _logger.LogWarning("AutoScanApp is disabled!"); + return; + } _logger.LogInformation("AutoScanApp is running..."); var at = DateTime.Now.AddSeconds(10); diff --git a/src/CasaBot/AutoScan/DependencyInjectionExtensions.cs b/src/CasaBot/AutoScan/DependencyInjectionExtensions.cs index 32c2147..bb27a5b 100644 --- a/src/CasaBot/AutoScan/DependencyInjectionExtensions.cs +++ b/src/CasaBot/AutoScan/DependencyInjectionExtensions.cs @@ -16,13 +16,10 @@ public static class DependencyInjectionExtensions services.AddSingleton(); services.AddSingleton(); - services.AddQuartz(q => - { - q.UseMicrosoftDependencyInjectionJobFactory(); - }); + services.AddQuartz(); services.AddTransient(); - services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true); + // services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true); services.AddSingleton(sp => { diff --git a/src/CasaBot/AutoScan/Models/ShinobiFetch.cs b/src/CasaBot/AutoScan/Models/ShinobiFetch.cs index 319a8ed..0f5055d 100644 --- a/src/CasaBot/AutoScan/Models/ShinobiFetch.cs +++ b/src/CasaBot/AutoScan/Models/ShinobiFetch.cs @@ -3,37 +3,37 @@ namespace AutoScan.Models; //Bulk converted from endpoint response. TODO: Cleanup later, format properties names public class VideoStorageLocations { - public string dir { get; set; } + public string dir { get; set; } = ""; } public class VideoActionLink { - public string changeToRead { get; set; } - public string changeToUnread { get; set; } - public string deleteVideo { get; set; } + public string changeToRead { get; set; } = ""; + public string changeToUnread { get; set; } = ""; + public string deleteVideo { get; set; } = ""; } public class FetchVideoResponse { - public bool endIsStartTo { get; set; } - public bool ok { get; set; } - public List videos { get; set; } + public bool endIsStartTo { get; set; } = false; + public bool ok { get; set; } = true; + public List videos { get; set; } = []; } public class VideoDetail { - public string actionUrl { get; set; } + public string actionUrl { get; set; } = ""; public int archive { get; set; } - public VideoStorageLocations details { get; set; } + public VideoStorageLocations? details { get; set; } public DateTime end { get; set; } - public string ext { get; set; } - public string filename { get; set; } - public string href { get; set; } - public string ke { get; set; } - public VideoActionLink links { get; set; } - public string mid { get; set; } - public string objects { get; set; } - public object saveDir { get; set; } + public string ext { get; set; } = ""; + public string filename { get; set; } = ""; + public string href { get; set; } = ""; + public string ke { get; set; } = ""; + public VideoActionLink? links { get; set; } + public string mid { get; set; } = ""; + public string objects { get; set; } = ""; + public object? saveDir { get; set; } public int size { get; set; } public int status { get; set; } public DateTime time { get; set; } diff --git a/src/CasaBot/CasaBotApp/BotHandler.cs b/src/CasaBot/CasaBotApp/BotHandler.cs index 4115069..9deb410 100644 --- a/src/CasaBot/CasaBotApp/BotHandler.cs +++ b/src/CasaBot/CasaBotApp/BotHandler.cs @@ -32,6 +32,11 @@ public class BotHandler public void Start(CancellationToken cancellationToken) { _logger.LogInformation("Starting bot..."); + if (string.IsNullOrEmpty(_telegramOptions.BotToken)) + { + _logger.LogError("Bot token is not provided"); + return; + } _bot = new TelegramBotClient(_telegramOptions.BotToken, cancellationToken: cancellationToken); diff --git a/src/CasaBot/CasaBotApp/CasaBotApp.csproj b/src/CasaBot/CasaBotApp/CasaBotApp.csproj index 3172851..62133d6 100644 --- a/src/CasaBot/CasaBotApp/CasaBotApp.csproj +++ b/src/CasaBot/CasaBotApp/CasaBotApp.csproj @@ -6,6 +6,7 @@ enable enable Linux + true diff --git a/src/CasaBot/CasaBotApp/Dockerfile b/src/CasaBot/CasaBotApp/Dockerfile index f1fd035..68a6570 100644 --- a/src/CasaBot/CasaBotApp/Dockerfile +++ b/src/CasaBot/CasaBotApp/Dockerfile @@ -1,21 +1,62 @@ -FROM mcr.microsoft.com/dotnet/runtime:9.0 AS base -USER $APP_UID -WORKDIR /app +#FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/runtime:9.0 AS base +#ARG TARGETARCH +#USER root +#WORKDIR /app +# +#FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build +#ARG BUILD_CONFIGURATION=Release +#WORKDIR /src +#COPY ["CasaBotApp/CasaBotApp.csproj", "CasaBotApp/"] +#COPY ["AutoScan/AutoScan.csproj", "AutoScan/"] +#RUN dotnet restore "CasaBotApp/CasaBotApp.csproj" -a $TARGETARCH +#COPY . . +#WORKDIR "/src/CasaBotApp" +#RUN dotnet build "CasaBotApp.csproj" -c $BUILD_CONFIGURATION -o /app/build +# +#FROM build AS publish +#ARG BUILD_CONFIGURATION=Release +#RUN dotnet publish "CasaBotApp.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false +# +#FROM base AS final +# +## Install pyhon and run "pipx install dvr-scan[opencv]" to install dependency +##RUN apt-get update && apt-get install -y python3 python3-pip python3-venv +##RUN python3 -m pip install dvr-scan[opencv] --break-system-packages +##RUN pip3 install pipx --break-system-packages +##RUN pipx install dvr-scan[opencv-headless] +# +#WORKDIR /app +#COPY --from=publish /app/publish . +##ENTRYPOINT ["dotnet", "CasaBotApp.dll"] +# +## interactive shell +#CMD ["/bin/bash"] -FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build -ARG BUILD_CONFIGURATION=Release -WORKDIR /src + + + +# Learn about building .NET container images: +# https://github.com/dotnet/dotnet-docker/blob/main/samples/README.md +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:9.0-noble AS build +ARG TARGETARCH +WORKDIR /source + +# Copy project file and restore as distinct layers +#COPY --link *.csproj . COPY ["CasaBotApp/CasaBotApp.csproj", "CasaBotApp/"] -RUN dotnet restore "CasaBotApp/CasaBotApp.csproj" -COPY . . -WORKDIR "/src/CasaBotApp" -RUN dotnet build "CasaBotApp.csproj" -c $BUILD_CONFIGURATION -o /app/build +COPY ["AutoScan/AutoScan.csproj", "AutoScan/"] +RUN dotnet restore "CasaBotApp/CasaBotApp.csproj" -a $TARGETARCH -FROM build AS publish -ARG BUILD_CONFIGURATION=Release -RUN dotnet publish "CasaBotApp.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false +# Copy source code and publish app +COPY --link . . +RUN dotnet publish "CasaBotApp/CasaBotApp.csproj" -a $TARGETARCH --no-restore -o /app -FROM base AS final + +# Runtime stage +#FROM mcr.microsoft.com/dotnet/runtime:9.0-noble +FROM mcr.microsoft.com/dotnet/aspnet:9.0-noble WORKDIR /app -COPY --from=publish /app/publish . +COPY --link --from=build /app . +USER $APP_UID ENTRYPOINT ["dotnet", "CasaBotApp.dll"] +#CMD ["/bin/bash"] \ No newline at end of file diff --git a/src/CasaBot/CasaBotApp/Program.cs b/src/CasaBot/CasaBotApp/Program.cs index cd3c6d0..934b395 100644 --- a/src/CasaBot/CasaBotApp/Program.cs +++ b/src/CasaBot/CasaBotApp/Program.cs @@ -20,7 +20,6 @@ services.AddSingleton(configuration); services.AddLogging(builder => { builder.AddConfiguration(configuration.GetSection("Logging")); - // builder.AddConsole(); //add time to logs builder.AddSimpleConsole(options => { @@ -48,8 +47,8 @@ var autoScanApp = serviceProvider.GetService()!; using var cts = new CancellationTokenSource(); -autoScanApp.Run(cts.Token); -// botHandler.Start(cts.Token); +_ = autoScanApp.Run(cts.Token); +botHandler.Start(cts.Token); _ = SendMessageToSubscribers(cts.Token);