From 587467f82b35ce7e2b0cf9bf1916fda505f630ca Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Sun, 16 Nov 2014 17:46:25 -0500 Subject: [PATCH] Added tags to our export format. This will be used by future tools to display a progress bar during export. --- citadel/modules/migrate/serv_migrate.c | 44 ++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/citadel/modules/migrate/serv_migrate.c b/citadel/modules/migrate/serv_migrate.c index 6e7f2dbbf..97181a1c6 100644 --- a/citadel/modules/migrate/serv_migrate.c +++ b/citadel/modules/migrate/serv_migrate.c @@ -12,6 +12,20 @@ * GNU General Public License for more details. */ +/* + * Explanation of tags: + * + * 0% nothing + * 1% finished exporting config + * 2% finished exporting control + * 7% finished exporting users + * 12% finished exporting openids + * 17% finished exporting rooms + * 18% finished exporting floors + * 25% finished exporting visits + * 100% finished exporting messages + */ + #include "sysdep.h" #include #include @@ -56,6 +70,7 @@ char migr_tempfilename1[PATH_MAX]; char migr_tempfilename2[PATH_MAX]; FILE *migr_global_message_list; +int total_msgs = 0; /* @@ -184,6 +199,19 @@ void migr_export_rooms(void) { if (system(cmd) != 0) syslog(LOG_ALERT, "Error %d\n", errno); snprintf(cmd, sizeof cmd, "uniq <%s >%s", migr_tempfilename2, migr_tempfilename1); if (system(cmd) != 0) syslog(LOG_ALERT, "Error %d\n", errno); + + + snprintf(cmd, sizeof cmd, "wc -l %s", migr_tempfilename1); + FILE *fp = popen(cmd, "r"); + if (fp) { + fgets(cmd, sizeof cmd, fp); + pclose(fp); + total_msgs = atoi(cmd); + } + else { + total_msgs = 1; // any nonzero just to keep it from barfing + } + syslog(LOG_DEBUG, "Total messages to be exported: %d", total_msgs); } @@ -357,6 +385,8 @@ void migr_export_messages(void) { char buf[SIZ]; long msgnum; int count = 0; + int progress = 0; + int prev_progress = 0; CitContext *Ctx; Ctx = CC; @@ -370,6 +400,11 @@ void migr_export_messages(void) { migr_export_message(msgnum); ++count; } + progress = (count * 74 / total_msgs) + 25 ; + if ((progress > prev_progress) && (progress < 100)) { + cprintf("%d\n", progress); + } + prev_progress = progress; } fclose(migr_global_message_list); } @@ -393,6 +428,7 @@ void migr_do_export(void) { client_write("\n", 40); client_write("\n", 23); cprintf("%d\n", REV_LEVEL); + cprintf("%d\n", 0); /* export the config file (this is done using x-macros) */ client_write("\n", 9); @@ -471,6 +507,7 @@ void migr_do_export(void) { cprintf("%d\n", config.c_nntp_port); cprintf("%d\n", config.c_nntps_port); client_write("\n", 10); + cprintf("%d\n", 1); /* Export the control file */ get_control(); @@ -481,14 +518,21 @@ void migr_do_export(void) { cprintf("%ld\n", CitControl.MMnextroom); cprintf("%d\n", CitControl.version); client_write("\n", 11); + cprintf("%d\n", 2); if (Ctx->kill_me == 0) migr_export_users(); + cprintf("%d\n", 7); if (Ctx->kill_me == 0) migr_export_openids(); + cprintf("%d\n", 12); if (Ctx->kill_me == 0) migr_export_rooms(); + cprintf("%d\n", 17); if (Ctx->kill_me == 0) migr_export_floors(); + cprintf("%d\n", 18); if (Ctx->kill_me == 0) migr_export_visits(); + cprintf("%d\n", 25); if (Ctx->kill_me == 0) migr_export_messages(); client_write("\n", 24); + cprintf("%d\n", 100); client_write("000\n", 4); Ctx->dont_term = 0; } -- 2.30.2