]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Aws_s3: Allow to set action on failure
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 12 Aug 2021 17:16:42 +0000 (18:16 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 12 Aug 2021 17:16:42 +0000 (18:16 +0100)
src/plugins/lua/aws_s3.lua

index 9ea4a58e2f16adde9a883a12be8eac52f8d8d2f3..54a9c78734b5ebc8253247e329181407b6bedb28 100644 (file)
@@ -37,6 +37,7 @@ local settings_schema = ts.shape{
   s3_key_id = ts.string,
   s3_timeout = ts.number + ts.string / lua_util.parse_time_interval,
   enabled = ts.boolean:is_optional(),
+  fail_action = ts.string:is_optional(),
 }
 
 local function s3_aws_callback(task)
@@ -64,7 +65,18 @@ local function s3_aws_callback(task)
   }, task:get_content())
 
   local function s3_http_callback(http_err, code, body, headers)
-    rspamd_logger.errx('obj=%s, err=%s, code=%s, body=%s, headers=%s',
+
+    if http_err then
+      if settings.fail_action then
+        task:set_pre_result(settings.fail_action,
+            string.format('S3 save failed: %s', http_err), N,
+            nil, nil, 'least')
+      end
+      rspamd_logger.errx(task, 'cannot save %s to AWS S3: %s', path, http_err)
+    else
+      rspamd_logger.messagex(task, 'saved message successfully in S3 object %s', path)
+    end
+    lua_util.debugm(N, task, 'obj=%s, err=%s, code=%s, body=%s, headers=%s',
       path, http_err, code, body, headers)
   end
 
@@ -98,7 +110,7 @@ rspamd_logger.infox(rspamd_config, 'enabled AWS s3 dump to %s', res.s3_bucket)
 settings = res
 rspamd_config:register_symbol({
   name = 'EXPORT_AWS_S3',
-  type = 'idempotent',
+  type = settings.fail_action and 'postfilter' or 'idempotent',
   callback = s3_aws_callback,
   priority = 10,
   flags = 'empty,explicit_disable,ignore_passthrough,nostat',