From 36a3b408cffd7eeea9942740bdc6ae11b6436d02 Mon Sep 17 00:00:00 2001 From: "roberto@fiorenzo" Date: Sat, 27 Nov 2010 06:58:46 +0100 Subject: [PATCH] --proxy-node @self --- plugins/python/wsgi_subhandler.c | 10 ++++++++-- socket.c | 2 +- uwsgi.c | 18 ++++++++++++++++-- uwsgi.h | 1 + 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/plugins/python/wsgi_subhandler.c b/plugins/python/wsgi_subhandler.c index 60f744ff..d6469abc 100644 --- a/plugins/python/wsgi_subhandler.c +++ b/plugins/python/wsgi_subhandler.c @@ -80,9 +80,15 @@ void *uwsgi_request_subhandler_wsgi(struct wsgi_request *wsgi_req, struct uwsgi_ //PyDict_SetItemString(uwsgi.embedded_dict, "env", wsgi_req->async_environ); - //PyDict_SetItemString(wsgi_req->async_environ, "uwsgi.version", uwsgi_version); + PyDict_SetItemString(wsgi_req->async_environ, "uwsgi.version", PyString_FromString(UWSGI_VERSION)); + if (uwsgi.cores > 1) { + PyDict_SetItemString(wsgi_req->async_environ, "uwsgi.core", PyInt_FromLong(wsgi_req->async_id)); + } - PyDict_SetItemString(wsgi_req->async_environ, "uwsgi.core", PyInt_FromLong(wsgi_req->async_id)); + if (uwsgi.cluster_fd >= 0) { + PyDict_SetItemString(wsgi_req->async_environ, "uwsgi.cluster", PyString_FromString(uwsgi.cluster)); + PyDict_SetItemString(wsgi_req->async_environ, "uwsgi.cluster_node", PyString_FromString(uwsgi.hostname)); + } #ifdef UWSGI_ROUTING diff --git a/socket.c b/socket.c index 96422995..e1422ebf 100644 --- a/socket.c +++ b/socket.c @@ -319,8 +319,8 @@ char *generate_socket_name(char *socket_name) { if (inet_ntop(AF_INET, (void *) &sin->sin_addr.s_addr, new_addr, 16)) { if (!strncmp( socket_name, new_addr, strlen(socket_name)) ) { asterisk[0] = '*'; - uwsgi_log("found %s for %s on interface %s\n", new_addr, socket_name, ifa->ifa_name); new_socket = uwsgi_concat3(new_addr, ":", tcp_port+1); + uwsgi_log("found %s for %s on interface %s\n", new_socket, socket_name, ifa->ifa_name); freeifaddrs(ifap); return new_socket; } diff --git a/uwsgi.c b/uwsgi.c index 833ca756..5ad1157b 100644 --- a/uwsgi.c +++ b/uwsgi.c @@ -609,6 +609,12 @@ options_parsed: } +#ifdef UWSGI_PROXY + if (uwsgi.proxy_add_me) { + uwsgi_cluster_add_node(uwsgi.sockets[0].name, 1, CLUSTER_NODE_STATIC); + } +#endif + //call after_opt hooks @@ -1652,7 +1658,12 @@ end: return 1; #ifdef UWSGI_PROXY case LONG_ARGS_PROXY_NODE: - uwsgi_cluster_add_node(optarg, 1, CLUSTER_NODE_STATIC); + if (uwsgi.cluster_fd >= 0 && !strcmp(optarg, "@self")) { + uwsgi.proxy_add_me = 1; + } + else { + uwsgi_cluster_add_node(optarg, 1, CLUSTER_NODE_STATIC); + } return 1; case LONG_ARGS_PROXY: uwsgi.proxy_socket_name = optarg; @@ -2080,8 +2091,11 @@ void uwsgi_cluster_add_node(char *nodename, int workers, int type) { if (type == CLUSTER_NODE_DYNAMIC) { free(nodename); } + else { + tcp_port[0] = ':'; + } ucn->last_seen = time(NULL); - + uwsgi_log("[uWSGI cluster] added node %s\n", ucn->name); return; } } diff --git a/uwsgi.h b/uwsgi.h index 6f1505fa..10633c9f 100644 --- a/uwsgi.h +++ b/uwsgi.h @@ -603,6 +603,7 @@ struct uwsgi_server { #ifdef UWSGI_PROXY int proxyfd; char *proxy_socket_name; + int proxy_add_me; #endif char *logfile;