Skip to content

Commit

Permalink
Merge pull request #657 from bugsnag/next
Browse files Browse the repository at this point in the history
Release v7.4.0
  • Loading branch information
rich-bugsnag authored Oct 26, 2022
2 parents 0394002 + 6fc601e commit 3981600
Show file tree
Hide file tree
Showing 4 changed files with 112 additions and 47 deletions.
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# Changelog

## 7.4.0 (2022-10-26)

### Dependency updates

- * Update bugsnag-android from v5.26.0 to [v5.28.1](https://github.com/bugsnag/bugsnag-android/blob/master/CHANGELOG.md#5281-2022-10-19)

### Bug fixes

* Fixed an issue where the Bugsnag CacheManager class raised exceptions on some android devices. [#653](https://github.com/bugsnag/bugsnag-unity/pull/653)

## 7.3.0 (2022-10-17)

### Enhancements
Expand Down
2 changes: 1 addition & 1 deletion bugsnag-android
Submodule bugsnag-android updated 101 files
2 changes: 1 addition & 1 deletion build.cake
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ var target = Argument("target", "Default");
var solution = File("./BugsnagUnity.sln");
var configuration = Argument("configuration", "Release");
var project = File("./src/BugsnagUnity/BugsnagUnity.csproj");
var version = "7.3.0";
var version = "7.4.0";

Task("Restore-NuGet-Packages")
.Does(() => NuGetRestore(solution));
Expand Down
145 changes: 100 additions & 45 deletions src/BugsnagUnity/Native/Fallback/CacheManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,26 +27,47 @@ private static string _eventsDirectory
get { return _cacheDirectory + "/Events"; }
}

private static string[] _cachedSessions => Directory.GetFiles(_sessionsDirectory, "*" + SESSION_FILE_PREFIX);

private static string[] _cachedEvents => Directory.GetFiles(_eventsDirectory, "*" + EVENT_FILE_PREFIX);

private static string _deviceIdFile = _cacheDirectory + "/deviceId.txt";

private const string SESSION_FILE_PREFIX = ".session";
private const string SESSION_FILE_SUFFIX = ".session";

private const string EVENT_FILE_PREFIX = ".event";
private const string EVENT_FILE_SUFFIX = ".event";

private const int MAX_CACHED_DAYS = 60;



public CacheManager(Configuration configuration)
{
_configuration = configuration;
CheckForDirectoryCreation();
RemoveExpiredPayloads();
}

private string[] GetCachedEventFiles()
{
return GetFilesBySuffix(_eventsDirectory, EVENT_FILE_SUFFIX);
}

private string[] GetCachedSessionFiles()
{

return GetFilesBySuffix(_sessionsDirectory,SESSION_FILE_SUFFIX);
}

private string[] GetFilesBySuffix(string path, string suffix)
{
try
{
var files = Directory.GetFiles(path, "*" + suffix);
return files;
}
catch
{
return new string[] { };
}
}

public string GetCachedDeviceId()
{
try
Expand All @@ -73,16 +94,16 @@ public string GetCachedDeviceId()

public void SaveDeviceIdToCache(string deviceId)
{
File.WriteAllText(_deviceIdFile, deviceId);
WriteFile(_deviceIdFile, deviceId);
}

private void RemoveExpiredPayloads()
{
try
var files = GetCachedEventFiles().ToList();
files.AddRange(GetCachedSessionFiles());
foreach (var file in files)
{
var files = _cachedEvents.ToList();
files.AddRange(_cachedSessions);
foreach (var file in files)
try
{
var creationTime = File.GetCreationTimeUtc(file);
if ((DateTime.UtcNow - creationTime).TotalDays > MAX_CACHED_DAYS)
Expand All @@ -91,27 +112,27 @@ private void RemoveExpiredPayloads()
File.Delete(file);
}
}
catch { }
}
catch { }
}

public void SaveSessionToCache(string id,string json)
{
var path = _sessionsDirectory + "/" + id + SESSION_FILE_PREFIX;
var path = _sessionsDirectory + "/" + id + SESSION_FILE_SUFFIX;
WritePayloadToDisk(json, path);
CheckForMaxCachedPayloads(_cachedSessions, _configuration.MaxPersistedSessions);
CheckForMaxCachedPayloads(GetCachedSessionFiles(), _configuration.MaxPersistedSessions);
}

public void SaveEventToCache(string id, string json)
{
var path = _eventsDirectory + "/" + id + EVENT_FILE_PREFIX;
var path = _eventsDirectory + "/" + id + EVENT_FILE_SUFFIX;
WritePayloadToDisk(json, path);
CheckForMaxCachedPayloads(_cachedEvents, _configuration.MaxPersistedEvents);
CheckForMaxCachedPayloads(GetCachedEventFiles(), _configuration.MaxPersistedEvents);
}

private void WritePayloadToDisk(string jsonData, string path)
{
File.WriteAllText(path, jsonData);
WriteFile(path, jsonData);
}

private void CheckForMaxCachedPayloads(string[] payloads, int maxPayloads)
Expand All @@ -127,38 +148,56 @@ private void RemoveOldestFiles(string[] filePaths, int numToRemove)
var ordered = filePaths.OrderBy(file => File.GetCreationTimeUtc(file)).ToArray();
foreach (var file in ordered.Take(numToRemove))
{
File.Delete(file);
}
DeleteFile(file);
}
}

public void RemoveCachedEvent(string id)
{
foreach (var cachedEventPath in _cachedEvents)
{
if (cachedEventPath.Contains(id))
{
File.Delete(cachedEventPath);
}
}
RemovePayloadWithID(GetCachedEventFiles(), id);
}

public void RemoveCachedSession(string id)
{
foreach (var cachedSessionPath in _cachedSessions)
RemovePayloadWithID(GetCachedSessionFiles(), id);
}

private void RemovePayloadWithID(string[] files, string id)
{
foreach (var path in files)
{
if (cachedSessionPath.Contains(id))
if (path.Contains(id))
{
File.Delete(cachedSessionPath);
DeleteFile(path);
return;
}
}
}

private string GetJsonFromCachePath(string path)
private void DeleteFile(string path)
{
if (File.Exists(path))
try
{
return File.ReadAllText(path);
}
File.Delete(path);
}catch{}
}

private void WriteFile(string path, string data)
{
try
{
File.WriteAllText(path, data);
}catch { }
}

private string GetJsonFromCachePath(string path)
{
try {
if (File.Exists(path))
{
return File.ReadAllText(path);
}
} catch { }
return null;
}

Expand Down Expand Up @@ -188,29 +227,45 @@ private static void CheckForDirectoryCreation()

public List<string> GetCachedEventIds()
{
var cachedEventIds = new List<string>();
var ordered = _cachedEvents.OrderBy(file => File.GetCreationTimeUtc(file)).ToArray();
return GetPayloadIDsFromDirectory(GetCachedEventFiles());
}

public List<string> GetCachedSessionIds()
{
return GetPayloadIDsFromDirectory(GetCachedSessionFiles());
}

private List<string> GetPayloadIDsFromDirectory(string[] files)
{
var names = new List<string>();
var ordered = GetCreationOrderedFiles(files);
foreach (var path in ordered)
{
cachedEventIds.Add(Path.GetFileNameWithoutExtension(path));
try
{
names.Add(Path.GetFileNameWithoutExtension(path));
}
catch { }
}
return cachedEventIds;
return names;
}

public List<string> GetCachedSessionIds()
private string[] GetCreationOrderedFiles(string[] files)
{
var cachedSessionIds = new List<string>();
var ordered = _cachedSessions.OrderBy(file => File.GetCreationTimeUtc(file)).ToArray();
foreach (var path in ordered)
try
{
var orderedFiles = files.OrderBy(file => File.GetCreationTimeUtc(file)).ToArray();
return orderedFiles;
}
catch
{
cachedSessionIds.Add(Path.GetFileNameWithoutExtension(path));
return new string[] { };
}
return cachedSessionIds;
}

public string GetCachedEvent(string id)
{
foreach (var path in _cachedEvents)
foreach (var path in GetCachedEventFiles())
{
if (path.Contains(id))
{
Expand All @@ -222,7 +277,7 @@ public string GetCachedEvent(string id)

public string GetCachedSession(string id)
{
foreach (var path in _cachedSessions)
foreach (var path in GetCachedSessionFiles())
{
if (path.Contains(id))
{
Expand Down

0 comments on commit 3981600

Please sign in to comment.