techgarage-ir.MTWireGuard/Mapper/MappingProfile.cs
2023-03-03 23:24:18 +03:30

114 lines
6.1 KiB
C#

using AutoMapper;
using Microsoft.EntityFrameworkCore;
using MTWireGuard.Models;
using MTWireGuard.Models.Mikrotik;
namespace MTWireGuard.Mapper
{
public class MappingProfile : Profile
{
public MappingProfile()
{
// Logs
CreateMap<Log, LogViewModel>()
.ForMember(dest => dest.Id,
opt => opt.MapFrom(src => Convert.ToUInt64(src.Id.Substring(1), 16)))
.ForMember(dest =>dest.Topics,
opt => opt.MapFrom(src => FormatTopics(src.Topics)));
// Server Traffic
CreateMap<ServerTraffic, ServerTrafficViewModel>()
.ForMember(dest => dest.Name,
opt => opt.MapFrom(src => src.Name))
.ForMember(dest => dest.Type,
opt => opt.MapFrom(src => src.Type))
.ForMember(dest => dest.Upload,
opt => opt.MapFrom(src => Helper.ConvertByteSize(Convert.ToInt64(src.TX), 2)))
.ForMember(dest => dest.Download,
opt => opt.MapFrom(src => Helper.ConvertByteSize(Convert.ToInt64(src.RX), 2)))
.ForMember(dest => dest.UploadBytes,
opt => opt.MapFrom(src => Convert.ToInt64(src.TX)))
.ForMember(dest => dest.DownloadBytes,
opt => opt.MapFrom(src => Convert.ToInt64(src.RX)));
// Mikrotik HWInfo
CreateMap<MTInfo, MTInfoViewModel>()
.ForMember(dest => dest.Architecture,
opt => opt.MapFrom(src => src.ArchitectureName))
.ForMember(dest => dest.CPUCount,
opt => opt.MapFrom(src => Convert.ToByte(src.CPUCount)))
.ForMember(dest => dest.CPUFrequency,
opt => opt.MapFrom(src => Convert.ToInt16(src.CPUFrequency)))
.ForMember(dest => dest.CPULoad,
opt => opt.MapFrom(src => Convert.ToByte(src.CPULoad)))
.ForMember(dest => dest.TotalHDDBytes,
opt => opt.MapFrom(src => Convert.ToInt64(src.TotalHDDSpace)))
.ForMember(dest => dest.FreeHDDBytes,
opt => opt.MapFrom(src => Convert.ToInt64(src.FreeHDDSpace)))
.ForMember(dest => dest.UsedHDDBytes,
opt => opt.MapFrom(src => Convert.ToInt64(src.TotalHDDSpace) - Convert.ToInt64(src.FreeHDDSpace)))
.ForMember(dest => dest.FreeHDDPercentage,
opt => opt.MapFrom(src => (byte)(Convert.ToInt64(src.FreeHDDSpace) * 100 / Convert.ToInt64(src.TotalHDDSpace))))
.ForMember(dest => dest.TotalRAMBytes,
opt => opt.MapFrom(src => Convert.ToInt64(src.TotalMemory)))
.ForMember(dest => dest.FreeRAMBytes,
opt => opt.MapFrom(src => Convert.ToInt64(src.FreeMemory)))
.ForMember(dest => dest.UsedRAMBytes,
opt => opt.MapFrom(src => Convert.ToInt64(src.TotalMemory) - Convert.ToInt64(src.FreeMemory)))
.ForMember(dest => dest.FreeRAMPercentage,
opt => opt.MapFrom(src => (byte)(Convert.ToInt64(src.FreeMemory) * 100 / Convert.ToInt64(src.TotalMemory))))
.ForMember(dest => dest.TotalHDD,
opt => opt.MapFrom(src => Helper.ConvertByteSize(Convert.ToInt64(src.TotalHDDSpace), 2)))
.ForMember(dest => dest.FreeHDD,
opt => opt.MapFrom(src => Helper.ConvertByteSize(Convert.ToInt64(src.FreeHDDSpace), 2)))
.ForMember(dest => dest.UsedHDD,
opt => opt.MapFrom(src => Helper.ConvertByteSize(Convert.ToInt64(src.TotalHDDSpace) - Convert.ToInt64(src.FreeHDDSpace), 2)))
.ForMember(dest => dest.TotalRAM,
opt => opt.MapFrom(src => Helper.ConvertByteSize(Convert.ToInt64(src.TotalMemory), 2)))
.ForMember(dest => dest.FreeRAM,
opt => opt.MapFrom(src => Helper.ConvertByteSize(Convert.ToInt64(src.FreeMemory), 2)))
.ForMember(dest => dest.UsedRAM,
opt => opt.MapFrom(src => Helper.ConvertByteSize(Convert.ToInt64(src.TotalMemory) - Convert.ToInt64(src.FreeMemory), 2)))
.ForMember(dest => dest.UPTime,
opt => opt.MapFrom(src => src.Uptime.
// Replace('d', ' ').
Replace('h', ':').
Replace('m', ':').
Replace("s", "")))
;
// Router Identity
CreateMap<MTIdentity, MTIdentityViewModel>();
// Active Users
CreateMap<ActiveUser, ActiveUserViewModel>()
.ForMember(dest => dest.Id,
opt => opt.MapFrom(src => Convert.ToInt16(src.Id.Substring(1), 16)))
.ForMember(dest => dest.LoggedIn,
opt => opt.MapFrom(src => src.When));
// Active Jobs
CreateMap<Job, JobViewModel>()
.ForMember(dest => dest.Id,
opt => opt.MapFrom(src => Convert.ToInt16(src.Id.Substring(1), 16)))
.ForMember(dest => dest.NextId,
opt => opt.MapFrom(src => Convert.ToInt16(src.NextId.Substring(1), 16)))
.ForMember(dest => dest.Policies,
opt => opt.MapFrom(src => src.Policy.Split(',', StringSplitOptions.None).ToList()));
// Item Creation
CreateMap<CreationStatus, CreationResult>()
.ForMember(dest => dest.Code,
opt => opt.MapFrom(src => (src.Success) ? "200" : src.Code.ToString()))
.ForMember(dest => dest.Title,
opt => opt.MapFrom(src => (src.Success) ? "Done" : src.Message))
.ForMember(dest => dest.Description,
opt => opt.MapFrom(src => (src.Success) ? "Item created/updated successfully." : src.Detail));
}
private static List<string> FormatTopics(string topics)
{
return topics.Split(',', StringSplitOptions.TrimEntries).Select(t => t = Helper.UpperCaseTopics.Contains(t) ? t.ToUpper() : t.FirstCharToUpper()).ToList();
}
}
}