int nagios() { struct uwsgi_header uh; char *buf = NULL; if (!use_nagios) { return 1; } if (!uwsgi.sockets) { fprintf(stdout, "UWSGI UNKNOWN: you have specified an invalid socket\n"); exit(3); } int fd = uwsgi_connect(uwsgi.sockets->name, uwsgi.socket_timeout, 0); if (fd < 0) { fprintf(stdout, "UWSGI CRITICAL: could not connect() to workers %s\n", strerror(errno)); if (errno == EPERM || errno == EACCES) { exit(3); } exit(2); } uh.modifier1 = UWSGI_MODIFIER_PING; uh.pktsize = 0; uh.modifier2 = 0; if (write(fd, &uh, 4) != 4) { uwsgi_error("write()"); fprintf(stdout, "UWSGI CRITICAL: could not send ping packet to workers\n"); exit(2); } int ret = uwsgi_read_response(fd, &uh, uwsgi.socket_timeout, &buf); if (ret == -2) { fprintf(stdout, "UWSGI CRITICAL: timed out waiting for response\n"); exit(2); } else if (ret == -1) { fprintf(stdout, "UWSGI CRITICAL: error reading response\n"); exit(2); } else { if (uh.pktsize > 0 && buf) { fprintf(stdout, "UWSGI WARNING: %.*s\n", uh.pktsize, buf); exit(1); } else { fprintf(stdout, "UWSGI OK: armed and ready\n"); exit(0); } } // never here fprintf(stdout, "UWSGI UNKNOWN: probably you hit a bug of uWSGI !!!\n"); exit(3); }
static void ping() { struct uwsgi_header uh; char *buf = NULL; // use a 3 secs timeout by default if (!uping.ping_timeout) uping.ping_timeout = 3; uwsgi_log("PING uwsgi host %s (timeout: %d)\n", uping.ping, uping.ping_timeout); int fd = uwsgi_connect(uping.ping, uping.ping_timeout, 0); if (fd < 0) { exit(1); } uh.modifier1 = UWSGI_MODIFIER_PING; uh.pktsize = 0; uh.modifier2 = 0; if (write(fd, &uh, 4) != 4) { uwsgi_error("write()"); exit(2); } int ret = uwsgi_read_response(fd, &uh, uping.ping_timeout, &buf); if (ret < 0) { exit(1); } else { if (uh.pktsize > 0) { uwsgi_log("[WARNING] node %s message: %.*s\n", uping.ping, uh.pktsize, buf); exit(2); } else { exit(0); } } }
int uwsgi_remote_signal_send(char *addr, uint8_t sig) { struct uwsgi_header uh; uh.modifier1 = 110; uh.pktsize = 0; uh.modifier2 = sig; int fd = uwsgi_connect(addr, uwsgi.shared->options[UWSGI_OPTION_SOCKET_TIMEOUT], 0); if (fd < 0) return -1; if (write(fd, (char *) &uh, 4) != 4) { uwsgi_error("uwsgi_remote_signal_send()"); close(fd); return -1; } int ret = uwsgi_read_response(fd, &uh, uwsgi.shared->options[UWSGI_OPTION_SOCKET_TIMEOUT], NULL); close(fd); return ret; }