128 lines
4 KiB
Dart
128 lines
4 KiB
Dart
/*
|
|
Make File System Report
|
|
|
|
This tool will generate a HTML report for the base path specified.
|
|
*/
|
|
|
|
import 'dart:ffi';
|
|
import 'dart:io';
|
|
|
|
import 'package:libac_dart/argparse/Args.dart';
|
|
import 'package:libac_dart/argparse/Builder.dart';
|
|
import 'package:libac_dart/argparse/CLIHelper.dart';
|
|
import 'package:libac_dart/argparse/types/Bool.dart';
|
|
import 'package:libac_dart/argparse/types/String.dart';
|
|
import 'package:libac_dart/consts.dart';
|
|
import 'package:libac_dart/utils/IOTools.dart';
|
|
|
|
Future<int> main(List<String> args) async {
|
|
String VERSION = "1.0.082424.0715";
|
|
bool verbose = false;
|
|
String HEADER =
|
|
"Make File System Report\nVersion: $VERSION\nUsing LibAC Version: ${Constants.VERSION}\nAuthor: Tara Piccari\n\n";
|
|
|
|
Arguments defaults = ArgumentsBuilder.builder()
|
|
.withArgument(BoolArgument(
|
|
name: "asc",
|
|
description: "Operate in ascending mode, smallest size listed first"))
|
|
.withArgument(StringArgument(
|
|
name: "path",
|
|
value: "/",
|
|
description: "The path to generate a report for"))
|
|
.withArgument(
|
|
BoolArgument(name: "help", description: "Hey look! It's me!"))
|
|
.withArgument(StringArgument(
|
|
name: "out",
|
|
value: "file.html",
|
|
description:
|
|
"Where to place the report. If not specified, stdout is used"))
|
|
.build();
|
|
|
|
Arguments parsed = await CLIHelper.parseArgs(args, Arguments());
|
|
String helpTest = "$HEADER${CLIHelper.makeArgCLIHelp(defaults)}";
|
|
|
|
if (parsed.count == 0 || !parsed.hasArg("path") || parsed.hasArg("help")) {
|
|
print(helpTest);
|
|
return 0;
|
|
} else {
|
|
if (parsed.hasArg("out"))
|
|
verbose = true;
|
|
else
|
|
verbose = false;
|
|
}
|
|
print(HEADER);
|
|
|
|
bool ascending = false;
|
|
if (parsed.hasArg("asc")) ascending = true;
|
|
StringArgument pathArg = parsed.getArg("path") as StringArgument;
|
|
if (verbose) print("> Analyzing files...");
|
|
|
|
await getDirectorySize(pathArg.value,
|
|
cacheSize: true, recursive: true, verbose: parsed.hasArg("o"));
|
|
FileInformationCache FIC = FileInformationCache.obtain();
|
|
|
|
if (verbose) prnt("\r> Generating report...");
|
|
|
|
String report =
|
|
await generateHTMLReport(FIC, ascending: ascending, VERSION: VERSION);
|
|
|
|
if (verbose) {
|
|
StringArgument outputPath = parsed.getArg("out") as StringArgument;
|
|
prnt("\n> Saving report...");
|
|
await File(outputPath.value).writeAsString(report);
|
|
prnt("\n> Task Completed\n");
|
|
} else {
|
|
print(report);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
Future<String> generateHTMLReport(FileInformationCache FIC,
|
|
{bool ascending = false, String VERSION = ""}) async {
|
|
String header = '''
|
|
<html>
|
|
<title>MKFSReport</title>
|
|
<body style="background-color: black;color: #00D2FA">
|
|
<h2>File System Report</h2><br/>
|
|
<b>Generated by mkfsreport v${VERSION}</b><br/>
|
|
<b>Bundled <a href="https://git.zontreck.com/AriasCreations/LibAC-dart">LibAC</a> Version: ${Constants.VERSION}</b><br/>
|
|
<pre style="color: #7a0c17">
|
|
MKFSREPORT and LibAC are provided free of charge with no implied warranties. The software is provided as-is.
|
|
|
|
This program was created by Tara Piccari, as a part of the Aria's Creations common code library as a helper utility.
|
|
Aria's Creations is a alias for online-only works. Aria is an anagram derived from my name. piccARI, tarA. You place my last name first, take the last 3, skip the first 3 in my first name and take the remaining character(s) and you have my alias.
|
|
|
|
This utility analyzed the specified folder path to generate a detailed report of directory and file sizes as seen below.
|
|
</pre><br/>
|
|
''';
|
|
|
|
header += '''
|
|
<table>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Path</th>
|
|
<th>Size</th>
|
|
</tr>
|
|
''';
|
|
|
|
for (var entry in (await FIC.getOrderedList(ascending: ascending))) {
|
|
header += '''
|
|
<tr>
|
|
<td>${entry.isFile ? "FILE" : "DIR"}</td>
|
|
<td>${entry.path}</td>
|
|
<td>${entry.toString()}</td>
|
|
</tr>
|
|
''';
|
|
}
|
|
|
|
header += '''
|
|
</table>
|
|
''';
|
|
|
|
header += '''
|
|
</body>
|
|
</html>
|
|
''';
|
|
return header;
|
|
}
|