From: Timo Sirainen Date: Wed, 19 Jul 2017 18:24:48 +0000 (+0300) Subject: doveadm service status: Add doveadm_stop field X-Git-Tag: 2.3.0.rc1~1213 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=77a41c18e6c37ea9d88a300173672746e29fe61b;p=thirdparty%2Fdovecot%2Fcore.git doveadm service status: Add doveadm_stop field This indicates whether "doveadm service stop" was used for the service. --- diff --git a/src/doveadm/doveadm-master.c b/src/doveadm/doveadm-master.c index bbe4f261ad..6cbee620af 100644 --- a/src/doveadm/doveadm-master.c +++ b/src/doveadm/doveadm-master.c @@ -170,6 +170,7 @@ static void cmd_service_status(struct doveadm_cmd_context *cctx) doveadm_print_header_simple("last_drop_warning"); doveadm_print_header_simple("listen_pending"); doveadm_print_header_simple("listening"); + doveadm_print_header_simple("doveadm_stop"); alarm(5); while ((line = i_stream_read_next_line(input)) != NULL) { @@ -177,10 +178,10 @@ static void cmd_service_status(struct doveadm_cmd_context *cctx) break; T_BEGIN { const char *const *args = t_strsplit_tabescaped(line); - if (str_array_length(args) >= 11 && + if (str_array_length(args) >= 12 && (services == NULL || str_array_find(services, args[0]))) { - for (unsigned int i = 0; i < 11; i++) + for (unsigned int i = 0; i < 12; i++) doveadm_print(args[i]); } } T_END; diff --git a/src/master/master-client.c b/src/master/master-client.c index 2b8084d9b0..0415c87a19 100644 --- a/src/master/master-client.c +++ b/src/master/master-client.c @@ -20,7 +20,7 @@ master_client_service_status_output(string_t *str, const struct service *service) { str_append_tabescaped(str, service->set->name); - str_printfa(str, "\t%u\t%u\t%u\t%u\t%u\t%ld\t%u\t%ld\t%c\t%c\n", + str_printfa(str, "\t%u\t%u\t%u\t%u\t%u\t%ld\t%u\t%ld\t%c\t%c\t%c\n", service->process_count, service->process_avail, service->process_limit, service->client_limit, service->to_throttle == NULL ? 0 : service->throttle_secs, @@ -28,7 +28,8 @@ master_client_service_status_output(string_t *str, service->exit_failures_in_sec, (long)service->last_drop_warning, service->listen_pending ? 'y' : 'n', - service->listening ? 'y' : 'n'); + service->listening ? 'y' : 'n', + service->doveadm_stop ? 'y' : 'n'); } static int @@ -90,8 +91,10 @@ master_client_stop(struct master_client *client, const char *const *args) service = service_lookup(services, args[i]); if (service == NULL) reply = t_strdup_printf("-Unknown service: %s\n", args[i]); - else + else { service_monitor_stop_close(service); + service->doveadm_stop = TRUE; + } } o_stream_send_str(client->conn.output, reply); return 1; diff --git a/src/master/service.h b/src/master/service.h index 1df29b002b..c2f3ee65f0 100644 --- a/src/master/service.h +++ b/src/master/service.h @@ -121,6 +121,8 @@ struct service { bool last_login_full_notify:1; /* service has exited at least once with exit code 0 */ bool have_successful_exits:1; + /* service was stopped via doveadm */ + bool doveadm_stop:1; }; struct service_list {