be used to initialize debug logging immediately at startup. */
#define DOVECOT_LOG_DEBUG_ENV "LOG_DEBUG"
+/* getenv(DOVECOT_STATS_WRITER_SOCKET_PATH) returns path to the stats-writer
+ socket. */
+#define DOVECOT_STATS_WRITER_SOCKET_PATH "STATS_WRITER_SOCKET_PATH"
+
/* Write pipe to anvil. */
#define MASTER_ANVIL_FD 3
/* Anvil reads new log fds from this fd */
/* running standalone. we want to ignore plugin versions. */
service->version_string = NULL;
}
- if ((service->flags & MASTER_SERVICE_FLAG_SEND_STATS) != 0) {
+ if ((service->flags & MASTER_SERVICE_FLAG_SEND_STATS) != 0 &&
+ (service->flags & MASTER_SERVICE_FLAG_STANDALONE) != 0) {
/* When running standalone (e.g. doveadm) try to connect to the
stats socket, but don't log an error if it's not running.
- It may be intentional. */
- bool silent_notfound_errors =
- (service->flags & MASTER_SERVICE_FLAG_STANDALONE) != 0;
- master_service_init_stats_client(service, silent_notfound_errors);
+ It may be intentional. Non-standalone stats-client
+ initialization was already done earlier. */
+ master_service_init_stats_client(service, TRUE);
}
if (service->set->shutdown_clients)
are dropped. */
master_service_config_socket_try_open(service);
}
+ if ((flags & MASTER_SERVICE_FLAG_SEND_STATS) != 0) {
+ /* Initialize stats-client early so it can see all events. */
+ value = getenv(DOVECOT_STATS_WRITER_SOCKET_PATH);
+ if (value != NULL)
+ service->stats_client = stats_client_init(value, FALSE);
+ }
master_service_verify_version_string(service);
return service;
service_process_setup_environment(struct service *service, unsigned int uid,
const char *hostdomain)
{
+ const struct master_service_settings *service_set =
+ service->list->service_set;
master_service_env_clean();
env_put(MASTER_IS_PARENT_ENV"=1");
if (!service->set->master_set->version_ignore)
env_put(MASTER_DOVECOT_VERSION_ENV"="PACKAGE_VERSION);
+ if (service_set->stats_writer_socket_path[0] != '\0') {
+ env_put(t_strdup_printf(DOVECOT_STATS_WRITER_SOCKET_PATH"=%s/%s",
+ service_set->base_dir,
+ service_set->stats_writer_socket_path));
+ }
if (ssl_manual_key_password != NULL && service->have_inet_listeners) {
/* manually given SSL password. give it only to services
that have inet listeners. */
service_anvil_global->restarted)
env_put("ANVIL_RESTARTED=1");
env_put(t_strconcat(DOVECOT_LOG_DEBUG_ENV"=",
- service->list->service_set->log_debug, NULL));
+ service_set->log_debug, NULL));
}
static void service_process_status_timeout(struct service_process *process)