return ctx;
}
+static const char *time_formatted_hms(unsigned int secs)
+{
+ return t_strdup_printf("%02d:%02d:%02d", secs/3600,
+ (secs/60)%60, secs%60);
+}
+
static const char *time_ago(time_t t)
{
int diff = ioloop_time - t;
if (t == 0)
return "-";
- return t_strdup_printf("%02d:%02d:%02d", diff/3600,
- (diff/60)%60, diff%60);
+ return time_formatted_hms(diff);
}
static void cmd_replicator_status_overview(struct replicator_context *ctx)
struct replicator_context *ctx;
const char *line, *const *args;
time_t last_fast, last_full, last_success;
+ unsigned int next_secs;
ctx = cmd_replicator_init(cctx);
if (ctx->user_mask == NULL) {
doveadm_print_header_simple("full sync");
doveadm_print_header_simple("success sync");
doveadm_print_header_simple("failed");
+ doveadm_print_header_simple("next sync secs");
replicator_send(ctx, t_strdup_printf("STATUS\t%s\n",
str_tabescape(ctx->user_mask)));
break;
T_BEGIN {
args = t_strsplit_tabescaped(line);
- if (str_array_length(args) >= 5 &&
+ if (str_array_length(args) >= 6 &&
str_to_time(args[2], &last_fast) == 0 &&
str_to_time(args[3], &last_full) == 0 &&
- str_to_time(args[5], &last_success) == 0) {
+ str_to_time(args[5], &last_success) == 0 &&
+ str_to_uint(args[6], &next_secs) == 0) {
doveadm_print(args[0]);
doveadm_print(args[1]);
doveadm_print(time_ago(last_fast));
doveadm_print(time_ago(last_full));
doveadm_print(time_ago(last_success));
doveadm_print(args[4][0] == '0' ? "-" : "y");
+ doveadm_print(time_formatted_hms(next_secs));
}
} T_END;
}
struct replicator_queue_iter *iter;
struct replicator_user *user;
const char *mask = args[0];
+ unsigned int next_secs;
string_t *str = t_str_new(128);
if (mask == NULL)
str_append_tabescaped(str, user->username);
str_append_c(str, '\t');
str_append(str, replicator_priority_to_str(user->priority));
- str_printfa(str, "\t%lld\t%lld\t%d\t%lld\n",
+ if (replicator_queue_want_sync_now(user, &next_secs))
+ next_secs = 0;
+ str_printfa(str, "\t%lld\t%lld\t%d\t%lld\t%u\n",
(long long)user->last_fast_sync,
(long long)user->last_full_sync,
user->last_sync_failed ? 1 : 0,
- (long long)user->last_successful_sync);
+ (long long)user->last_successful_sync,
+ next_secs);
o_stream_nsend(client->conn.output, str_data(str), str_len(str));
}
replicator_queue_iter_deinit(&iter);