commit c639553
default
·
2023-02-02 04:07:20 +0000 UTC
parent 108ed07
New function queue() (the global queue).
2 files changed,
+64,
-4
M
data.c
+29,
-2
1@@ -1066,7 +1066,7 @@ int send_email(char *msg)
2
3
4 void process_user_queue_item(snac *snac, xs_dict *q_item)
5-/* processes an item from the queue */
6+/* processes an item from the user queue */
7 {
8 char *type;
9 int queue_retry_max = xs_number_get(xs_dict_get(srv_config, "queue_retry_max"));
10@@ -1172,7 +1172,7 @@ void process_user_queue(snac *snac)
11 xs *q_item = dequeue(fn);
12
13 if (q_item == NULL) {
14- snac_log(snac, xs_fmt("process_queue q_item error"));
15+ snac_log(snac, xs_fmt("process_user_queue q_item error"));
16 continue;
17 }
18
19@@ -1181,6 +1181,33 @@ void process_user_queue(snac *snac)
20 }
21
22
23+void process_queue_item(xs_dict *q_item)
24+/* processes an item from the global queue */
25+{
26+}
27+
28+
29+void process_queue(void)
30+/* processes the global queue */
31+{
32+ xs *list = queue();
33+
34+ xs_list *p = list;
35+ xs_str *fn;
36+
37+ while (xs_list_iter(&p, &fn)) {
38+ xs *q_item = dequeue(fn);
39+
40+ if (q_item == NULL) {
41+ srv_log(xs_fmt("process_queue q_item error"));
42+ continue;
43+ }
44+
45+ process_queue_item(q_item);
46+ }
47+}
48+
49+
50 /** HTTP handlers */
51
52 int activitypub_get_handler(d_char *req, char *q_path,
M
data.c
+35,
-2
1@@ -86,6 +86,10 @@ int srv_open(char *basedir, int auto_upgrade)
2 if (error != NULL)
3 srv_log(error);
4
5+ /* create the queue/ subdir, just in case */
6+ xs *qdir = xs_fmt("%s/queue", srv_basedir);
7+ mkdir(qdir, 0755);
8+
9 #ifdef __OpenBSD__
10 char *v = xs_dict_get(srv_config, "disable_openbsd_security");
11
12@@ -1429,10 +1433,39 @@ xs_list *user_queue(snac *snac)
13 time_t t2 = atol(bn + 1);
14
15 if (t2 > t)
16- snac_debug(snac, 2, xs_fmt("queue not yet time for %s [%ld]", v, t));
17+ snac_debug(snac, 2, xs_fmt("user_queue not yet time for %s [%ld]", v, t));
18+ else {
19+ list = xs_list_append(list, v);
20+ snac_debug(snac, 2, xs_fmt("user_queue ready for %s", v));
21+ }
22+ }
23+
24+ return list;
25+}
26+
27+
28+xs_list *queue(void)
29+/* returns a list with filenames that can be dequeued */
30+{
31+ xs *spec = xs_fmt("%s/queue/" "*.json", srv_basedir);
32+ xs_list *list = xs_list_new();
33+ time_t t = time(NULL);
34+ xs_list *p;
35+ xs_val *v;
36+
37+ xs *fns = xs_glob(spec, 0, 0);
38+
39+ p = fns;
40+ while (xs_list_iter(&p, &v)) {
41+ /* get the retry time from the basename */
42+ char *bn = strrchr(v, '/');
43+ time_t t2 = atol(bn + 1);
44+
45+ if (t2 > t)
46+ srv_debug(2, xs_fmt("queue not yet time for %s [%ld]", v, t));
47 else {
48 list = xs_list_append(list, v);
49- snac_debug(snac, 2, xs_fmt("queue ready for %s", v));
50+ srv_debug(2, xs_fmt("queue ready for %s", v));
51 }
52 }
53