Log result codes in access log

This commit is contained in:
Alex Barney 2019-09-08 15:16:37 -05:00
parent 9e9fd19f63
commit 104312bf06
5 changed files with 55 additions and 41 deletions

View file

@ -44,20 +44,23 @@ namespace LibHac.FsClient
public void Unmount(string mountName) public void Unmount(string mountName)
{ {
MountTable.Find(mountName, out FileSystemAccessor fileSystem).ThrowIfFailure(); Result rc;
if (IsEnabledAccessLog() && fileSystem.IsAccessLogEnabled) if (IsEnabledAccessLog() && this.IsEnabledFileSystemAccessorAccessLog(mountName))
{ {
TimeSpan startTime = Time.GetCurrent(); TimeSpan startTime = Time.GetCurrent();
MountTable.Unmount(mountName);
TimeSpan endTime = Time.GetCurrent();
OutputAccessLog(startTime, endTime, $", name: \"{mountName}\""); rc = MountTable.Unmount(mountName);
TimeSpan endTime = Time.GetCurrent();
OutputAccessLog(rc, startTime, endTime, $", name: \"{mountName}\"");
} }
else else
{ {
MountTable.Unmount(mountName); rc = MountTable.Unmount(mountName);
} }
rc.ThrowIfFailure();
} }
public void SetAccessLog(bool isEnabled, IAccessLog accessLog = null) public void SetAccessLog(bool isEnabled, IAccessLog accessLog = null)
@ -78,7 +81,7 @@ namespace LibHac.FsClient
rc = fileSystem.CreateDirectory(subPath.ToString()); rc = fileSystem.CreateDirectory(subPath.ToString());
TimeSpan endTime = Time.GetCurrent(); TimeSpan endTime = Time.GetCurrent();
OutputAccessLog(startTime, endTime, $", path: \"{path}\""); OutputAccessLog(rc, startTime, endTime, $", path: \"{path}\"");
} }
else else
{ {
@ -104,7 +107,7 @@ namespace LibHac.FsClient
rc = fileSystem.CreateFile(subPath.ToString(), size, options); rc = fileSystem.CreateFile(subPath.ToString(), size, options);
TimeSpan endTime = Time.GetCurrent(); TimeSpan endTime = Time.GetCurrent();
OutputAccessLog(startTime, endTime, $", path: \"{path}\", size: {size}"); OutputAccessLog(rc, startTime, endTime, $", path: \"{path}\", size: {size}");
} }
else else
{ {
@ -125,7 +128,7 @@ namespace LibHac.FsClient
rc = fileSystem.DeleteDirectory(subPath.ToString()); rc = fileSystem.DeleteDirectory(subPath.ToString());
TimeSpan endTime = Time.GetCurrent(); TimeSpan endTime = Time.GetCurrent();
OutputAccessLog(startTime, endTime, $", path: \"{path}\""); OutputAccessLog(rc, startTime, endTime, $", path: \"{path}\"");
} }
else else
{ {
@ -146,7 +149,7 @@ namespace LibHac.FsClient
rc = fileSystem.DeleteDirectoryRecursively(subPath.ToString()); rc = fileSystem.DeleteDirectoryRecursively(subPath.ToString());
TimeSpan endTime = Time.GetCurrent(); TimeSpan endTime = Time.GetCurrent();
OutputAccessLog(startTime, endTime, $", path: \"{path}\""); OutputAccessLog(rc, startTime, endTime, $", path: \"{path}\"");
} }
else else
{ {
@ -167,7 +170,7 @@ namespace LibHac.FsClient
rc = fileSystem.CleanDirectoryRecursively(subPath.ToString()); rc = fileSystem.CleanDirectoryRecursively(subPath.ToString());
TimeSpan endTime = Time.GetCurrent(); TimeSpan endTime = Time.GetCurrent();
OutputAccessLog(startTime, endTime, $", path: \"{path}\""); OutputAccessLog(rc, startTime, endTime, $", path: \"{path}\"");
} }
else else
{ {
@ -188,7 +191,7 @@ namespace LibHac.FsClient
rc = fileSystem.DeleteFile(subPath.ToString()); rc = fileSystem.DeleteFile(subPath.ToString());
TimeSpan endTime = Time.GetCurrent(); TimeSpan endTime = Time.GetCurrent();
OutputAccessLog(startTime, endTime, $", path: \"{path}\""); OutputAccessLog(rc, startTime, endTime, $", path: \"{path}\"");
} }
else else
{ {
@ -217,7 +220,7 @@ namespace LibHac.FsClient
rc = oldFileSystem.RenameDirectory(oldSubPath.ToString(), newSubPath.ToString()); rc = oldFileSystem.RenameDirectory(oldSubPath.ToString(), newSubPath.ToString());
TimeSpan endTime = Time.GetCurrent(); TimeSpan endTime = Time.GetCurrent();
OutputAccessLog(startTime, endTime, $", path: \"{oldPath}\", new_path: \"{newPath}\""); OutputAccessLog(rc, startTime, endTime, $", path: \"{oldPath}\", new_path: \"{newPath}\"");
} }
else else
{ {
@ -246,7 +249,7 @@ namespace LibHac.FsClient
rc = oldFileSystem.RenameFile(oldSubPath.ToString(), newSubPath.ToString()); rc = oldFileSystem.RenameFile(oldSubPath.ToString(), newSubPath.ToString());
TimeSpan endTime = Time.GetCurrent(); TimeSpan endTime = Time.GetCurrent();
OutputAccessLog(startTime, endTime, $", path: \"{oldPath}\", new_path: \"{newPath}\""); OutputAccessLog(rc, startTime, endTime, $", path: \"{oldPath}\", new_path: \"{newPath}\"");
} }
else else
{ {
@ -269,7 +272,7 @@ namespace LibHac.FsClient
rc = fileSystem.GetEntryType(out type, subPath.ToString()); rc = fileSystem.GetEntryType(out type, subPath.ToString());
TimeSpan endTime = Time.GetCurrent(); TimeSpan endTime = Time.GetCurrent();
OutputAccessLog(startTime, endTime, $", path: \"{path}\""); OutputAccessLog(rc, startTime, endTime, $", path: \"{path}\"");
} }
else else
{ {
@ -293,7 +296,7 @@ namespace LibHac.FsClient
handle = new FileHandle(file); handle = new FileHandle(file);
TimeSpan endTime = Time.GetCurrent(); TimeSpan endTime = Time.GetCurrent();
OutputAccessLog(startTime, endTime, handle, $", path: \"{path}\", open_mode: {mode}"); OutputAccessLog(rc, startTime, endTime, handle, $", path: \"{path}\", open_mode: {mode}");
} }
else else
{ {
@ -318,7 +321,7 @@ namespace LibHac.FsClient
handle = new DirectoryHandle(dir); handle = new DirectoryHandle(dir);
TimeSpan endTime = Time.GetCurrent(); TimeSpan endTime = Time.GetCurrent();
OutputAccessLog(startTime, endTime, handle, $", path: \"{path}\", open_mode: {mode}"); OutputAccessLog(rc, startTime, endTime, handle, $", path: \"{path}\", open_mode: {mode}");
} }
else else
{ {
@ -370,7 +373,7 @@ namespace LibHac.FsClient
rc = fileSystem.Commit(); rc = fileSystem.Commit();
TimeSpan endTime = Time.GetCurrent(); TimeSpan endTime = Time.GetCurrent();
OutputAccessLog(startTime, endTime, $", name: \"{mountName}\""); OutputAccessLog(rc, startTime, endTime, $", name: \"{mountName}\"");
} }
else else
{ {
@ -398,7 +401,7 @@ namespace LibHac.FsClient
rc = handle.File.Read(out bytesRead, offset, destination, option); rc = handle.File.Read(out bytesRead, offset, destination, option);
TimeSpan endTime = Time.GetCurrent(); TimeSpan endTime = Time.GetCurrent();
OutputAccessLog(startTime, endTime, handle, $", offset: {offset}, size: {destination.Length}"); OutputAccessLog(rc, startTime, endTime, handle, $", offset: {offset}, size: {destination.Length}");
} }
else else
{ {
@ -425,7 +428,7 @@ namespace LibHac.FsClient
string optionString = (option & WriteOption.Flush) == 0 ? "" : $", write_option: {option}"; string optionString = (option & WriteOption.Flush) == 0 ? "" : $", write_option: {option}";
OutputAccessLog(startTime, endTime, handle, $", offset: {offset}, size: {source.Length}{optionString}"); OutputAccessLog(rc, startTime, endTime, handle, $", offset: {offset}, size: {source.Length}{optionString}");
} }
else else
{ {
@ -445,7 +448,7 @@ namespace LibHac.FsClient
rc = handle.File.Flush(); rc = handle.File.Flush();
TimeSpan endTime = Time.GetCurrent(); TimeSpan endTime = Time.GetCurrent();
OutputAccessLog(startTime, endTime, handle, string.Empty); OutputAccessLog(rc, startTime, endTime, handle, string.Empty);
} }
else else
{ {
@ -470,7 +473,7 @@ namespace LibHac.FsClient
rc = handle.File.SetSize(size); rc = handle.File.SetSize(size);
TimeSpan endTime = Time.GetCurrent(); TimeSpan endTime = Time.GetCurrent();
OutputAccessLog(startTime, endTime, handle, $", size: {size}"); OutputAccessLog(rc, startTime, endTime, handle, $", size: {size}");
} }
else else
{ {
@ -493,7 +496,7 @@ namespace LibHac.FsClient
handle.File.Dispose(); handle.File.Dispose();
TimeSpan endTime = Time.GetCurrent(); TimeSpan endTime = Time.GetCurrent();
OutputAccessLog(startTime, endTime, handle, string.Empty); OutputAccessLog(Result.Success, startTime, endTime, handle, string.Empty);
} }
else else
{ {
@ -519,7 +522,7 @@ namespace LibHac.FsClient
IEnumerable<DirectoryEntry> entries = handle.Directory.Read(); IEnumerable<DirectoryEntry> entries = handle.Directory.Read();
TimeSpan endTime = Time.GetCurrent(); TimeSpan endTime = Time.GetCurrent();
OutputAccessLog(startTime, endTime, handle, string.Empty); OutputAccessLog(Result.Success, startTime, endTime, handle, string.Empty);
return entries; return entries;
} }
@ -534,7 +537,7 @@ namespace LibHac.FsClient
handle.Directory.Dispose(); handle.Directory.Dispose();
TimeSpan endTime = Time.GetCurrent(); TimeSpan endTime = Time.GetCurrent();
OutputAccessLog(startTime, endTime, handle, string.Empty); OutputAccessLog(Result.Success, startTime, endTime, handle, string.Empty);
} }
else else
{ {
@ -606,19 +609,19 @@ namespace LibHac.FsClient
return handle.Directory.Parent.IsAccessLogEnabled; return handle.Directory.Parent.IsAccessLogEnabled;
} }
internal void OutputAccessLog(TimeSpan startTime, TimeSpan endTime, string message, [CallerMemberName] string caller = "") internal void OutputAccessLog(Result result, TimeSpan startTime, TimeSpan endTime, string message, [CallerMemberName] string caller = "")
{ {
AccessLog.Log(startTime, endTime, 0, message, caller); AccessLog.Log(result, startTime, endTime, 0, message, caller);
} }
internal void OutputAccessLog(TimeSpan startTime, TimeSpan endTime, FileHandle handle, string message, [CallerMemberName] string caller = "") internal void OutputAccessLog(Result result, TimeSpan startTime, TimeSpan endTime, FileHandle handle, string message, [CallerMemberName] string caller = "")
{ {
AccessLog.Log(startTime, endTime, handle.GetId(), message, caller); AccessLog.Log(result, startTime, endTime, handle.GetId(), message, caller);
} }
internal void OutputAccessLog(TimeSpan startTime, TimeSpan endTime, DirectoryHandle handle, string message, [CallerMemberName] string caller = "") internal void OutputAccessLog(Result result, TimeSpan startTime, TimeSpan endTime, DirectoryHandle handle, string message, [CallerMemberName] string caller = "")
{ {
AccessLog.Log(startTime, endTime, handle.GetId(), message, caller); AccessLog.Log(result, startTime, endTime, handle.GetId(), message, caller);
} }
} }
} }

View file

@ -2,6 +2,7 @@
using System.Buffers; using System.Buffers;
using System.Collections.Generic; using System.Collections.Generic;
using LibHac.Fs; using LibHac.Fs;
using LibHac.FsClient.Accessors;
namespace LibHac.FsClient namespace LibHac.FsClient
{ {
@ -202,5 +203,15 @@ namespace LibHac.FsClient
fs.CreateFile(path, size, CreateFileOptions.None); fs.CreateFile(path, size, CreateFileOptions.None);
} }
internal static bool IsEnabledFileSystemAccessorAccessLog(this FileSystemManager fs, string mountName)
{
if (fs.MountTable.Find(mountName, out FileSystemAccessor accessor).IsFailure())
{
return true;
}
return accessor.IsAccessLogEnabled;
}
} }
} }

View file

@ -5,6 +5,6 @@ namespace LibHac.FsClient
{ {
public interface IAccessLog public interface IAccessLog
{ {
void Log(TimeSpan startTime, TimeSpan endTime, int handleId, string message, [CallerMemberName] string caller = ""); void Log(Result result, TimeSpan startTime, TimeSpan endTime, int handleId, string message, [CallerMemberName] string caller = "");
} }
} }

View file

@ -8,7 +8,7 @@ namespace LibHac.FsClient
/// </summary> /// </summary>
public class SdCardAccessLog : IAccessLog public class SdCardAccessLog : IAccessLog
{ {
public void Log(TimeSpan startTime, TimeSpan endTime, int handleId, string message, string caller = "") public void Log(Result result, TimeSpan startTime, TimeSpan endTime, int handleId, string message, string caller = "")
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }

View file

@ -8,9 +8,9 @@ namespace hactoolnet
{ {
public class ConsoleAccessLog : IAccessLog public class ConsoleAccessLog : IAccessLog
{ {
public void Log(TimeSpan startTime, TimeSpan endTime, int handleId, string message, [CallerMemberName] string caller = "") public void Log(Result result, TimeSpan startTime, TimeSpan endTime, int handleId, string message, [CallerMemberName] string caller = "")
{ {
Console.WriteLine(CommonAccessLog.BuildLogLine(startTime, endTime, handleId, message, caller)); Console.WriteLine(CommonAccessLog.BuildLogLine(result, startTime, endTime, handleId, message, caller));
} }
} }
@ -22,9 +22,9 @@ namespace hactoolnet
Logger = logger; Logger = logger;
} }
public void Log(TimeSpan startTime, TimeSpan endTime, int handleId, string message, [CallerMemberName] string caller = "") public void Log(Result result, TimeSpan startTime, TimeSpan endTime, int handleId, string message, [CallerMemberName] string caller = "")
{ {
Logger.LogMessage(CommonAccessLog.BuildLogLine(startTime, endTime, handleId, message, caller)); Logger.LogMessage(CommonAccessLog.BuildLogLine(result, startTime, endTime, handleId, message, caller));
} }
} }
@ -37,18 +37,18 @@ namespace hactoolnet
Logger = logger; Logger = logger;
} }
public void Log(TimeSpan startTime, TimeSpan endTime, int handleId, string message, [CallerMemberName] string caller = "") public void Log(Result result, TimeSpan startTime, TimeSpan endTime, int handleId, string message, [CallerMemberName] string caller = "")
{ {
Logger.WriteLine(CommonAccessLog.BuildLogLine(startTime, endTime, handleId, message, caller)); Logger.WriteLine(CommonAccessLog.BuildLogLine(result, startTime, endTime, handleId, message, caller));
} }
} }
public static class CommonAccessLog public static class CommonAccessLog
{ {
public static string BuildLogLine(TimeSpan startTime, TimeSpan endTime, int handleId, string message, public static string BuildLogLine(Result result, TimeSpan startTime, TimeSpan endTime, int handleId, string message,
string caller) string caller)
{ {
return $"FS_ACCESS: {{ start: {(long)startTime.TotalMilliseconds,9}, end: {(long)endTime.TotalMilliseconds,9}, handle: 0x{handleId:x8}, function: \"{caller}\"{message} }}"; return $"FS_ACCESS: {{ start: {(long)startTime.TotalMilliseconds,9}, end: {(long)endTime.TotalMilliseconds,9}, result: 0x{result.Value:x8}, handle: 0x{handleId:x8}, function: \"{caller}\"{message} }}";
} }
} }
} }