mirror of
https://github.com/CommunityOx/ox_lib.git
synced 2026-08-17 06:56:03 +01:00
refactor(server/logger): batch log submissions
Create a temporary table and submit logs in a single batch after 500ms. Includes some micro-optimisation and a new convar to set logging service.
This commit is contained in:
@@ -1,30 +1,50 @@
|
||||
local key = GetConvar('datadog:key', '')
|
||||
local service = GetConvar('ox:logger', 'datadog')
|
||||
local hostname = GetConvar('sv_projectName', 'fxserver')
|
||||
local buffer
|
||||
local bufferSize = 0
|
||||
|
||||
if key ~= '' then
|
||||
local site = ('https://http-intake.logs.%s/api/v2/logs'):format(GetConvar('datadog:site', 'datadoghq.com'))
|
||||
local resourceName = GetCurrentResourceName()
|
||||
key = key:gsub("[\'\"]", '')
|
||||
local function badResponse(endpoint, response)
|
||||
print(('unable to submit logs to %s\n%s'):format(endpoint, json.encode(response, { indent = true })))
|
||||
end
|
||||
|
||||
function lib.logger(source, event, message, ...)
|
||||
local data = json.encode({
|
||||
hostname = resourceName,
|
||||
service = event,
|
||||
message = message,
|
||||
ddsource = tostring(source),
|
||||
ddtags = string.strjoin(',', string.tostringall(...))
|
||||
})
|
||||
if service == 'datadog' then
|
||||
local key = GetConvar('datadog:key', ''):gsub("[\'\"]", '')
|
||||
|
||||
PerformHttpRequest(site, function(status, _, _, response)
|
||||
if status ~= 202 then
|
||||
-- Thanks, I hate it
|
||||
response = json.decode(response:sub(10)).errors[1]
|
||||
print(('unable to submit logs to %s\n%s'):format(site, json.encode(response, {indent=true})))
|
||||
end
|
||||
end, 'POST', data, {
|
||||
['Content-Type'] = 'application/json',
|
||||
['DD-API-KEY'] = key
|
||||
})
|
||||
end
|
||||
if key ~= '' then
|
||||
local endpoint = ('https://http-intake.logs.%s/api/v2/logs'):format(GetConvar('datadog:site', 'datadoghq.com'))
|
||||
|
||||
local headers = {
|
||||
['Content-Type'] = 'application/json',
|
||||
['DD-API-KEY'] = key,
|
||||
}
|
||||
|
||||
function lib.logger(source, event, message, ...)
|
||||
if not buffer then
|
||||
buffer = {}
|
||||
|
||||
SetTimeout(500, function()
|
||||
PerformHttpRequest(endpoint, function(status, _, _, response)
|
||||
if status ~= 202 then
|
||||
badResponse(endpoint, json.decode(response:sub(10)).errors[1])
|
||||
end
|
||||
end, 'POST', json.encode(buffer), headers)
|
||||
|
||||
buffer = nil
|
||||
bufferSize = 0
|
||||
end)
|
||||
end
|
||||
|
||||
bufferSize += 1
|
||||
buffer[bufferSize] = {
|
||||
hostname = hostname,
|
||||
service = event,
|
||||
message = message,
|
||||
resource = cache.resource,
|
||||
ddsource = tostring(source),
|
||||
ddtags = string.strjoin(',', string.tostringall(...))
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return lib.logger or function() end
|
||||
|
||||
Reference in New Issue
Block a user