database cleanup mode
[citadel-docker.git] / ctdlvisor.c
index ece2e9dd34fa83495250e84d453a2589cbdadbf7..64e6c04c441b63e0e4ce4c1b8670e2ccdc94cbf1 100644 (file)
@@ -182,6 +182,7 @@ void main_loop(void) {
 int main(int argc, char **argv) {
        int a;
        int migrate_mode = 0;
+       int database_cleanup_mode = 0;
 
        fprintf(stderr, "ctdlvisor: Welcome to the Citadel System running in a container.\n");
        fprintf(stderr, "ctdlvisor: command line arguments: ");
@@ -211,7 +212,7 @@ int main(int argc, char **argv) {
        symlink(CTDL_DIR "/keys", "/usr/local/webcit/keys");
 
        /* parse command-line arguments */
-       while ((a=getopt(argc, argv, "cm")) != EOF) switch(a) {
+       while ((a=getopt(argc, argv, "cmd")) != EOF) switch(a) {
 
                // test this binary for compatibility and exit
                case 'c':
@@ -224,6 +225,11 @@ int main(int argc, char **argv) {
                        migrate_mode = 1;
                        break;
 
+               // run database_cleanup.sh only
+               case 'd':
+                       database_cleanup_mode = 1;
+                       break;
+
                // any other parameter makes it crash and burn
                default:
                        fprintf(stderr, "usage\n");
@@ -244,6 +250,17 @@ int main(int argc, char **argv) {
                kill(citserver_pid, SIGTERM);
        }
 
+       // "database cleanup mode" means we just start the server and then run database_cleanup.sh interactively
+       else if (database_cleanup_mode) {
+               citserver_pid = start_citadel();
+               fprintf(stderr, "ctdlvisor: waiting a moment for citserver to initialize...\n");
+               sleep(5);
+               char bin[1024];
+               sprintf(bin, "/usr/local/citadel/database_cleanup.sh -h %s", CTDL_DIR);
+               system(bin);
+               kill(citserver_pid, SIGTERM);
+       }
+
        // Otherwise, it's just a normal happy day in Citadel land.
        else {
                signal(SIGTERM, signal_handler);