hikvision-sync-service/BusinessLogging.cs

88 lines
3.1 KiB
C#

using System;
using System.Globalization;
using System.IO;
using System.Text;
namespace HikvisionAttendanceService;
/// <summary>Running totals for the end-of-run business SUMMARY block.</summary>
internal sealed class BizSessionTotals
{
public int MachinesProcessed;
public int MachinesConnected;
public int MachinesFailed;
public int AttendanceInserted;
public int AttendanceFailed;
public int UsersAdded;
public int UsersUpdated;
public int UsersRemoved;
public int TemplatesSaved;
public int TemplatesFailed;
public DateTime StartedAt = DateTime.Now;
public string FormatSummaryBlock()
{
var duration = DateTime.Now - StartedAt;
var sb = new StringBuilder();
sb.AppendLine("================================================");
sb.AppendLine();
sb.AppendLine("SUMMARY");
sb.AppendLine();
sb.AppendLine("Machines Processed : " + MachinesProcessed);
sb.AppendLine("Machines Connected : " + MachinesConnected);
sb.AppendLine("Machines Failed : " + MachinesFailed);
sb.AppendLine();
sb.AppendLine("Attendance Inserted : " + AttendanceInserted);
sb.AppendLine("Attendance Failed : " + AttendanceFailed);
sb.AppendLine();
sb.AppendLine("Users Added : " + UsersAdded);
sb.AppendLine("Users Updated : " + UsersUpdated);
sb.AppendLine("Users Removed : " + UsersRemoved);
sb.AppendLine();
sb.AppendLine("Templates Saved : " + TemplatesSaved);
sb.AppendLine("Templates Failed : " + TemplatesFailed);
sb.AppendLine();
sb.AppendLine("Duration : " + duration.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
sb.AppendLine();
sb.AppendLine("================================================");
return sb.ToString();
}
}
internal enum BizChannel
{
Attendance,
UserSync,
Template,
Unreachable
}
internal static class BizFriendlyReasons
{
public static string FromStage(ConnectivityFailureStage stage, string? detail = null)
{
switch (stage)
{
case ConnectivityFailureStage.InvalidIp:
return "Invalid IP address.";
case ConnectivityFailureStage.PingFailed:
return "Device is not responding to network requests.";
case ConnectivityFailureStage.TcpPortClosed:
return "TCP Port 8000 is closed.";
case ConnectivityFailureStage.SdkLoginTimeout:
return "Network timeout.";
case ConnectivityFailureStage.InvalidCredentials:
return "Incorrect username or password.";
case ConnectivityFailureStage.SdkRejected:
return "Device refused the SDK connection.";
default:
if (!string.IsNullOrWhiteSpace(detail))
return detail!.Trim();
return "Device is powered off or unreachable.";
}
}
public static string FormatTime(DateTime dt) =>
dt.ToString("M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);
}