mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-23 21:55:03 +02:00
Revert "ExternalCommandListener: Use threads per client connection"
This reverts commit accd83693ce699be5538a60facf1d11b5ec3ac57
This commit is contained in:
parent
f6a7f84ed5
commit
dae120beb6
@ -99,63 +99,50 @@ void ExternalCommandListener::CommandPipeThread(const String& commandPath)
|
|||||||
for (;;) {
|
for (;;) {
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
try {
|
do {
|
||||||
do {
|
fd = open(commandPath.CStr(), O_RDONLY);
|
||||||
fd = open(commandPath.CStr(), O_RDONLY);
|
} while (fd < 0 && errno == EINTR);
|
||||||
} while (fd < 0 && errno == EINTR);
|
|
||||||
|
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
std::ostringstream msgbuf;
|
std::ostringstream msgbuf;
|
||||||
msgbuf << "open() for fifo path '" << commandPath << "' failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
|
msgbuf << "open() for fifo path '" << commandPath << "' failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
|
||||||
Log(LogCritical, "ExternalCommandListener", msgbuf.str());
|
Log(LogCritical, "ExternalCommandListener", msgbuf.str());
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Log(LogNotice, "ExternalCommandListener", "Client connected");
|
|
||||||
Utility::QueueAsyncCallback(boost::bind(&ExternalCommandListener::ClientHandler, this, commandPath, fd));
|
|
||||||
} catch (std::exception&) {
|
|
||||||
Log(LogCritical, "ExternalCommandListener", "Cannot accept new connection.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FILE *fp = fdopen(fd, "r");
|
||||||
|
|
||||||
|
if (fp == NULL) {
|
||||||
|
std::ostringstream msgbuf;
|
||||||
|
msgbuf << "fdopen() for fifo path '" << commandPath << "' failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
|
||||||
|
Log(LogCritical, "ExternalCommandListener", msgbuf.str());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const int linesize = 128 * 1024;
|
||||||
|
char *line = new char[linesize];
|
||||||
|
|
||||||
|
while (fgets(line, linesize, fp) != NULL) {
|
||||||
|
// remove trailing new-line
|
||||||
|
while (strlen(line) > 0 &&
|
||||||
|
(line[strlen(line) - 1] == '\r' || line[strlen(line) - 1] == '\n'))
|
||||||
|
line[strlen(line) - 1] = '\0';
|
||||||
|
|
||||||
|
String command = line;
|
||||||
|
|
||||||
|
try {
|
||||||
|
Log(LogInformation, "ExternalCommandListener", "Executing external command: " + command);
|
||||||
|
|
||||||
|
ExternalCommandProcessor::Execute(command);
|
||||||
|
} catch (const std::exception&) {
|
||||||
|
std::ostringstream msgbuf;
|
||||||
|
msgbuf << "External command failed.";
|
||||||
|
Log(LogWarning, "ExternalCommandListener", msgbuf.str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delete line;
|
||||||
|
fclose(fp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExternalCommandListener::ClientHandler(const String& commandPath, int fd)
|
|
||||||
{
|
|
||||||
FILE *fp = fdopen(fd, "r");
|
|
||||||
|
|
||||||
if (fp == NULL) {
|
|
||||||
std::ostringstream msgbuf;
|
|
||||||
msgbuf << "fdopen() for fifo path '" << commandPath << "' failed with error code " << errno << ", \"" << Utility::FormatErrorNumber(errno) << "\"";
|
|
||||||
Log(LogCritical, "ExternalCommandListener", msgbuf.str());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const int linesize = 128 * 1024;
|
|
||||||
char *line = new char[linesize];
|
|
||||||
|
|
||||||
while (fgets(line, linesize, fp) != NULL) {
|
|
||||||
// remove trailing new-line
|
|
||||||
while (strlen(line) > 0 &&
|
|
||||||
(line[strlen(line) - 1] == '\r' || line[strlen(line) - 1] == '\n'))
|
|
||||||
line[strlen(line) - 1] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
String command = line;
|
|
||||||
|
|
||||||
try {
|
|
||||||
Log(LogInformation, "ExternalCommandListener", "Executing external command: " + command);
|
|
||||||
|
|
||||||
ExternalCommandProcessor::Execute(command);
|
|
||||||
} catch (const std::exception&) {
|
|
||||||
std::ostringstream msgbuf;
|
|
||||||
msgbuf << "External command failed.";
|
|
||||||
Log(LogWarning, "ExternalCommandListener", msgbuf.str());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
delete line;
|
|
||||||
fclose(fp);
|
|
||||||
}
|
|
||||||
#endif /* _WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
@ -49,7 +49,6 @@ private:
|
|||||||
boost::thread m_CommandThread;
|
boost::thread m_CommandThread;
|
||||||
|
|
||||||
void CommandPipeThread(const String& commandPath);
|
void CommandPipeThread(const String& commandPath);
|
||||||
void ClientHandler(const String& commandPath, int fd);
|
|
||||||
#endif /* _WIN32 */
|
#endif /* _WIN32 */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user