128 lines
5.4 KiB
C#
128 lines
5.4 KiB
C#
<Query Kind="Program">
|
|
<Reference><ProgramFilesX64>\Microsoft SDKs\Azure\.NET SDK\v2.9\bin\plugins\Diagnostics\Newtonsoft.Json.dll</Reference>
|
|
<NuGetReference>Amazon.Lambda.S3Events</NuGetReference>
|
|
<NuGetReference>AWSSDK.Core</NuGetReference>
|
|
<NuGetReference>AWSSDK.S3</NuGetReference>
|
|
<Namespace>Amazon</Namespace>
|
|
<Namespace>Amazon.Auth.AccessControlPolicy</Namespace>
|
|
<Namespace>Amazon.Auth.AccessControlPolicy.ActionIdentifiers</Namespace>
|
|
<Namespace>Amazon.Internal</Namespace>
|
|
<Namespace>Amazon.Lambda.S3Events</Namespace>
|
|
<Namespace>Amazon.MissingTypes</Namespace>
|
|
<Namespace>Amazon.Runtime</Namespace>
|
|
<Namespace>Amazon.Runtime.CredentialManagement</Namespace>
|
|
<Namespace>Amazon.Runtime.CredentialManagement.Internal</Namespace>
|
|
<Namespace>Amazon.Runtime.EventStreams</Namespace>
|
|
<Namespace>Amazon.Runtime.EventStreams.Internal</Namespace>
|
|
<Namespace>Amazon.Runtime.Internal</Namespace>
|
|
<Namespace>Amazon.Runtime.Internal.Auth</Namespace>
|
|
<Namespace>Amazon.Runtime.Internal.Settings</Namespace>
|
|
<Namespace>Amazon.Runtime.Internal.Transform</Namespace>
|
|
<Namespace>Amazon.Runtime.Internal.Util</Namespace>
|
|
<Namespace>Amazon.Runtime.SharedInterfaces</Namespace>
|
|
<Namespace>Amazon.Runtime.SharedInterfaces.Internal</Namespace>
|
|
<Namespace>Amazon.S3</Namespace>
|
|
<Namespace>Amazon.S3.Encryption</Namespace>
|
|
<Namespace>Amazon.S3.Encryption.Internal</Namespace>
|
|
<Namespace>Amazon.S3.Internal</Namespace>
|
|
<Namespace>Amazon.S3.IO</Namespace>
|
|
<Namespace>Amazon.S3.Model</Namespace>
|
|
<Namespace>Amazon.S3.Model.Internal.MarshallTransformations</Namespace>
|
|
<Namespace>Amazon.S3.Transfer</Namespace>
|
|
<Namespace>Amazon.S3.Util</Namespace>
|
|
<Namespace>Amazon.Util</Namespace>
|
|
<Namespace>Amazon.Util.Internal</Namespace>
|
|
<Namespace>Amazon.Util.Internal.PlatformServices</Namespace>
|
|
<Namespace>Newtonsoft.Json</Namespace>
|
|
<Namespace>Newtonsoft.Json.Converters</Namespace>
|
|
<Namespace>Newtonsoft.Json.Linq</Namespace>
|
|
<Namespace>Newtonsoft.Json.Schema</Namespace>
|
|
<Namespace>Newtonsoft.Json.Serialization</Namespace>
|
|
<Namespace>System</Namespace>
|
|
<Namespace>System.Diagnostics</Namespace>
|
|
<Namespace>System.Diagnostics.Tracing</Namespace>
|
|
<Namespace>System.IO.Compression</Namespace>
|
|
<Namespace>ThirdParty.BouncyCastle.Asn1</Namespace>
|
|
<Namespace>ThirdParty.BouncyCastle.Asn1.Utilities</Namespace>
|
|
<Namespace>ThirdParty.BouncyCastle.Math</Namespace>
|
|
<Namespace>ThirdParty.BouncyCastle.OpenSsl</Namespace>
|
|
<Namespace>ThirdParty.BouncyCastle.Utilities.IO.Pem</Namespace>
|
|
<Namespace>ThirdParty.Ionic.Zlib</Namespace>
|
|
<Namespace>ThirdParty.Json.LitJson</Namespace>
|
|
<Namespace>ThirdParty.MD5</Namespace>
|
|
</Query>
|
|
|
|
void Main()
|
|
{
|
|
var baseDir = @"D:\Git\Jazz";
|
|
|
|
var solution = Path.Combine(baseDir, "veracode.sln");
|
|
var regex = new Regex(@"[^=]*=\s+""([^""]*)"",\s""([^""]*)"".*");
|
|
var veracodeProjectFolders = File.ReadAllLines(solution)
|
|
.Where(l => l.StartsWith("Project("))
|
|
.Where(l => regex.Match(l).Success)
|
|
.ToList();
|
|
var fileTypes = new Regex(@"^\.vb$|^\.css?$|^\.jsx?$|^\.html$|^\.as[achmp]{1}x$|^\.xs[xd]{1}$");
|
|
//veracodeProjectFolders.Dump();
|
|
var vpnames = veracodeProjectFolders
|
|
.Where(l => !string.IsNullOrEmpty(regex.Replace(l, "$1")))
|
|
.ToDictionary(l => regex.Replace(l, "$1"), l => Path.GetDirectoryName(Path.Combine(baseDir, regex.Replace(l, "$2"))));
|
|
var vpf = vpnames.Values.ToList();
|
|
|
|
//vpnames.Dump();
|
|
//vpf.ConvertAll(v => Path.GetDirectoryName(Path.Combine(baseDir, v))).Dump();
|
|
|
|
baseDir = Path.Combine(baseDir, @"Code\");
|
|
var dirs = Directory.EnumerateDirectories(baseDir)
|
|
.Where(d => vpf.Contains(d))
|
|
.ToList()
|
|
.ConvertAll(d => d.Replace(baseDir, ""));
|
|
var fileSizes = new Dictionary<string, Dictionary<string, long>>();
|
|
var fileExtensions = new List<string>();
|
|
foreach (var dir in dirs)
|
|
{
|
|
var path = Path.Combine(baseDir, dir);
|
|
//$"{baseDir} + {dir} = {path}".Dump();
|
|
foreach (var file in Directory.GetFiles(path, "*.*", SearchOption.AllDirectories))
|
|
{
|
|
if (file.Contains(@"\obj\") || file.Contains(@"\bin\")) continue;
|
|
var fi = new FileInfo(file);
|
|
fileExtensions.Add(fi.Extension);
|
|
if (!fileTypes.IsMatch(fi.Extension)) continue;
|
|
var fDir = fi.DirectoryName.Replace(baseDir, "").Split(Path.DirectorySeparatorChar)[0];
|
|
var fSize = fi.Length;
|
|
if (!fileSizes.ContainsKey(dir))
|
|
fileSizes.Add(dir, new Dictionary<string, long>());
|
|
if (!fileSizes[dir].ContainsKey(fi.Extension))
|
|
fileSizes[dir].Add(fi.Extension, 0);
|
|
fileSizes[dir][fi.Extension] += fSize;
|
|
}
|
|
}
|
|
var report = fileSizes.Keys.ToList()
|
|
.ConvertAll(key => fileSizes[key].Keys.ToList()
|
|
.ConvertAll(ext => new DirectorySize { Directory = key, FileExtension = ext, fileSize = fileSizes[key][ext] }))
|
|
.SelectMany(x => x.Select(y => y));
|
|
report.Sum(x => x.fileSize).BytesToString().Dump("Total Source");
|
|
report.OrderBy(r => r.Directory).ThenBy(r => r.FileExtension).Dump();
|
|
fileExtensions.Distinct().OrderBy(e => e).Dump();
|
|
}
|
|
|
|
// Define other methods and classes here
|
|
|
|
public class DirectorySize
|
|
{
|
|
public string Directory { get; set; }
|
|
public string FileExtension { get; set; }
|
|
public long fileSize { get; set; }
|
|
object ToDump() => new
|
|
{
|
|
Directory,
|
|
FileExtension,
|
|
FileSize = new XElement("LINQPad.HTML",
|
|
new XElement("div",
|
|
new XAttribute("align", "right"),
|
|
new XAttribute("style", $"background-color:{((fileSize > Math.Pow(1024, 3)) ? "red" : (fileSize > Math.Pow(1024, 2)) ? "violet" : "white")};"),
|
|
$"{fileSize.BytesToString()}".PadLeft(10))),
|
|
};
|
|
|
|
} |