281 lines
9.1 KiB
C++
281 lines
9.1 KiB
C++
#include <cdevPlatforms.h>
|
|
#include <cdevData.h>
|
|
|
|
class ServerInfo
|
|
{
|
|
friend class cdevServer;
|
|
|
|
private:
|
|
cdevData data;
|
|
size_t sendPktCnt;
|
|
size_t recvPktCnt;
|
|
size_t clientCnt;
|
|
long pageSize;
|
|
|
|
public:
|
|
ServerInfo ( char * domain, char * server, unsigned short port )
|
|
: sendPktCnt(0), recvPktCnt(0), clientCnt(0), pageSize(0)
|
|
{
|
|
cdevData::addTag("username");
|
|
cdevData::addTag("group");
|
|
cdevData::addTag("uid");
|
|
cdevData::addTag("gid");
|
|
cdevData::addTag("pid");
|
|
cdevData::addTag("program");
|
|
cdevData::addTag("commandline");
|
|
cdevData::addTag("starttime");
|
|
cdevData::addTag("host");
|
|
cdevData::addTag("server");
|
|
cdevData::addTag("domain");
|
|
cdevData::addTag("port");
|
|
cdevData::addTag("os");
|
|
cdevData::addTag("osrelease");
|
|
cdevData::addTag("osversion");
|
|
cdevData::addTag("machine");
|
|
cdevData::addTag("shell");
|
|
cdevData::addTag("sendPktCnt");
|
|
cdevData::addTag("recvPktCnt");
|
|
cdevData::addTag("clientCnt");
|
|
cdevData::addTag("pctcpu");
|
|
cdevData::addTag("datasize");
|
|
cdevData::addTag("socket");
|
|
|
|
data.insert("server", server);
|
|
data.insert("domain", domain);
|
|
data.insert("port", port);
|
|
|
|
#ifndef _WIN32
|
|
struct utsname hostinfo;
|
|
struct group * grp;
|
|
char * shell = getenv("SHELL");
|
|
|
|
uname(&hostinfo);
|
|
grp = getgrgid(getgid());
|
|
|
|
data.insert("username", getlogin());
|
|
data.insert("group", grp?grp->gr_name:(char *)"UNDEFINED");
|
|
data.insert("uid", (unsigned)getuid());
|
|
data.insert("gid", (unsigned)getgid());
|
|
data.insert("pid", (unsigned)getpid());
|
|
data.insert("host", hostinfo.nodename);
|
|
data.insert("os", hostinfo.sysname);
|
|
data.insert("osrelease", hostinfo.release);
|
|
data.insert("osversion", hostinfo.version);
|
|
data.insert("machine", hostinfo.machine);
|
|
data.insert("shell", shell?shell:(char *)"UNDEFINED");
|
|
|
|
#if defined(__hpux)
|
|
struct pst_status pstatData;
|
|
pstat_getproc(&pstatData, sizeof(pstatData), 0, (int)getpid());
|
|
data.insert("program", pstatData.pst_ucomm);
|
|
data.insert("commandline", pstatData.pst_cmd);
|
|
data.insert("starttime", pstatData.pst_start);
|
|
|
|
struct pst_static pstatStatic;
|
|
pstat_getstatic(&pstatStatic, sizeof(pstatStatic), 1, 0);
|
|
pageSize = pstatStatic.page_size;
|
|
#endif
|
|
#else
|
|
char userNameBuf[UNLEN+1];
|
|
unsigned long userNameLen = UNLEN;
|
|
char hostNameBuf[MAXHOSTNAMELEN+1];
|
|
unsigned long hostNameLen = MAXHOSTNAMELEN;
|
|
|
|
*userNameBuf = 0;
|
|
*hostNameBuf = 0;
|
|
|
|
data.insert("pid", getpid());
|
|
if(GetUserName (userNameBuf, &userNameLen)) data.insert("username", userNameBuf);
|
|
if(GetComputerName(hostNameBuf, &hostNameLen)) data.insert("host", hostNameBuf);
|
|
|
|
if(userNameBuf && hostNameBuf)
|
|
{
|
|
char grpNameBuf[GNLEN+1];
|
|
unsigned long grpNameLen = GNLEN;
|
|
char sidBuf[256];
|
|
unsigned long sidLen = 256;
|
|
SID_NAME_USE sidType;
|
|
|
|
*grpNameBuf = 0;
|
|
if(LookupAccountName(hostNameBuf, userNameBuf,
|
|
sidBuf, &sidLen, grpNameBuf,
|
|
&grpNameLen, &sidType))
|
|
{
|
|
data.insert("group", grpNameBuf);
|
|
}
|
|
}
|
|
|
|
OSVERSIONINFO osv;
|
|
osv.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
|
if(GetVersionEx (&osv))
|
|
{
|
|
char osVersionBuf[64];
|
|
switch(osv.dwPlatformId)
|
|
{
|
|
case VER_PLATFORM_WIN32s:
|
|
data.insert("os", "WINDOWS");
|
|
break;
|
|
|
|
case VER_PLATFORM_WIN32_WINDOWS:
|
|
if(osv.dwMinorVersion == 0)
|
|
data.insert("os", "WINDOWS 95");
|
|
else data.insert("os", "WINDOWS 98");
|
|
break;
|
|
|
|
case VER_PLATFORM_WIN32_NT:
|
|
data.insert("os", "WINDOWS NT");
|
|
break;
|
|
|
|
default:
|
|
data.insert("os", "WIN32");
|
|
break;
|
|
}
|
|
sprintf(osVersionBuf, "%d.%d", osv.dwMajorVersion, osv.dwMinorVersion);
|
|
data.insert("osversion", osVersionBuf);
|
|
data.insert("osrelease", ltoa(osv.dwBuildNumber));
|
|
}
|
|
|
|
SYSTEM_INFO sysinfo;
|
|
GetSystemInfo(&sysinfo);
|
|
switch(sysinfo.wProcessorArchitecture)
|
|
{
|
|
case PROCESSOR_ARCHITECTURE_INTEL:
|
|
data.insert("machine", "PROCESSOR_ARCHITECTURE_INTEL");
|
|
break;
|
|
|
|
case PROCESSOR_ARCHITECTURE_MIPS:
|
|
data.insert("machine", "PROCESSOR_ARCHITECTURE_MIPS");
|
|
break;
|
|
|
|
case PROCESSOR_ARCHITECTURE_ALPHA:
|
|
data.insert("machine", "PROCESSOR_ARCHITECTURE_ALPHA");
|
|
break;
|
|
|
|
case PROCESSOR_ARCHITECTURE_PPC:
|
|
data.insert("machine", "PROCESSOR_ARCHITECTURE_PPC");
|
|
break;
|
|
|
|
case PROCESSOR_ARCHITECTURE_UNKNOWN:
|
|
default:
|
|
data.insert("machine", "PROCESSOR_ARCHITECTURE_UNKNOWN");
|
|
break;
|
|
}
|
|
|
|
if(__argc>0)
|
|
{
|
|
int i;
|
|
char * cmdLine = NULL;
|
|
size_t cmdLineLen = 0;
|
|
|
|
data.insert("program", __argv[0]);
|
|
for(i=0; i<__argc; i++) cmdLineLen+=strlen(__argv[i])+1;
|
|
cmdLine = new char [cmdLineLen];
|
|
*cmdLine = 0;
|
|
for(i=0; i<__argc; i++)
|
|
{
|
|
strcat(cmdLine, __argv[i]);
|
|
if(i+1<__argc) strcat(cmdLine, " ");
|
|
}
|
|
data.insert("commandline", cmdLine);
|
|
}
|
|
|
|
FILETIME startTime;
|
|
FILETIME exitTime;
|
|
FILETIME kernelTime;
|
|
FILETIME userTime;
|
|
if(GetProcessTimes(GetCurrentProcess(), &startTime, &exitTime, &kernelTime, &userTime))
|
|
{
|
|
struct timeval tv;
|
|
FileTimeToTimeVal(&startTime, &tv);
|
|
data.insert("starttime", tv.tv_sec);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
cdevData & getServerData ( void )
|
|
{
|
|
#if defined(__hpux)
|
|
struct pst_status pstatData;
|
|
pstat_getproc(&pstatData, sizeof(pstatData), 0, (int)getpid());
|
|
data.insert("pctcpu", pstatData.pst_pctcpu);
|
|
data.insert("datasize", pageSize*(pstatData.pst_dsize+pstatData.pst_tsize+pstatData.pst_ssize));
|
|
data.insert("sendPktCnt", sendPktCnt);
|
|
data.insert("recvPktCnt", recvPktCnt);
|
|
#endif
|
|
|
|
return data;
|
|
}
|
|
|
|
void asciiDump ( FILE * fp = stdout )
|
|
{
|
|
fprintf(fp, "--------------------------------------------------------\n");
|
|
fprintf(fp, " Printing Server Information\n");
|
|
fprintf(fp, "--------------------------------------------------------\n");
|
|
|
|
char * server;
|
|
char * domain;
|
|
unsigned short port;
|
|
char * username;
|
|
char * group;
|
|
unsigned pid;
|
|
unsigned gid;
|
|
unsigned uid;
|
|
char * host;
|
|
char * os;
|
|
char * osrelease;
|
|
char * osversion;
|
|
char * machine;
|
|
char * shell;
|
|
char * program;
|
|
char * commandline;
|
|
long starttime;
|
|
size_t datasize;
|
|
float pctcpu;
|
|
|
|
getServerData();
|
|
|
|
if(data.find("domain", (void *&)domain)!=CDEV_SUCCESS) host = NULL;
|
|
if(data.find("server", (void *&)server)!=CDEV_SUCCESS) server = NULL;
|
|
if(data.find("username", (void * &)username)!=CDEV_SUCCESS) username = NULL;
|
|
if(data.find("group", (void * &)group)!=CDEV_SUCCESS) group = NULL;
|
|
if(data.find("host", (void * &)host)!=CDEV_SUCCESS) host = NULL;
|
|
if(data.find("os", (void * &)os)!=CDEV_SUCCESS) os = NULL;
|
|
if(data.find("osrelease", (void * &)osrelease)!=CDEV_SUCCESS) osrelease = NULL;
|
|
if(data.find("osversion", (void * &)osversion)!=CDEV_SUCCESS) osversion = NULL;
|
|
if(data.find("machine", (void * &)machine)!=CDEV_SUCCESS) machine = NULL;
|
|
if(data.find("shell", (void * &)shell)!=CDEV_SUCCESS) shell=NULL;
|
|
if(data.find("program", (void * &)program)!=CDEV_SUCCESS) program=NULL;
|
|
if(data.find("commandline", (void * &)commandline)!=CDEV_SUCCESS) commandline=NULL;
|
|
if(data.get("port", &port)!=CDEV_SUCCESS) port = 0;
|
|
if(data.get("starttime", &starttime)!=CDEV_SUCCESS) starttime = 0;
|
|
if(data.get("pid", &pid)!=CDEV_SUCCESS) pid = 0;
|
|
if(data.get("gid", &gid)!=CDEV_SUCCESS) gid = 0;
|
|
if(data.get("uid", &uid)!=CDEV_SUCCESS) uid = 0;
|
|
if(data.get("datasize", &datasize)!=CDEV_SUCCESS) datasize = 0;
|
|
if(data.get("pctcpu", &pctcpu)!=CDEV_SUCCESS) pctcpu = (float)0.0;
|
|
|
|
fprintf(fp, "=> DOMAIN : %s\n", domain?domain:"UNDEFINED");
|
|
fprintf(fp, "=> SERVER : %s\n", server?server:"UNDEFINED");
|
|
fprintf(fp, "=> LISTENING PORT : %s\n", port?ltoa(port):"UNDEFINED");
|
|
fprintf(fp, "=> USERNAME : %s\n", username?username:"UNDEFINED");
|
|
fprintf(fp, "=> GROUP : %s\n", group?group:"UNDEFINED");
|
|
fprintf(fp, "=> USER ID : %s\n", uid?ltoa(uid):"UNDEFINED");
|
|
fprintf(fp, "=> GROUP ID : %s\n", gid?ltoa(gid):"UNDEFINED");
|
|
fprintf(fp, "=> PROCESS ID : %s\n", pid?ltoa(pid):"UNDEFINED");
|
|
fprintf(fp, "=> APPLICATION : %s\n", program?program:"UNDEFINED");
|
|
fprintf(fp, "=> COMMAND LINE : %s\n", commandline?commandline:"UNDEFINED");
|
|
fprintf(fp, "=> START TIME : %s", starttime?ctime(&starttime):"UNKNOWN\n");
|
|
fprintf(fp, "=> HOST NAME : %s\n", host?host:"UNKNOWN");
|
|
fprintf(fp, "=> OS : %s\n", os?os:"UNKNOWN");
|
|
fprintf(fp, "=> OS VERSION : %s\n", osversion?osversion:"UNKNOWN");
|
|
fprintf(fp, "=> OS RELEASE : %s\n", osrelease?osrelease:"UNKNOWN");
|
|
fprintf(fp, "=> HARDWARE ID : %s\n", machine?machine:"UNKNOWN");
|
|
fprintf(fp, "=> PERCENT CPU : %f\n", pctcpu);
|
|
fprintf(fp, "=> RESIDENT SIZE : %i\n", datasize);
|
|
fprintf(fp, "=> PACKETS SENT : %i\n", sendPktCnt);
|
|
fprintf(fp, "=> PACKETS RECV : %i\n", recvPktCnt);
|
|
fprintf(fp, "=> ACTIVE CLIENTS : %i\n", clientCnt);
|
|
fprintf(fp, "--------------------------------------------------------\n");
|
|
}
|
|
};
|