Extend web_hook_logs table with `url_hash` field
Extracted from #382357 (closed) to simplify the issue flow.
Problem
Described in the related issue.
web_hook_logs
table
Step 1: Add a new column to the Proposal
Add a new column to the web_hook_logs
table (e.g. url_hash
), which stores a SHA1 hash of the interpolated hook URL at the time of execution.
- Migration 1
add_column :web_hook_logs, :url_hash
- Migration 2
add_text_limit :web_hook_logs, :url_hash, 255
- Update the
WebHookLog
class to store SHA hash (note: the example below uses SHA256, because SHA1 is likely to become non-compliant in the near future.):
def url_hash=(value)
super(Digest::SHA256.hexdigest(value))
end
- Update the
WebHookService
class to pass the interpolated hook URL:
log_data = {
trigger: hook_name,
url: hook.url,
+ url_hash: hook.interpolated_url,
execution_duration: execution_duration,
request_headers: build_headers,
request_data: data,
response_headers: safe_response_headers(response),
response_body: safe_response_body(response),
response_status: response.code,
internal_error_message: error_message