Move virual media chart to ChartJS.

This commit is contained in:
2019-11-03 04:45:04 +00:00
parent a43e7b9374
commit f7441e1b9b
2 changed files with 44 additions and 56 deletions

View File

@@ -183,67 +183,12 @@ namespace DiscImageChef.Server.Controllers
} }
if(realMedia.Count > 0) if(realMedia.Count > 0)
{
ViewBag.repRealMedia = ViewBag.repRealMedia =
realMedia.OrderBy(media => media.Type).ThenBy(media => media.SubType).ToList(); realMedia.OrderBy(media => media.Type).ThenBy(media => media.SubType).ToList();
List<PieSeriesData> realMediaPieData = new List<PieSeriesData>();
decimal totalRealMediaCount = realMedia.Sum(o => o.Count);
decimal top10RealMediaCount = 0;
foreach(MediaItem realMediaItem in realMedia.OrderByDescending(o => o.Count).Take(10))
{
top10RealMediaCount += realMediaItem.Count;
realMediaPieData.Add(new PieSeriesData
{
Name = $"{realMediaItem.Type} ({realMediaItem.SubType})",
Y = (double?)(realMediaItem.Count / totalRealMediaCount)
});
}
realMediaPieData.Add(new PieSeriesData
{
Name = "Other",
Y = (double?)((totalRealMediaCount - top10RealMediaCount) / totalRealMediaCount),
Sliced = true, Selected = true
});
ViewData["realMediaPieData"] = realMediaPieData;
}
if(virtualMedia.Count > 0) if(virtualMedia.Count > 0)
{
ViewBag.repVirtualMedia = ViewBag.repVirtualMedia =
virtualMedia.OrderBy(media => media.Type).ThenBy(media => media.SubType).ToList(); virtualMedia.OrderBy(media => media.Type).ThenBy(media => media.SubType).ToList();
List<PieSeriesData> virtualMediaPieData = new List<PieSeriesData>();
decimal totalVirtualMediaCount = virtualMedia.Sum(o => o.Count);
decimal top10VirtualMediaCount = 0;
foreach(MediaItem virtualMediaItem in virtualMedia.OrderByDescending(o => o.Count).Take(10))
{
top10VirtualMediaCount += virtualMediaItem.Count;
virtualMediaPieData.Add(new PieSeriesData
{
Name = $"{virtualMediaItem.Type} ({virtualMediaItem.SubType})",
Y = (double?)(virtualMediaItem.Count / totalVirtualMediaCount)
});
}
virtualMediaPieData.Add(new PieSeriesData
{
Name = "Other",
Y = (double?)((totalVirtualMediaCount - top10VirtualMediaCount) /
totalVirtualMediaCount),
Sliced = true, Selected = true
});
ViewData["virtualMediaPieData"] = virtualMediaPieData;
}
} }
if(ctx.DeviceStats.Any()) if(ctx.DeviceStats.Any())
@@ -554,5 +499,41 @@ namespace DiscImageChef.Server.Controllers
return Json(result); return Json(result);
} }
public IActionResult GetVirtualMediaData()
{
Media[] virtualMedias = ctx.Medias.Where(o => !o.Real).OrderByDescending(o => o.Count).Take(10).ToArray();
foreach (Media media in virtualMedias)
{
try
{
MediaType.
MediaTypeToString((CommonTypes.MediaType)Enum.Parse(typeof(CommonTypes.MediaType), media.Type),
out string type, out string subtype);
media.Type = $"{type} ({subtype})";
}
catch
{
// Could not get media type/subtype pair from type, so just leave it as is
}
}
string[][] result =
{
virtualMedias.Select(v => v.Type).ToArray(),
virtualMedias.Select(x => x.Count.ToString()).ToArray()
};
if(result[0].Length < 10)
return Json(result);
result[0][9] = "Other";
result[1][9] = (ctx.Medias.Where(o => !o.Real).Sum(o => o.Count) - result[1].Take(9).Sum(long.Parse)).ToString();
return Json(result);
}
} }
} }

View File

@@ -345,7 +345,8 @@
@if (ViewBag.repVirtualMedia != null) @if (ViewBag.repVirtualMedia != null)
{ {
<div class="container mt-3" id="divVirtualMedia"> <div class="container mt-3" id="divVirtualMedia">
<div class="container" id="virtualMediaChart"> <div class="container">
<canvas id="virtualMediaChart"></canvas>
</div> </div>
<div class="accordion mt-3" id="virtualMediaAccordion"> <div class="accordion mt-3" id="virtualMediaAccordion">
<div class="card"> <div class="card">
@@ -595,6 +596,11 @@ function DrawFilesystemsPie(filesystemsData)
DrawPie("filesystemsChart", `Top ${filesystemsData[0].length} filesystems found`, filesystemsData[0], filesystemsData[1]) DrawPie("filesystemsChart", `Top ${filesystemsData[0].length} filesystems found`, filesystemsData[0], filesystemsData[1])
} }
function DrawVirtualMediaPie(virtualMediaData)
{
DrawPie("virtualMediaChart", `Top ${virtualMediaData[0].length} media types found in images`, virtualMediaData[0], virtualMediaData[1])
}
window.onload = () => { window.onload = () => {
$.ajax({dataType: "json", url: "/Stats/GetOsData", success: DrawOsPie, cache:false}); $.ajax({dataType: "json", url: "/Stats/GetOsData", success: DrawOsPie, cache:false});
$.ajax({dataType: "json", url: "/Stats/GetLinuxData", success: DrawLinuxPie, cache:false}); $.ajax({dataType: "json", url: "/Stats/GetLinuxData", success: DrawLinuxPie, cache:false});
@@ -606,6 +612,7 @@ window.onload = () => {
$.ajax({dataType: "json", url: "/Stats/GetFormatsData", success: DrawFormatsPie, cache:false}); $.ajax({dataType: "json", url: "/Stats/GetFormatsData", success: DrawFormatsPie, cache:false});
$.ajax({dataType: "json", url: "/Stats/GetPartitionsData", success: DrawPartitionsPie, cache:false}); $.ajax({dataType: "json", url: "/Stats/GetPartitionsData", success: DrawPartitionsPie, cache:false});
$.ajax({dataType: "json", url: "/Stats/GetFilesystemsData", success: DrawFilesystemsPie, cache:false}); $.ajax({dataType: "json", url: "/Stats/GetFilesystemsData", success: DrawFilesystemsPie, cache:false});
$.ajax({dataType: "json", url: "/Stats/GetVirtualMediaData", success: DrawVirtualMediaPie, cache:false});
} }
</script> </script>