From 66b494d366df625f69b8258428a0ecde48bdb2ab Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Sun, 1 Nov 2020 20:00:38 -0800 Subject: [PATCH 01/15] Fix typo in Content-Type header --- raven/senders/luasocket.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raven/senders/luasocket.lua b/raven/senders/luasocket.lua index ded028c..dbb5fac 100644 --- a/raven/senders/luasocket.lua +++ b/raven/senders/luasocket.lua @@ -36,7 +36,7 @@ function mt:send(json_str) method = "POST", url = self.server, headers = { - ['Content-Type'] = 'applicaion/json', + ['Content-Type'] = 'application/json', ['User-Agent'] = "raven-lua-socket/" .. _VERSION, ['X-Sentry-Auth'] = generate_auth_header(self), ["Content-Length"] = tostring(#json_str), From c697b1bcee3aad031e55cf483d29c8b9671126f6 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Sun, 1 Nov 2020 20:03:13 -0800 Subject: [PATCH 02/15] Add support for more known Sentry tags * `environment` in the initalizer or each event * `user` in the initalizer or each event * `request` in each event * `context` in each event --- raven/init.lua | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/raven/init.lua b/raven/init.lua index 452f4f3..c9788da 100644 --- a/raven/init.lua +++ b/raven/init.lua @@ -136,6 +136,8 @@ function _M.new(conf) logger = conf.logger or "root", tags = conf.tags or nil, extra = conf.extra or nil, + user = conf.user or nil, + environment = conf.environment or nil } return setmetatable(obj, raven_mt) @@ -296,11 +298,12 @@ function raven_mt:send_report(json, conf) end end - json.event_id = event_id - json.timestamp = iso8601() - json.level = self.level - json.platform = "lua" - json.logger = self.logger + json.event_id = event_id + json.timestamp = iso8601() + json.level = self.level + json.platform = "lua" + json.logger = self.logger + json.environment = self.environment if conf then json.tags = merge_tables(conf.tags, self.tags) @@ -309,6 +312,15 @@ function raven_mt:send_report(json, conf) if conf.level then json.level = conf.level end + if conf.user then + json.user = merge_tables(conf.user, self.user) + end + if conf.request then + json.request = conf.request + end + if conf.context then + json.context = conf.context + end else json.tags = self.tags json.extra = self.extra From 6d4ebd6f25307935f5a55f9248a26d093c13a9a1 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Mon, 2 Nov 2020 01:59:13 -0800 Subject: [PATCH 03/15] Use `_M.get_request_data()` as a better way to augment an event. * fix a typo: context should be contexts --- raven/init.lua | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/raven/init.lua b/raven/init.lua index c9788da..b5a5ce9 100644 --- a/raven/init.lua +++ b/raven/init.lua @@ -136,7 +136,6 @@ function _M.new(conf) logger = conf.logger or "root", tags = conf.tags or nil, extra = conf.extra or nil, - user = conf.user or nil, environment = conf.environment or nil } @@ -150,6 +149,15 @@ function _M.get_server_name() return "undefined" end +--- This method is reponsible to return the `request` field of an event. +-- The default implementation just returns `{}`, users are encouraged +-- to override this to something more sensible. +-- See [Sentry's docs](https://develop.sentry.dev/sdk/event-payloads/request/) +-- for the list of allowed properties. +function _M.get_request_data() + return {} +end + --- This table can be used to tune the message reporting. -- @field tags Tags for the message, they will be coalesced with the ones -- provided in the @{sentry_conf} table used in the constructor if any. In @@ -315,17 +323,15 @@ function raven_mt:send_report(json, conf) if conf.user then json.user = merge_tables(conf.user, self.user) end - if conf.request then - json.request = conf.request - end - if conf.context then - json.context = conf.context + if conf.contexts then + json.contexts = conf.contexts end else json.tags = self.tags json.extra = self.extra end + json.request = _M.get_request_data() json.server_name = _M.get_server_name() local json_str = json_encode(json) From 9bd58424dd79e29f83a4b29ffa4360c375bd061a Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 4 Nov 2020 03:19:46 -0800 Subject: [PATCH 04/15] Add release as an optional field --- raven/init.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/raven/init.lua b/raven/init.lua index b5a5ce9..1051a60 100644 --- a/raven/init.lua +++ b/raven/init.lua @@ -136,7 +136,8 @@ function _M.new(conf) logger = conf.logger or "root", tags = conf.tags or nil, extra = conf.extra or nil, - environment = conf.environment or nil + environment = conf.environment or nil, + release = conf.release or nil } return setmetatable(obj, raven_mt) From 7918108238c7b8d1048fe23da05ca7f6f5f218c6 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Thu, 25 Feb 2021 20:18:34 -0800 Subject: [PATCH 05/15] Add function for a release field --- raven/init.lua | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/raven/init.lua b/raven/init.lua index 1051a60..5426a6a 100644 --- a/raven/init.lua +++ b/raven/init.lua @@ -159,6 +159,12 @@ function _M.get_request_data() return {} end +--- This method can be used to tag a release in Sentry. +-- Typically you can use it with a commit hash. +function _M.get_release() + return '' +end + --- This table can be used to tune the message reporting. -- @field tags Tags for the message, they will be coalesced with the ones -- provided in the @{sentry_conf} table used in the constructor if any. In @@ -334,6 +340,7 @@ function raven_mt:send_report(json, conf) json.request = _M.get_request_data() json.server_name = _M.get_server_name() + json.releae = _M.get_release() local json_str = json_encode(json) local ok, err = self.sender:send(json_str) From 548427b2e3cd4f35b2cd4e2150a3e95703d8c495 Mon Sep 17 00:00:00 2001 From: Daniela Bento Date: Wed, 7 Apr 2021 08:41:08 +0100 Subject: [PATCH 06/15] Fix release name --- raven/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raven/init.lua b/raven/init.lua index 5426a6a..0a8cb8c 100644 --- a/raven/init.lua +++ b/raven/init.lua @@ -340,7 +340,7 @@ function raven_mt:send_report(json, conf) json.request = _M.get_request_data() json.server_name = _M.get_server_name() - json.releae = _M.get_release() + json.release = _M.get_release() local json_str = json_encode(json) local ok, err = self.sender:send(json_str) From b208dfae993975cbf9fde0deb32fa7f0d6ab2544 Mon Sep 17 00:00:00 2001 From: Daniela Bento Date: Wed, 7 Apr 2021 09:05:43 +0100 Subject: [PATCH 07/15] Use self.release --- raven/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raven/init.lua b/raven/init.lua index 0a8cb8c..48a3bfb 100644 --- a/raven/init.lua +++ b/raven/init.lua @@ -319,6 +319,7 @@ function raven_mt:send_report(json, conf) json.platform = "lua" json.logger = self.logger json.environment = self.environment + json.release = self.release if conf then json.tags = merge_tables(conf.tags, self.tags) @@ -340,7 +341,6 @@ function raven_mt:send_report(json, conf) json.request = _M.get_request_data() json.server_name = _M.get_server_name() - json.release = _M.get_release() local json_str = json_encode(json) local ok, err = self.sender:send(json_str) From d9cc125378e4d139be30e73670c0f81239a43dfd Mon Sep 17 00:00:00 2001 From: Daniela Bento Date: Wed, 7 Apr 2021 10:07:18 +0100 Subject: [PATCH 08/15] Add server_name --- raven/init.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/raven/init.lua b/raven/init.lua index 48a3bfb..ecdbfae 100644 --- a/raven/init.lua +++ b/raven/init.lua @@ -137,7 +137,8 @@ function _M.new(conf) tags = conf.tags or nil, extra = conf.extra or nil, environment = conf.environment or nil, - release = conf.release or nil + release = conf.release or nil, + server_name = conf.server_name or nil } return setmetatable(obj, raven_mt) @@ -340,7 +341,7 @@ function raven_mt:send_report(json, conf) end json.request = _M.get_request_data() - json.server_name = _M.get_server_name() + json.server_name = self.server_name or _M.get_server_name() local json_str = json_encode(json) local ok, err = self.sender:send(json_str) From d77a92759f1186cc00116bf86cd5c0ada2b9b522 Mon Sep 17 00:00:00 2001 From: Daniela Bento Date: Wed, 7 Apr 2021 10:16:09 +0100 Subject: [PATCH 09/15] Experiment to add http_host into request_data --- raven/senders/ngx.lua | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/raven/senders/ngx.lua b/raven/senders/ngx.lua index 05bf470..ffa3293 100644 --- a/raven/senders/ngx.lua +++ b/raven/senders/ngx.lua @@ -240,4 +240,11 @@ function _M.get_server_name() return "undefined" end +function _M.get_request_data() + local request = { + host = ngx.var.http_host or nil + } + return request +end + return _M From 54e1997b33bb6b9a534f2036477bd0346b97542c Mon Sep 17 00:00:00 2001 From: Daniela Bento Date: Wed, 7 Apr 2021 10:27:58 +0100 Subject: [PATCH 10/15] Add release or get_release override --- raven/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raven/init.lua b/raven/init.lua index ecdbfae..0bed5b4 100644 --- a/raven/init.lua +++ b/raven/init.lua @@ -320,7 +320,6 @@ function raven_mt:send_report(json, conf) json.platform = "lua" json.logger = self.logger json.environment = self.environment - json.release = self.release if conf then json.tags = merge_tables(conf.tags, self.tags) @@ -342,6 +341,7 @@ function raven_mt:send_report(json, conf) json.request = _M.get_request_data() json.server_name = self.server_name or _M.get_server_name() + json.release = self.release or _M.get_release() local json_str = json_encode(json) local ok, err = self.sender:send(json_str) From 7206ff7f87ce9393f8e4449c4c75005d80c26e5c Mon Sep 17 00:00:00 2001 From: Daniela Bento Date: Wed, 7 Apr 2021 13:54:22 +0100 Subject: [PATCH 11/15] Validate get_request_data --- raven/senders/ngx.lua | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/raven/senders/ngx.lua b/raven/senders/ngx.lua index ffa3293..2ac6400 100644 --- a/raven/senders/ngx.lua +++ b/raven/senders/ngx.lua @@ -240,11 +240,32 @@ function _M.get_server_name() return "undefined" end +--- Returns the value of the `request_data` variable if possible. +-- Otherwise (wrong phase), this will return {}. +-- +-- It is intended to be used as a `get_request_data` override on the main raven +-- instance. +-- +-- @usage +-- local raven_ngx = require("raven.senders.ngx") +-- local rvn = raven.new(...) +-- rvn.get_quest_data = raven_ngx.get_request_data function _M.get_request_data() - local request = { - host = ngx.var.http_host or nil - } - return request + local phase = ngx.get_phase() + -- the ngx.var.* API is not available in all contexts + if phase == "set" or + phase == "rewrite" or + phase == "access" or + phase == "content" or + phase == "header_filter" or + phase == "body_filter" or + phase == "log" + then + return { + host = ngx.var.http_host or nil + } + end + return {} end return _M From 29ef9b63342b1d4b6d93451851d5f62ca8f0a511 Mon Sep 17 00:00:00 2001 From: Daniela Bento Date: Wed, 7 Apr 2021 13:57:21 +0100 Subject: [PATCH 12/15] Add support for release and server_name --- raven/senders/ngx.lua | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/raven/senders/ngx.lua b/raven/senders/ngx.lua index 2ac6400..142b994 100644 --- a/raven/senders/ngx.lua +++ b/raven/senders/ngx.lua @@ -249,7 +249,7 @@ end -- @usage -- local raven_ngx = require("raven.senders.ngx") -- local rvn = raven.new(...) --- rvn.get_quest_data = raven_ngx.get_request_data +-- rvn.get_request_data = raven_ngx.get_request_data function _M.get_request_data() local phase = ngx.get_phase() -- the ngx.var.* API is not available in all contexts @@ -262,10 +262,13 @@ function _M.get_request_data() phase == "log" then return { - host = ngx.var.http_host or nil + caller = "nginx", + host = ngx.var.http_host or nil, } end - return {} + return { + caller = "nginx", + } end return _M From 096a3851106fabb445bfc4f5d0b95e3c3698e544 Mon Sep 17 00:00:00 2001 From: Daniela Bento Date: Thu, 8 Apr 2021 07:58:27 +0100 Subject: [PATCH 13/15] Add data into ngx get_request_data --- raven/senders/ngx.lua | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/raven/senders/ngx.lua b/raven/senders/ngx.lua index 142b994..5e92548 100644 --- a/raven/senders/ngx.lua +++ b/raven/senders/ngx.lua @@ -263,7 +263,13 @@ function _M.get_request_data() then return { caller = "nginx", + method = ngx.var.request_method or nil, host = ngx.var.http_host or nil, + url = ngx.var.request_uri or nil, + query_string = ngx.var.query_string or nil, + env = { + REMOTE_ADDR = ngx.var.remote_addr or nil, + }, } end return { From c8c436fa76dc3bda5003f035f65ae7aad9f53ccd Mon Sep 17 00:00:00 2001 From: Daniela Bento Date: Sat, 25 Sep 2021 13:55:47 +0100 Subject: [PATCH 14/15] Add more information into ngx raven sender. It was added upstream information which can be used when available. --- raven/senders/ngx.lua | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/raven/senders/ngx.lua b/raven/senders/ngx.lua index 5e92548..9d63553 100644 --- a/raven/senders/ngx.lua +++ b/raven/senders/ngx.lua @@ -268,8 +268,33 @@ function _M.get_request_data() url = ngx.var.request_uri or nil, query_string = ngx.var.query_string or nil, env = { + -- some information can be only accessed if the request is at log phase + HOSTNAME = ngx.var.hostname, + METHOD = ngx.var.request_method or nil, + BODY_BYTES_SENT = ngx.var.body_bytes_sent or nil, + BYTES_RECEIVED = ngx.var.bytes_received or nil, + BYTES_SENT = ngx.var.bytes_sent or nil, + NGINX_VERSION = ngx.var.nginx_version or nil, REMOTE_ADDR = ngx.var.remote_addr or nil, - }, + REMOTE_PORT = ngx.var.remote_port or nil, + REQUEST_TIME = ngx.var.request_time or nil, + STATUS = ngx.var.status or nil, + USER_AGENT = ngx.var.http_user_agent or nil, + CONTENT_TYPE = ngx.var.http_content_type or nil, + CONTENT_LENGTH = ngx.var.http_content_length or nil, + -- proxy related information + PROXY_ADD_X_FORWARDED_FOR = ngx.var.proxy_add_x_forwarded_for or nil, + UPSTREAM_ADDR = ngx.var.upstream_add or nil, + UPSTREAM_BYTES_RECEIVED = ngx.var.upstream_bytes_received or nil, + UPSTREAM_BYTES_SENT = ngx.var.upstream_bytes_sent or nil, + UPSTREAM_CACHE_STATUS = ngx.var.upstream_cache_status or nil, + UPSTREAM_CONNECT_TIME = ngx.var.upstream_connect_time or nil, + UPSTREAM_FIRST_BYTE_TIME = ngx.var.upstream_first_byte_time or nil, + UPSTREAM_HEADER_TIME = ngx.var.upstream_header_time or nil, + UPSTREAM_RESPONSE_LENGTH = ngx.var.upstream_response_length or nil, + UPSTREAM_RESPONSE_TIME = ngx.var.upstream_response_time or nil, + UPSTREAM_STATUS = ngx.var.upstream_status or nil, + }, } end return { From 546cd7705afe249cef059c6a550222aad2d2b39f Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Mon, 1 Aug 2022 10:07:45 -0700 Subject: [PATCH 15/15] Sentry `release` should be `nil` when not set Thanks to @nevmerzhitsky for the correction. --- raven/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raven/init.lua b/raven/init.lua index 0bed5b4..9e53b97 100644 --- a/raven/init.lua +++ b/raven/init.lua @@ -163,7 +163,7 @@ end --- This method can be used to tag a release in Sentry. -- Typically you can use it with a commit hash. function _M.get_release() - return '' + return nil end --- This table can be used to tune the message reporting.