using System;
using System.IO;
using System.Text;
using Newtonsoft.Json;
using SyncEngine.Configuration;
namespace SyncEngine.MySql
{
/// Appends failed shop_sync_log API posts to logs/shop-sync-log-failed-YYYYMMDD.jsonl.
public static class ShopSyncLogLocalWriter
{
private static Func LogDirectoryProvider =
() => Path.Combine(EnvSettings.ExeDirectory(), "logs");
internal static void SetLogDirectoryProviderForTests(Func provider)
{
LogDirectoryProvider = provider ?? (() => Path.Combine(EnvSettings.ExeDirectory(), "logs"));
}
internal static void ResetLogDirectoryProviderForTests()
{
LogDirectoryProvider = () => Path.Combine(EnvSettings.ExeDirectory(), "logs");
}
/// Path to the file the record was appended to.
public static string WriteFailedApiPost(ShopSyncLogEntry entry, Exception mysqlEx, Exception apiEx)
{
var logDir = LogDirectoryProvider();
Directory.CreateDirectory(logDir);
var path = Path.Combine(logDir, "shop-sync-log-failed-" + DateTime.UtcNow.ToString("yyyyMMdd") + ".jsonl");
var record = new
{
logged_at = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"),
mysql_error = mysqlEx != null ? mysqlEx.Message : null,
api_error = apiEx != null ? apiEx.Message : null,
payload = ShopSyncLogApiClient.BuildPayload(entry)
};
File.AppendAllText(path, JsonConvert.SerializeObject(record) + Environment.NewLine, Encoding.UTF8);
return path;
}
}
}