X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=win%2Finspircd_namedpipe.cpp;h=76d16037bf721bb51fe1e9286fc2b6fefa2e440d;hb=23b0ee51ed995673949540ce8bb79ff3de06cef3;hp=30aab9cd49874d1d8db060ed14bf08570d82667f;hpb=ed6fcd4a50f3a0d84ae07a8a0011b193e00cf088;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/win/inspircd_namedpipe.cpp b/win/inspircd_namedpipe.cpp index 30aab9cd4..76d16037b 100644 --- a/win/inspircd_namedpipe.cpp +++ b/win/inspircd_namedpipe.cpp @@ -6,35 +6,37 @@ #include -IPCThread::IPCThread(InspIRCd* Instance) : Thread(), ServerInstance(Instance) +IPCThread::IPCThread() { + if (!initwmi()) + ServerInstance->Logs->Log("IPC", DEBUG, "Could not initialise WMI. CPU percantage reports will not be available."); } IPCThread::~IPCThread() { - + donewmi(); } void IPCThread::Run() { LPTSTR Pipename = "\\\\.\\pipe\\InspIRCdStatus"; - while (GetExitFlag() == false) + while (GetExitFlag() == false) { Pipe = CreateNamedPipe (Pipename, - PIPE_ACCESS_DUPLEX, // read/write access - PIPE_TYPE_MESSAGE | // message type pipe - PIPE_READMODE_MESSAGE | // message-read mode - PIPE_WAIT, // blocking mode - PIPE_UNLIMITED_INSTANCES, // max. instances - MAXBUF, // output buffer size - MAXBUF, // input buffer size - 1000, // client time-out - NULL); // no security attribute + PIPE_ACCESS_DUPLEX, // read/write access + PIPE_TYPE_MESSAGE | // message type pipe + PIPE_READMODE_MESSAGE | // message-read mode + PIPE_WAIT, // blocking mode + PIPE_UNLIMITED_INSTANCES, // max. instances + MAXBUF, // output buffer size + MAXBUF, // input buffer size + 1000, // client time-out + NULL); // no security attribute if (Pipe == INVALID_HANDLE_VALUE) { - SleepEx(500, true); + SleepEx(10, true); continue; } @@ -62,9 +64,12 @@ void IPCThread::Run() std::stringstream stat; DWORD Written = 0; + float kbitpersec_in, kbitpersec_out, kbitpersec_total; PROCESS_MEMORY_COUNTERS MemCounters; + ServerInstance->SE->GetStats(kbitpersec_in, kbitpersec_out, kbitpersec_total); + bool HaveMemoryStats = GetProcessMemoryInfo(GetCurrentProcess(), &MemCounters, sizeof(MemCounters)); stat << "name " << ServerInstance->Config->ServerName << std::endl; @@ -77,6 +82,11 @@ void IPCThread::Run() stat << "pid " << GetProcessId(GetCurrentProcess()) << std::endl; stat << "request " << oldrequest << std::endl; stat << "result " << this->GetResult() << std::endl; + stat << "kbitspersectotal " << kbitpersec_total << std::endl; + stat << "kbitspersecout " << kbitpersec_out << std::endl; + stat << "kbitspersecin " << kbitpersec_in << std::endl; + stat << "uptime " << ServerInstance->Time() - ServerInstance->startup_time << std::endl; + stat << "cpu " << getcpu() << std::endl; if (HaveMemoryStats) { stat << "workingset " << MemCounters.WorkingSetSize << std::endl; @@ -117,45 +127,51 @@ void IPCThread::SetResult(int newresult) } -IPC::IPC(InspIRCd* Srv) : ServerInstance(Srv) -{ - /* The IPC pipe is threaded */ - thread = new IPCThread(Srv); - Srv->Threads->Create(thread); -} - -void IPC::Check() -{ - switch (thread->GetStatus()) - { - case 'N': - /* No-Operation */ - thread->SetResult(0); - thread->ClearStatus(); - break; - case '1': - /* Rehash */ - ServerInstance->Rehash("due to rehash command from GUI"); - thread->SetResult(0); - thread->ClearStatus(); - break; - case '2': - /* Shutdown */ - thread->SetResult(0); - thread->ClearStatus(); - ServerInstance->Exit(EXIT_STATUS_NOERROR); - break; - case '3': - /* Restart */ - thread->SetResult(0); - thread->ClearStatus(); - ServerInstance->Restart("Restarting due to command from GUI"); - break; - } -} - -IPC::~IPC() -{ - thread->SetExitFlag(); - delete thread; -} \ No newline at end of file +IPC::IPC() +{ + /* The IPC pipe is threaded */ + thread = new IPCThread(); + ServerInstance->Threads->Start(thread); +} + +void IPC::Check() +{ + switch (thread->GetStatus()) + { + case 'N': + /* No-Operation */ + thread->SetResult(0); + thread->ClearStatus(); + break; + case '1': + /* Rehash */ + ServerInstance->Rehash("due to rehash command from GUI"); + thread->SetResult(0); + thread->ClearStatus(); + break; + case '2': + /* Shutdown */ + thread->SetResult(0); + thread->ClearStatus(); + ServerInstance->Exit(EXIT_STATUS_NOERROR); + break; + case '3': + /* Restart */ + thread->SetResult(0); + thread->ClearStatus(); + ServerInstance->Restart("Restarting due to command from GUI"); + break; + case '4': + /* Toggle debug */ + thread->SetResult(0); + thread->ClearStatus(); + ServerInstance->Config->forcedebug = !ServerInstance->Config->forcedebug; + break; + } +} + +IPC::~IPC() +{ + thread->SetExitFlag(); + delete thread; +}