commit 928f22f

default  ·  2023-02-02 04:21:16 +0000 UTC
parent c639553
Email notifications have been moved to the global queue.
4 files changed,  +37, -25
M data.c
M snac.h
+25, -21
 1@@ -839,7 +839,7 @@ void notify(snac *snac, char *type, char *utype, char *actor, char *msg)
 2         body = xs_str_cat(body, s1);
 3     }
 4 
 5-    enqueue_email(snac, body, 0);
 6+    enqueue_email(body, 0);
 7 }
 8 
 9 
10@@ -1137,26 +1137,6 @@ void process_user_queue_item(snac *snac, xs_dict *q_item)
11             }
12         }
13     }
14-    else
15-    if (strcmp(type, "email") == 0) {
16-        /* send this email */
17-        xs_str *msg = xs_dict_get(q_item, "message");
18-        int retries = xs_number_get(xs_dict_get(q_item, "retries"));
19-
20-        if (!send_email(msg))
21-            snac_debug(snac, 1, xs_fmt("email message sent"));
22-        else {
23-            if (retries > queue_retry_max)
24-                snac_log(snac, xs_fmt("process_queue email giving up (errno: %d)", errno));
25-            else {
26-                /* requeue */
27-                snac_log(snac, xs_fmt(
28-                    "process_queue email requeue #%d (errno: %d)", retries + 1, errno));
29-
30-                enqueue_email(snac, msg, retries + 1);
31-            }
32-        }
33-    }
34 }
35 
36 
37@@ -1184,6 +1164,30 @@ void process_user_queue(snac *snac)
38 void process_queue_item(xs_dict *q_item)
39 /* processes an item from the global queue */
40 {
41+    char *type = xs_dict_get(q_item, "type");
42+    int queue_retry_max = xs_number_get(xs_dict_get(srv_config, "queue_retry_max"));
43+
44+    if (strcmp(type, "email") == 0) {
45+        /* send this email */
46+        xs_str *msg = xs_dict_get(q_item, "message");
47+        int retries = xs_number_get(xs_dict_get(q_item, "retries"));
48+
49+        if (!send_email(msg))
50+            srv_debug(1, xs_fmt("email message sent"));
51+        else {
52+            retries++;
53+
54+            if (retries > queue_retry_max)
55+                srv_log(xs_fmt("process_queue email giving up (errno: %d)", errno));
56+            else {
57+                /* requeue */
58+                srv_log(xs_fmt(
59+                    "process_queue email requeue #%d (errno: %d)", retries, errno));
60+
61+                enqueue_email(msg, retries);
62+            }
63+        }
64+    }
65 }
66 
67 
M data.c
+3, -3
 1@@ -1389,16 +1389,16 @@ void enqueue_output_by_actor(snac *snac, xs_dict *msg, xs_str *actor, int retrie
 2 }
 3 
 4 
 5-void enqueue_email(snac *snac, xs_str *msg, int retries)
 6+void enqueue_email(xs_str *msg, int retries)
 7 /* enqueues an email message to be sent */
 8 {
 9     xs *qmsg   = _new_qmsg("email", msg, retries);
10     char *ntid = xs_dict_get(qmsg, "ntid");
11-    xs *fn     = xs_fmt("%s/queue/%s.json", snac->basedir, ntid);
12+    xs *fn     = xs_fmt("%s/queue/%s.json", srv_basedir, ntid);
13 
14     qmsg = _enqueue_put(fn, qmsg);
15 
16-    snac_debug(snac, 1, xs_fmt("enqueue_email %d", retries));
17+    srv_debug(1, xs_fmt("enqueue_email %d", retries));
18 }
19 
20 
+3, -0
 1@@ -280,6 +280,9 @@ static void *queue_thread(void *arg)
 2             }
 3         }
 4 
 5+        /* global queue */
 6+        process_queue();
 7+
 8         /* time to purge? */
 9         if ((t = time(NULL)) > purge_time) {
10             pthread_t pth;
M snac.h
+6, -1
 1@@ -126,10 +126,11 @@ d_char *history_list(snac *snac);
 2 void enqueue_input(snac *snac, xs_dict *msg, xs_dict *req, int retries);
 3 void enqueue_output(snac *snac, xs_dict *msg, xs_str *inbox, int retries);
 4 void enqueue_output_by_actor(snac *snac, xs_dict *msg, xs_str *actor, int retries);
 5-void enqueue_email(snac *snac, xs_str *msg, int retries);
 6+void enqueue_email(xs_str *msg, int retries);
 7 void enqueue_message(snac *snac, char *msg);
 8 
 9 xs_list *user_queue(snac *snac);
10+xs_list *queue(void);
11 xs_dict *dequeue(const char *fn);
12 
13 void purge(snac *snac);
14@@ -165,7 +166,11 @@ int send_to_inbox(snac *snac, char *inbox, char *msg, d_char **payload, int *p_s
15 d_char *get_actor_inbox(snac *snac, char *actor);
16 int send_to_actor(snac *snac, char *actor, char *msg, d_char **payload, int *p_size, int timeout);
17 int is_msg_public(snac *snac, char *msg);
18+
19 void process_user_queue(snac *snac);
20+
21+void process_queue(void);
22+
23 void post(snac *snac, char *msg);
24 int activitypub_get_handler(d_char *req, char *q_path,
25                             char **body, int *b_size, char **ctype);