168 lines
5.5 KiB
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;
|
|
}
|