Move devices by manufacturer chart to ChartJS.

This commit is contained in:
2019-11-03 05:15:56 +00:00
parent 9746b4d9a6
commit 0a56a240f2
2 changed files with 54 additions and 33 deletions

View File

@@ -41,10 +41,8 @@ using System.Xml.Serialization;
using DiscImageChef.CommonTypes.Interop;
using DiscImageChef.CommonTypes.Metadata;
using DiscImageChef.Server.Models;
using Highsoft.Web.Mvc.Charts;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using OperatingSystem = DiscImageChef.Server.Models.OperatingSystem;
using PlatformID = DiscImageChef.CommonTypes.Interop.PlatformID;
using Version = DiscImageChef.Server.Models.Version;
@@ -248,15 +246,6 @@ namespace DiscImageChef.Server.Controllers
ViewBag.repDevices = devices.OrderBy(device => device.Manufacturer).ThenBy(device => device.Model).
ThenBy(device => device.Revision).ThenBy(device => device.Bus).
ToList();
ViewData["devicesManufacturerPieData"] =
(from manufacturer in devices.Where(d => d.Manufacturer != null).
Select(d => d.Manufacturer.ToLowerInvariant()).Distinct()
let manufacturerCount = devices.Count(d => d.Manufacturer?.ToLowerInvariant() == manufacturer)
select new PieSeriesData
{
Name = manufacturer, Y = manufacturerCount / (double)devices.Count
}).ToList();
}
}
catch(Exception)
@@ -497,7 +486,7 @@ namespace DiscImageChef.Server.Controllers
{
Media[] virtualMedias = ctx.Medias.Where(o => !o.Real).OrderByDescending(o => o.Count).Take(10).ToArray();
foreach (Media media in virtualMedias)
foreach(Media media in virtualMedias)
{
try
{
@@ -515,8 +504,7 @@ namespace DiscImageChef.Server.Controllers
string[][] result =
{
virtualMedias.Select(v => v.Type).ToArray(),
virtualMedias.Select(x => x.Count.ToString()).ToArray()
virtualMedias.Select(v => v.Type).ToArray(), virtualMedias.Select(x => x.Count.ToString()).ToArray()
};
if(result[0].Length < 10)
@@ -524,7 +512,8 @@ namespace DiscImageChef.Server.Controllers
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();
result[1][9] = (ctx.Medias.Where(o => !o.Real).Sum(o => o.Count) - result[1].Take(9).Sum(long.Parse)).
ToString();
return Json(result);
}
@@ -533,7 +522,7 @@ namespace DiscImageChef.Server.Controllers
{
Media[] realMedias = ctx.Medias.Where(o => o.Real).OrderByDescending(o => o.Count).Take(10).ToArray();
foreach (Media media in realMedias)
foreach(Media media in realMedias)
{
try
{
@@ -551,8 +540,7 @@ namespace DiscImageChef.Server.Controllers
string[][] result =
{
realMedias.Select(v => v.Type).ToArray(),
realMedias.Select(x => x.Count.ToString()).ToArray()
realMedias.Select(v => v.Type).ToArray(), realMedias.Select(x => x.Count.ToString()).ToArray()
};
if(result[0].Length < 10)
@@ -560,23 +548,21 @@ namespace DiscImageChef.Server.Controllers
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();
result[1][9] = (ctx.Medias.Where(o => o.Real).Sum(o => o.Count) - result[1].Take(9).Sum(long.Parse)).
ToString();
return Json(result);
}
public IActionResult GetDevicesBusData()
public IActionResult GetDevicesByBusData()
{
var data = ctx.DeviceStats.Select(d => d.Bus).
Distinct().
Select(deviceBus => new
{
deviceBus, deviceBusCount = ctx.DeviceStats.Count(d => d.Bus == deviceBus)
}).
Select(t => new
{
Name = t.deviceBus, Count = t.deviceBusCount
}).ToList();
var data = ctx.DeviceStats.Select(d => d.Bus).Distinct().Select(deviceBus => new
{
deviceBus, deviceBusCount = ctx.DeviceStats.Count(d => d.Bus == deviceBus)
}).Select(t => new
{
Name = t.deviceBus, Count = t.deviceBusCount
}).ToList();
string[][] result =
{
@@ -593,5 +579,33 @@ namespace DiscImageChef.Server.Controllers
return Json(result);
}
public IActionResult GetDevicesByManufacturerData()
{
List<Device> devs = ctx.Devices.Where(d => d.Manufacturer != null && d.Manufacturer != "").ToList();
var data = devs.Select(d => d.Manufacturer.ToLowerInvariant()).Distinct().Select(manufacturer => new
{
manufacturer, manufacturerCount = devs.Count(d => d.Manufacturer?.ToLowerInvariant() == manufacturer)
}).Select(t => new
{
Name = t.manufacturer, Count = t.manufacturerCount
}).ToList();
string[][] result =
{
data.OrderByDescending(o => o.Count).Take(10).Select(v => v.Name).ToArray(),
data.OrderByDescending(o => o.Count).Take(10).Select(x => x.Count.ToString()).ToArray()
};
if(result[0].Length < 10)
return Json(result);
result[0][9] = "other";
result[1][9] = (data.Sum(o => o.Count) - result[1].Take(9).Sum(long.Parse)).ToString();
return Json(result);
}
}
}

View File

@@ -448,7 +448,8 @@
<div class="active carousel-item">
<canvas id="devicesBusChart"></canvas>
</div>
<div class="carousel-item" id="devicesManufacturerChart">
<div class="carousel-item">
<canvas id="devicesManufacturerChart"></canvas>
</div>
</div>
<a class="carousel-control-prev" data-slide="prev" href="#carouselDevices" role="button">
@@ -608,11 +609,16 @@ function DrawRealMediaPie(realMediaData)
DrawPie("realMediaChart", `Top ${realMediaData[0].length} media types found in devices`, realMediaData[0], realMediaData[1])
}
function DrawDevicesBusPie(devicesBusData)
function DrawDevicesByBusPie(devicesBusData)
{
DrawPie("devicesBusChart", `Top ${devicesBusData[0].length} devices by bus`, devicesBusData[0], devicesBusData[1])
}
function DrawDevicesByManufacturerPie(devicesByManufacturerData)
{
DrawPie("devicesManufacturerChart", `Top ${devicesByManufacturerData[0].length} devices by manufacturer`, devicesByManufacturerData[0], devicesByManufacturerData[1])
}
window.onload = () => {
$.ajax({dataType: "json", url: "/Stats/GetOsData", success: DrawOsPie, cache:false});
$.ajax({dataType: "json", url: "/Stats/GetLinuxData", success: DrawLinuxPie, cache:false});
@@ -626,7 +632,8 @@ window.onload = () => {
$.ajax({dataType: "json", url: "/Stats/GetFilesystemsData", success: DrawFilesystemsPie, cache:false});
$.ajax({dataType: "json", url: "/Stats/GetVirtualMediaData", success: DrawVirtualMediaPie, cache:false});
$.ajax({dataType: "json", url: "/Stats/GetRealMediaData", success: DrawRealMediaPie, cache:false});
$.ajax({dataType: "json", url: "/Stats/GetDevicesBusData", success: DrawDevicesBusPie, cache:false});
$.ajax({dataType: "json", url: "/Stats/GetDevicesByBusData", success: DrawDevicesByBusPie, cache:false});
$.ajax({dataType: "json", url: "/Stats/GetDevicesByManufacturerData", success: DrawDevicesByManufacturerPie, cache:false});
}
</script>