Name Message Date
📁 Properties Add web dashboard for viewing monitor status and detections. 5 hours ago
📁 Protos Initialize project 1 month ago
📁 wwwroot Add multi-monitoring management with scan triggers and editing. 5 hours ago
📄 .containerfile Containerize 10 days ago
📄 .dockerignore Containerize 10 days ago
📄 .editorconfig Initialize project 1 month ago
📄 .gitignore Remove database file from repository 10 days ago
📄 appsettings.Development.json Fix Claudes mess 11 days ago
📄 appsettings.json Fix Claudes mess 11 days ago
📄 BfiMonitor.csproj Add web dashboard for viewing monitor status and detections. 5 hours ago
📄 BfiMonitor.slnx Initialize project 1 month ago
📄 CheckMonitoringJob.cs Add multi-monitoring management with scan triggers and editing. 5 hours ago
📄 dotnet-tools.json Initialize project 1 month ago
📄 global.json Fix Claudes mess 11 days ago
📄 MonitoringCheckScheduler.cs Add multi-monitoring management with scan triggers and editing. 5 hours ago
📄 MonitorOptions.cs Add multi-monitoring management with scan triggers and editing. 5 hours ago
📄 OpenTelemetryExtensions.cs Add web dashboard for viewing monitor status and detections. 5 hours ago
📄 packages.lock.json Add web dashboard for viewing monitor status and detections. 5 hours ago
📄 PlaywrightBrowserService.cs Use Playwright settings from Lukas 10 days ago
📄 Program.cs Add multi-monitoring management with scan triggers and editing. 5 hours ago
📄 ScheduleMonitoringChecksJob.cs Add multi-monitoring management with scan triggers and editing. 5 hours ago
📄 ScreeningRepository.cs Add multi-monitoring management with scan triggers and editing. 5 hours ago
📄 SendSmsJob.cs Add tracing 10 days ago
📄 Tracing.cs Add multi-monitoring management with scan triggers and editing. 5 hours ago
📄 SendSmsJob.cs
using System.Diagnostics;
using BfiMonitor;
using HuaweiWifiSms.Grpc;
using Microsoft.Extensions.Logging;
using Quartz;

internal sealed class SendSmsJob(SmsSender.SmsSenderClient smsSender, ILogger<SendSmsJob> logger) : IJob
{
    public static JobKey Key { get; } = JobKey.Create(nameof(SendSmsJob));

    public async Task Execute(IJobExecutionContext context)
    {
        var phoneNumber = context.MergedJobDataMap.GetString("phoneNumber")!;
        var message = context.MergedJobDataMap.GetString("message")!;

        using var activity = Tracing.StartSendSms(phoneNumber);

        try
        {
            var response = await smsSender.SendSmsAsync(
                new SmsRequest { RecipientPhoneNumber = phoneNumber, Content = message },
                cancellationToken: context.CancellationToken
            );

            if (response.Status is SmsStatus.Success)
            {
                logger.LogSmsSent(phoneNumber);
                activity?.SetStatus(ActivityStatusCode.Ok);
            }
            else
            {
                logger.LogSmsFailed(phoneNumber, response.Status);
                activity?.SetStatus(ActivityStatusCode.Error, $"Failure response {response.Status}");
            }
        }
        catch (Exception ex)
        {
            activity?.SetStatus(ActivityStatusCode.Error, ex.Message);
            activity?.AddException(ex);
            throw;
        }
    }
}

internal static partial class SendSmsJobLoggerExtensions
{
    [LoggerMessage(LogLevel.Information, "Successfully sent SMS to {PhoneNumber}")]
    public static partial void LogSmsSent(this ILogger logger, string phoneNumber);

    [LoggerMessage(LogLevel.Error, "Failed to send SMS to {PhoneNumber} with status {SmsStatus}")]
    public static partial void LogSmsFailed(this ILogger logger, string phoneNumber, SmsStatus smsStatus);
}