SimpleHelperTools/dart/bin/mkfsreport.dart

168 lines
5.5 KiB
Dart

/*
Make File System Report
This tool will generate a HTML report for the base path specified.
*/
import 'dart:io';
import 'package:libac_dart/argparse/Parser.dart';
import 'package:simplehelpertools/constants.dart';
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/utils/IOTools.dart';
String get MKFSREPORT_VER => HelperConsts.MKFSREPORT_VERSION;
Future<int> main(List<String> args) async {
bool verbose = false;
String HEADER =
"Make File System Report\nVersion: ${HelperConsts.MKFSREPORT_VERSION}\nUsing LibAC Version: ${HelperConsts.LIBAC_VERSION}\nAuthor: Tara Piccari\n\n";
Arguments defaults = ArgumentsBuilder.builder()
.withArgument(BoolArgument(
name: "asc",
))
.withArgument(StringArgument(
name: "path",
value: "/",
))
.withArgument(BoolArgument(
name: "help",
))
.withArgument(StringArgument(
name: "out",
value: "file.html",
))
.withArgument(BoolArgument(
name: "nohtml",
))
.build();
Arguments parsed = await ArgumentParser.parse(args);
String helpTest =
"$HEADER${ArgumentHelpers.generateHelpMessage(defaults.getArgumentsList(), "mkfsreport")}";
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.getValue(),
cacheSize: true, recursive: true, verbose: parsed.hasArg("o"));
FileInformationCache FIC = FileInformationCache.obtain();
if (verbose) await prnt("\r> Generating report...");
String report = "";
if (!parsed.hasArg("nohtml")) {
report = await generateHTMLReport(FIC,
ascending: ascending, VERSION: MKFSREPORT_VER);
} else {
report = await generateTextReport(FIC,
ascending: ascending, VERSION: MKFSREPORT_VER);
}
if (verbose) {
StringArgument outputPath = parsed.getArg("out") as StringArgument;
await prnt("\n> Saving report...");
await File(outputPath.getValue()).writeAsString(report);
await prnt("\n> Task Completed\n");
var size = await File(outputPath.getValue()).length();
FileInfo savedFile =
FileInfo(path: outputPath.getValue(), size: size, isFile: true);
await prnt("> Report file size: ${savedFile.toString()}\n\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: ${HelperConsts.LIBAC_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;
}
Future<String> generateTextReport(FileInformationCache FIC,
{bool ascending = false, String VERSION = ""}) async {
String header = '''
MKFSReport
{File System Report}
Generated by mkfsreport v$VERSION
Bundled LibAC Version: ${HelperConsts.LIBAC_VERSION} [https://git.zontreck.com/AriasCreations/LibAC-dart]
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.\n
''';
for (var entry in (await FIC.getOrderedList(ascending: ascending))) {
header +=
" ${entry.isFile ? "FILE" : "DIR"} ${entry.toString()} ${entry.path}\n";
}
return header;
}