|
|
@ -14,7 +14,6 @@ using System.Threading; |
|
|
using System.Threading.Tasks; |
|
|
using System.Threading.Tasks; |
|
|
using CsvHelper; |
|
|
using CsvHelper; |
|
|
using CsvHelper.Configuration; |
|
|
using CsvHelper.Configuration; |
|
|
using NodaTime; |
|
|
|
|
|
using Squidex.Infrastructure; |
|
|
using Squidex.Infrastructure; |
|
|
using Squidex.Infrastructure.Log.Store; |
|
|
using Squidex.Infrastructure.Log.Store; |
|
|
|
|
|
|
|
|
@ -24,6 +23,7 @@ namespace Squidex.Domain.Apps.Entities.Apps |
|
|
{ |
|
|
{ |
|
|
private const string FieldAuthClientId = "AuthClientId"; |
|
|
private const string FieldAuthClientId = "AuthClientId"; |
|
|
private const string FieldAuthUserId = "AuthUserId"; |
|
|
private const string FieldAuthUserId = "AuthUserId"; |
|
|
|
|
|
private const string FieldBytes = "Bytes"; |
|
|
private const string FieldCosts = "Costs"; |
|
|
private const string FieldCosts = "Costs"; |
|
|
private const string FieldRequestElapsedMs = "RequestElapsedMs"; |
|
|
private const string FieldRequestElapsedMs = "RequestElapsedMs"; |
|
|
private const string FieldRequestMethod = "RequestMethod"; |
|
|
private const string FieldRequestMethod = "RequestMethod"; |
|
|
@ -39,26 +39,27 @@ namespace Squidex.Domain.Apps.Entities.Apps |
|
|
this.requestLogStore = requestLogStore; |
|
|
this.requestLogStore = requestLogStore; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public Task LogAsync(Guid appId, Instant timestamp, string? requestMethod, string? requestPath, string? userId, string? clientId, long elapsedMs, double costs) |
|
|
public Task LogAsync(Guid appId, RequestLog request) |
|
|
{ |
|
|
{ |
|
|
var request = new Request |
|
|
var storedRequest = new Request |
|
|
{ |
|
|
{ |
|
|
Key = appId.ToString(), |
|
|
Key = appId.ToString(), |
|
|
Properties = new Dictionary<string, string> |
|
|
Properties = new Dictionary<string, string> |
|
|
{ |
|
|
{ |
|
|
[FieldCosts] = costs.ToString(CultureInfo.InvariantCulture) |
|
|
[FieldCosts] = request.Costs.ToString(CultureInfo.InvariantCulture) |
|
|
}, |
|
|
}, |
|
|
Timestamp = timestamp |
|
|
Timestamp = request.Timestamp |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
Append(request, FieldAuthClientId, clientId); |
|
|
Append(storedRequest, FieldAuthClientId, request.UserClientId); |
|
|
Append(request, FieldAuthUserId, userId); |
|
|
Append(storedRequest, FieldAuthUserId, request.UserId); |
|
|
Append(request, FieldCosts, costs.ToString(CultureInfo.InvariantCulture)); |
|
|
Append(storedRequest, FieldBytes, request.Bytes); |
|
|
Append(request, FieldRequestElapsedMs, elapsedMs.ToString(CultureInfo.InvariantCulture)); |
|
|
Append(storedRequest, FieldCosts, request.Costs); |
|
|
Append(request, FieldRequestMethod, requestMethod); |
|
|
Append(storedRequest, FieldRequestElapsedMs, request.ElapsedMs); |
|
|
Append(request, FieldRequestPath, requestPath); |
|
|
Append(storedRequest, FieldRequestMethod, request.RequestMethod); |
|
|
|
|
|
Append(storedRequest, FieldRequestPath, request.RequestPath); |
|
|
|
|
|
|
|
|
return requestLogStore.LogAsync(request); |
|
|
return requestLogStore.LogAsync(storedRequest); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public async Task ReadLogAsync(Guid appId, DateTime fromDate, DateTime toDate, Stream stream, CancellationToken ct = default) |
|
|
public async Task ReadLogAsync(Guid appId, DateTime fromDate, DateTime toDate, Stream stream, CancellationToken ct = default) |
|
|
@ -77,6 +78,7 @@ namespace Squidex.Domain.Apps.Entities.Apps |
|
|
csv.WriteField(FieldCosts); |
|
|
csv.WriteField(FieldCosts); |
|
|
csv.WriteField(FieldAuthClientId); |
|
|
csv.WriteField(FieldAuthClientId); |
|
|
csv.WriteField(FieldAuthUserId); |
|
|
csv.WriteField(FieldAuthUserId); |
|
|
|
|
|
csv.WriteField(FieldBytes); |
|
|
|
|
|
|
|
|
await csv.NextRecordAsync(); |
|
|
await csv.NextRecordAsync(); |
|
|
|
|
|
|
|
|
@ -89,6 +91,7 @@ namespace Squidex.Domain.Apps.Entities.Apps |
|
|
csv.WriteField(GetDouble(request, FieldCosts)); |
|
|
csv.WriteField(GetDouble(request, FieldCosts)); |
|
|
csv.WriteField(GetString(request, FieldAuthClientId)); |
|
|
csv.WriteField(GetString(request, FieldAuthClientId)); |
|
|
csv.WriteField(GetString(request, FieldAuthUserId)); |
|
|
csv.WriteField(GetString(request, FieldAuthUserId)); |
|
|
|
|
|
csv.WriteField(GetString(request, FieldBytes)); |
|
|
|
|
|
|
|
|
await csv.NextRecordAsync(); |
|
|
await csv.NextRecordAsync(); |
|
|
}, appId.ToString(), fromDate, toDate, ct); |
|
|
}, appId.ToString(), fromDate, toDate, ct); |
|
|
@ -108,6 +111,16 @@ namespace Squidex.Domain.Apps.Entities.Apps |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private static void Append(Request request, string key, double value) |
|
|
|
|
|
{ |
|
|
|
|
|
request.Properties[key] = value.ToString(CultureInfo.InvariantCulture); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private static void Append(Request request, string key, long value) |
|
|
|
|
|
{ |
|
|
|
|
|
request.Properties[key] = value.ToString(CultureInfo.InvariantCulture); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
private static string GetString(Request request, string key) |
|
|
private static string GetString(Request request, string key) |
|
|
{ |
|
|
{ |
|
|
return request.Properties.GetValueOrDefault(key, string.Empty)!; |
|
|
return request.Properties.GetValueOrDefault(key, string.Empty)!; |
|
|
|