diff --git a/DiscImageChef.Core/Statistics.cs b/DiscImageChef.Core/Statistics.cs index fb72525cf..dc47f43d2 100644 --- a/DiscImageChef.Core/Statistics.cs +++ b/DiscImageChef.Core/Statistics.cs @@ -34,145 +34,32 @@ using System; using System.Collections.Generic; using System.IO; using System.Xml.Serialization; +using DiscImageChef.Metadata; +using System.Net; +using DiscImageChef.Console; +using System.Threading; namespace DiscImageChef.Core { - [XmlRoot("DicStats", Namespace = "", IsNullable = false)] - public class Stats - { - public CommandsStats Commands; - [XmlArrayItem("Filesystem")] - public List Filesystems; - [XmlArrayItem("Scheme")] - public List Partitions; - [XmlArrayItem("Format")] - public List MediaImages; - [XmlArrayItem("Filter", IsNullable = true)] - public List Filters; - [XmlArrayItem("Device", IsNullable = true)] - public List Devices; - [XmlArrayItem("Media")] - public List Medias; - public BenchmarkStats Benchmark; - public MediaScanStats MediaScan; - public VerifyStats Verify; - } - - public class CommandsStats - { - public long Analyze; - public long Benchmark; - public long Checksum; - public long Compare; - public long CreateSidecar; - public long Decode; - public long DeviceInfo; - public long DeviceReport; - public long DumpMedia; - public long Entropy; - public long Formats; - public long MediaInfo; - public long MediaScan; - public long PrintHex; - public long Verify; - } - - public class VerifiedItems - { - public long Correct; - public long Failed; - } - - public class VerifyStats - { - public VerifiedItems MediaImages; - public ScannedSectors Sectors; - } - - public class ScannedSectors - { - public long Total; - public long Error; - public long Correct; - public long Unverifiable; - } - - public class TimeStats - { - public long LessThan3ms; - public long LessThan10ms; - public long LessThan50ms; - public long LessThan150ms; - public long LessThan500ms; - public long MoreThan500ms; - } - - public class MediaScanStats - { - public ScannedSectors Sectors; - public TimeStats Times; - } - - public class ChecksumStats - { - [XmlAttribute] - public string algorithm; - [XmlText] - public double Value; - } - - public class BenchmarkStats - { - [XmlElement("Checksum")] - public List Checksum; - public double Entropy; - public double All; - public double Sequential; - public long MaxMemory; - public long MinMemory; - } - - public class MediaStats - { - [XmlAttribute] - public bool real; - [XmlAttribute] - public string type; - [XmlText] - public long Value; - } - - public class DeviceStats - { - public string Manufacturer; - public string Model; - public string Revision; - public string Bus; - - [XmlIgnore] - public bool ManufacturerSpecified; - } - - public class NameValueStats - { - [XmlAttribute] - public string name; - [XmlText] - public long Value; - } - public static class Statistics { public static Stats AllStats; public static Stats CurrentStats; + static bool submitStatsLock; + public static void LoadStats() { if(File.Exists(Path.Combine(Settings.Settings.StatsPath, "Statistics.xml"))) { AllStats = new Stats(); - CurrentStats = new Stats(); - + CurrentStats = new Stats() + { + OperatingSystems = new List + { + new NameValueStats { name = Interop.DetectOS.GetRealPlatformID().ToString(), Value = 1 } + } + }; XmlSerializer xs = new XmlSerializer(AllStats.GetType()); StreamReader sr = new StreamReader(Path.Combine(Settings.Settings.StatsPath, "Statistics.xml")); AllStats = (Stats)xs.Deserialize(sr); @@ -181,7 +68,13 @@ namespace DiscImageChef.Core else if(Settings.Settings.Current.Stats != null) { AllStats = new Stats(); - CurrentStats = new Stats(); + CurrentStats = new Stats() + { + OperatingSystems = new List + { + new NameValueStats { name = Interop.DetectOS.GetRealPlatformID().ToString(), Value = 1 } + } + }; } else { @@ -194,6 +87,27 @@ namespace DiscImageChef.Core { if(AllStats != null) { + if(AllStats.OperatingSystems != null) + { + long count = 0; + + NameValueStats old = null; + foreach(NameValueStats nvs in AllStats.OperatingSystems) + { + if(nvs.name == Interop.DetectOS.GetRealPlatformID().ToString()) + { + count = nvs.Value; + old = nvs; + break; + } + } + + if(old != null) + AllStats.OperatingSystems.Remove(old); + + count++; + AllStats.OperatingSystems.Add(new NameValueStats { name = Interop.DetectOS.GetRealPlatformID().ToString(), Value = count }); + } FileStream fs = new FileStream(Path.Combine(Settings.Settings.StatsPath, "Statistics.xml"), FileMode.Create); XmlSerializer xs = new XmlSerializer(AllStats.GetType()); xs.Serialize(fs, AllStats); diff --git a/DiscImageChef.Metadata/Statistics.cs b/DiscImageChef.Metadata/Statistics.cs index a0dca76ec..f103dc329 100644 --- a/DiscImageChef.Metadata/Statistics.cs +++ b/DiscImageChef.Metadata/Statistics.cs @@ -30,12 +30,134 @@ // Copyright © 2011-2017 Natalia Portillo // ****************************************************************************/ using System; +using System.Collections.Generic; +using System.Xml.Serialization; + namespace DiscImageChef.Metadata { - public class Statistics + [XmlRoot("DicStats", Namespace = "", IsNullable = false)] + public class Stats { - public Statistics() - { - } + [XmlArrayItem("OperatingSystem")] + public List OperatingSystems { get; set; } + public CommandsStats Commands; + [XmlArrayItem("Filesystem")] + public List Filesystems { get; set; } + [XmlArrayItem("Scheme")] + public List Partitions { get; set; } + [XmlArrayItem("Format")] + public List MediaImages { get; set; } + [XmlArrayItem("Filter", IsNullable = true)] + public List Filters { get; set; } + [XmlArrayItem("Device", IsNullable = true)] + public List Devices { get; set; } + [XmlArrayItem("Media")] + public List Medias { get; set; } + public BenchmarkStats Benchmark { get; set; } + public MediaScanStats MediaScan { get; set; } + public VerifyStats Verify { get; set; } + } + + public class CommandsStats + { + public long Analyze; + public long Benchmark; + public long Checksum; + public long Compare; + public long CreateSidecar; + public long Decode; + public long DeviceInfo; + public long DeviceReport; + public long DumpMedia; + public long Entropy; + public long Formats; + public long MediaInfo; + public long MediaScan; + public long PrintHex; + public long Verify; + } + + public class VerifiedItems + { + public long Correct; + public long Failed; + } + + public class VerifyStats + { + public VerifiedItems MediaImages; + public ScannedSectors Sectors; + } + + public class ScannedSectors + { + public long Total; + public long Error; + public long Correct; + public long Unverifiable; + } + + public class TimeStats + { + public long LessThan3ms; + public long LessThan10ms; + public long LessThan50ms; + public long LessThan150ms; + public long LessThan500ms; + public long MoreThan500ms; + } + + public class MediaScanStats + { + public ScannedSectors Sectors; + public TimeStats Times; + } + + public class ChecksumStats + { + [XmlAttribute] + public string algorithm; + [XmlText] + public double Value; + } + + public class BenchmarkStats + { + [XmlElement("Checksum")] + public List Checksum; + public double Entropy; + public double All; + public double Sequential; + public long MaxMemory; + public long MinMemory; + } + + public class MediaStats + { + [XmlAttribute] + public bool real; + [XmlAttribute] + public string type; + [XmlText] + public long Value; + } + + public class DeviceStats + { + public string Manufacturer { get; set; } + public string Model { get; set; } + public string Revision { get; set; } + public string Bus { get; set; } + + [XmlIgnore] + public bool ManufacturerSpecified; + } + + public class NameValueStats + { + [XmlAttribute] + public string name { get; set; } + [XmlText] + public long Value { get; set; } } }