New command-line option purge.

This commit is contained in:
default 2022-10-04 18:46:12 +02:00
parent 5192e28444
commit ae06064e4d
4 changed files with 53 additions and 1 deletions

33
data.c
View file

@ -996,3 +996,36 @@ d_char *dequeue(snac *snac, char *fn)
return obj; return obj;
} }
void purge(snac *snac)
/* do the purge */
{
int tpd = xs_number_get(xs_dict_get(srv_config, "timeline_purge_days"));
time_t mt = time(NULL) - tpd * 24 * 3600;
char *p, *v;
xs *t_spec = xs_fmt("%s/timeline/" "*.json", snac->basedir);
xs *t_list = xs_glob(t_spec, 0, 0);
p = t_list;
while (xs_list_iter(&p, &v)) {
if (mtime(v) < mt) {
/* older than the minimum time: delete it */
unlink(v);
snac_debug(snac, 1, xs_fmt("purged %s", v));
}
}
xs *a_spec = xs_fmt("%s/actors/" "*.json", snac->basedir);
xs *a_list = xs_glob(a_spec, 0, 0);
p = a_list;
while (xs_list_iter(&p, &v)) {
if (mtime(v) < mt) {
/* older than the minimum time: delete it */
unlink(v);
snac_debug(snac, 1, xs_fmt("purged %s", v));
}
}
}

18
main.c
View file

@ -18,12 +18,12 @@ int usage(void)
printf("init [{basedir}] Initializes the database\n"); printf("init [{basedir}] Initializes the database\n");
printf("adduser {basedir} [{uid}] Adds a new user\n"); printf("adduser {basedir} [{uid}] Adds a new user\n");
printf("httpd {basedir} Starts the HTTPD daemon\n"); printf("httpd {basedir} Starts the HTTPD daemon\n");
printf("purge {basedir} Purges old data\n");
printf("webfinger {basedir} {user} Queries about a @user@host or actor\n"); printf("webfinger {basedir} {user} Queries about a @user@host or actor\n");
printf("queue {basedir} {uid} Processes a user queue\n"); printf("queue {basedir} {uid} Processes a user queue\n");
printf("follow {basedir} {uid} {actor} Follows an actor\n"); printf("follow {basedir} {uid} {actor} Follows an actor\n");
// printf("check {basedir} [{uid}] Checks the database\n"); // printf("check {basedir} [{uid}] Checks the database\n");
// printf("purge {basedir} [{uid}] Purges old data\n");
// printf("update {basedir} {uid} Sends a user update to followers\n"); // printf("update {basedir} {uid} Sends a user update to followers\n");
// printf("passwd {basedir} {uid} Sets the password for {uid}\n"); // printf("passwd {basedir} {uid} Sets the password for {uid}\n");
@ -95,6 +95,22 @@ int main(int argc, char *argv[])
return 0; return 0;
} }
if (strcmp(cmd, "purge") == 0) {
/* iterate all users */
xs *list = user_list();
char *p, *uid;
p = list;
while (xs_list_iter(&p, &uid)) {
if (user_open(&snac, uid)) {
purge(&snac);
user_free(&snac);
}
}
return 0;
}
if ((user = GET_ARGV()) == NULL) if ((user = GET_ARGV()) == NULL)
return usage(); return usage();

2
snac.h
View file

@ -94,6 +94,8 @@ void enqueue_output(snac *snac, char *msg, char *actor, int retries);
d_char *queue(snac *snac); d_char *queue(snac *snac);
d_char *dequeue(snac *snac, char *fn); d_char *dequeue(snac *snac, char *fn);
void purge(snac *snac);
d_char *http_signed_request(snac *snac, char *method, char *url, d_char *http_signed_request(snac *snac, char *method, char *url,
d_char *headers, d_char *headers,
d_char *body, int b_size, d_char *body, int b_size,

View file

@ -46,6 +46,7 @@ time_t xs_parse_time(const char *str, const char *fmt, int local)
memset(&tm, '\0', sizeof(tm)); memset(&tm, '\0', sizeof(tm));
strptime(str, fmt, &tm); strptime(str, fmt, &tm);
/* try to guess the Daylight Saving Time */
if (local) if (local)
tm.tm_isdst = -1; tm.tm_isdst = -1;