extern "C" _declspec (dllexport) BOOL DBSpace(const char * strParas, char * szRet, int& nSize) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strServerName=_T(""); CString strUserAccount=_T(""); CString strPassWord=_T(""); CString strDBFile=_T(""); CStringList lstParas; MakeStringListByChar(lstParas,strParas); strServerName = GetValueFromList("_ServerName",lstParas); strUserAccount = GetValueFromList("_UserAccount",lstParas); strPassWord = GetValueFromList("_PassWord",lstParas); strDBFile = GetValueFromList("_DBFile",lstParas); char szResult[1024*10]={0}; char szServer[1024]={0}; strcpy(szServer,strServerName); HANDLE hhandle =CreateMutex(NULL,FALSE,"Global\\SiteView-Lotus-Montior"); if(hhandle ==NULL) { DWORD nlast; nlast =GetLastError(); printf("begin wait last error is %d\n",nlast); sprintf(szRet,"error=CreateMutex Failed code is %d", nlast); nSize = static_cast<int>(strlen(szRet)); return FALSE; } WaitForSingleObject(hhandle,INFINITE); WritePassword(strPassWord); if(!getDBSpace(szServer,strDBFile,szResult)) { ReleaseMutex(hhandle); CloseHandle(hhandle); CutFlag(szResult,0x13); sprintf(szRet,"error=%s", szResult); nSize = static_cast<int>(strlen(szRet)); return FALSE; } ReleaseMutex(hhandle); CloseHandle(hhandle); CString strInput =szResult; nSize = 4096; MakeCharByString(szRet,nSize,strInput); return TRUE; }
extern "C" _declspec (dllexport) BOOL FileList(const char * strParas, char * szRet, int& nSize) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strServerName=_T(""); CString strUserAccount=_T(""); CString strPassWord=_T(""); CString strDirectory = _T(""); CStringList lstParas; MakeStringListByChar(lstParas,strParas); strServerName = GetValueFromList("_ServerName",lstParas); strUserAccount = GetValueFromList("_UserAccount",lstParas); strPassWord = GetValueFromList("_PassWord",lstParas); strDirectory = GetValueFromList("_Directory",lstParas); char szResult[1024*10]={0}; char szServer[1024]={0}; strcpy(szServer,strServerName); CStringList lstTexts; CStringList lstValues; HANDLE hhandle =CreateMutex(NULL,FALSE,"Global\\SiteView-Lotus-Montior"); if(hhandle ==NULL) { DWORD nlast; nlast =GetLastError(); printf("begin wait last error is %d\n",nlast); sprintf(szRet,"error=CreateMutex Failed code is %d", nlast); nSize = static_cast<int>(strlen(szRet)); return FALSE; } WaitForSingleObject(hhandle,INFINITE); WritePassword(strPassWord); BOOL bResult = NSF_List(strServerName, strDirectory, lstTexts, lstValues, szResult); if(!bResult) { ReleaseMutex(hhandle); CloseHandle(hhandle); CutFlag(szResult,0x13); sprintf(szRet,"error=NSF_List Failed %s", szResult); nSize = static_cast<int>(strlen(szRet)); return FALSE; } ReleaseMutex(hhandle); CloseHandle(hhandle); POSITION pos=NULL; pos = lstTexts.GetHeadPosition(); char * ca; ca =szRet; CString strTemp; while(pos) { strTemp=lstTexts.GetNext(pos); if(strTemp.Find(".nsf",0)>=0) { sprintf(ca,"%s=%s$",strTemp.GetBuffer(strTemp.GetLength()),strTemp.GetBuffer(strTemp.GetLength())); ca=ca+2*strTemp.GetLength()+2; } //lstValues.AddTail(lstTexts.GetNext(pos)); } CString strInput =szRet; nSize = 4096; MakeCharByString(szRet,nSize,strInput); return TRUE; }
extern "C" _declspec (dllexport) BOOL Mail(const char * strParas, char * szRet, int& nSize) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strServerName=_T(""); CString strUserAccount=_T(""); CString strPassWord=_T(""); CStringList lstParas; MakeStringListByChar(lstParas,strParas); strServerName = GetValueFromList("_ServerName",lstParas); strUserAccount = GetValueFromList("_UserAccount",lstParas); strPassWord = GetValueFromList("_PassWord",lstParas); char szResult[1024*10]={0}; char szServer[1024]={0}; strcpy(szServer,strServerName); HANDLE hhandle =CreateMutex(NULL,FALSE,"Global\\SiteView-Lotus-Montior"); if(hhandle ==NULL) { DWORD nlast; nlast =GetLastError(); sprintf(szRet,"error=CreateMutex Failed code is %d", nlast); nSize = static_cast<int>(strlen(szRet)); return FALSE; } WaitForSingleObject(hhandle,INFINITE); WritePassword(strPassWord); STATUS nStatus =NF_Command(szServer,"show stat mail",szResult); ReleaseMutex(hhandle); CloseHandle(hhandle); if(nStatus != NOERROR) { sprintf(szRet,"error=%s", szResult); nSize = static_cast<int>(strlen(szRet)); return FALSE; } //CurrentByteDeliveryRate char value[64]={0}; GetValue(szResult,"CurrentByteDeliveryRate",value,3,"\n",1); sprintf(szRet, "%sDeliveredMailRate=%s$", szRet, value); //CurrentByteTransferRate memset(value,0,64); GetValue(szResult,"CurrentByteTransferRate",value,3,"\n",1); sprintf(szRet, "%sTaskMailTransferRate=%s$", szRet, value); //CurrentMessageDeliveryRate memset(value,0,64); GetValue(szResult,"CurrentMessageDeliveryRate",value,3,"\n",1); sprintf(szRet, "%sRoutedMailRate=%s$", szRet, value); //Dead memset(value,0,64); GetValue(szResult,"Dead",value,3,"\n",1); sprintf(szRet, "%sDeadmailRate=%s$", szRet, value); //TotalPending memset(value,0,64); GetValue(szResult,"TotalPending",value,3,"\n",1); sprintf(szRet, "%sTotalPending=%s$", szRet, value); //Waiting memset(value,0,64); GetValue(szResult,"Waiting",value,3,"\n",1); sprintf(szRet, "%sWaitingMail=%s$", szRet, value); //WaitingRecipients memset(value,0,64); GetValue(szResult,"WaitingRecipients",value,3,"\n",1); sprintf(szRet, "%sWaitingRecipients=%s$", szRet, value); CString strInput =szRet; nSize = 4096; MakeCharByString(szRet,nSize,strInput); return TRUE; }
extern "C" _declspec (dllexport) BOOL Task(const char * strParas, char * szRet, int& nSize) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strServerName=_T(""); CString strUserAccount=_T(""); CString strPassWord=_T(""); CStringList lstParas; MakeStringListByChar(lstParas,strParas); strServerName = GetValueFromList("_ServerName",lstParas); strUserAccount = GetValueFromList("_UserAccount",lstParas); strPassWord = GetValueFromList("_PassWord",lstParas); char szResult[1024*10]={0}; char szServer[1024]={0}; strcpy(szServer,strServerName); HANDLE hhandle =CreateMutex(NULL,FALSE,"Global\\SiteView-Lotus-Montior"); if(hhandle ==NULL) { DWORD nlast; nlast =GetLastError(); sprintf(szRet,"error=CreateMutex Failed code is %d", nlast); nSize = static_cast<int>(strlen(szRet)); return FALSE; } WaitForSingleObject(hhandle,INFINITE); WritePassword(strPassWord); STATUS nStatus=NF_Command(szServer,"show stat server",szResult); if(nStatus != NOERROR) { sprintf(szRet,"error=%s", szResult); nSize = static_cast<int>(strlen(szRet)); ReleaseMutex(hhandle); CloseHandle(hhandle); return FALSE; } //Task count char value[64]={0}; GetValue(szResult,"Tasks",value,3,"\n",1); sprintf(szRet, "%sTaskCount=%s$", szRet, value); //TransPerMinute memset(value,0,64); GetValue(szResult,"Server.Trans.PerMinute",value,3,"\n",1); sprintf(szRet, "%sTransPerMinute=%s$", szRet, value); //UsersPeak memset(value,0,64); GetValue(szResult,"Server.Users.Peak",value,3,"\n",1); sprintf(szRet, "%sUsersPeak=%s$", szRet, value); memset(szResult, 0, 1024*10); nStatus=NF_Command(szServer,"show tasks",szResult); if(nStatus != NOERROR) { sprintf(szRet,"error=%s", szResult); nSize = static_cast<int>(strlen(szRet)); ReleaseMutex(hhandle); CloseHandle(hhandle); return FALSE; } ReleaseMutex(hhandle); CloseHandle(hhandle); memset(value,0,64); GetValue(szResult,"Router",value,3,"\n",1); sprintf(szRet, "%sRouterStatus=%s$", szRet, value); memset(value,0,64); GetValue(szResult,"Replicator",value,3,"\n",1); sprintf(szRet, "%sRepicatorStatus=%s$", szRet, value); memset(value,0,64); GetValue(szResult,"Event Monitor",value,3,"\n",1); sprintf(szRet, "%sEventStatus=%s$", szRet, value); CString strInput =szRet; nSize = 4096; MakeCharByString(szRet,nSize,strInput); return TRUE; }
extern "C" _declspec (dllexport) BOOL Disk(const char * strParas, char * szRet, int& nSize) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strServerName=_T(""); CString strUserAccount=_T(""); CString strPassWord=_T(""); CStringList lstParas; MakeStringListByChar(lstParas,strParas); strServerName = GetValueFromList("_ServerName",lstParas); strUserAccount = GetValueFromList("_UserAccount",lstParas); strPassWord = GetValueFromList("_PassWord",lstParas); char szResult[1024*10]={0}; char szServer[1024]={0}; strcpy(szServer,strServerName); HANDLE hhandle =CreateMutex(NULL,FALSE,"Global\\SiteView-Lotus-Montior"); if(hhandle ==NULL) { DWORD nlast; nlast =GetLastError(); sprintf(szRet,"error=CreateMutex Failed code is %d ", nlast); nSize = static_cast<int>(strlen(szRet)); return FALSE; } WaitForSingleObject(hhandle,INFINITE); WritePassword(strPassWord); //得到磁盘 STATUS nStatus = NF_Command(szServer,"show stat disk",szResult); ReleaseMutex(hhandle); CloseHandle(hhandle); if(nStatus != NOERROR) { sprintf(szRet,"error=%s", szResult); nSize = static_cast<int>(strlen(szRet)); return FALSE; } //Free char value[64]={0}; GetValue(szResult,"Free",value,3,"\n",1); CutFlag(value,','); double dValue = atof(value)/1024/1024; sprintf(szRet, "%sFreeDisks=%.2f$", szRet,dValue); //Size memset(value,0,64); GetValue(szResult,"Size",value,3,"\n",1); CutFlag(value,','); dValue = atof(value)/1024/1024; sprintf(szRet, "%sSizeDisks=%.2f$", szRet,dValue); //Type memset(value,0,64); GetValue(szResult,"Type",value,3,"\n",1); sprintf(szRet, "%sTypeDisks=%s$", szRet, value); //Fixed memset(value,0,64); GetValue(szResult,"Fixed",value,3,"\n",1); sprintf(szRet, "%sFixedDisks=%s$", szRet, value); //Remote memset(value,0,64); GetValue(szResult,"Fixed",value,3,"\n",1); sprintf(szRet, "%sRemoteDisks=%s$", szRet, value); CString strInput =szRet; nSize = 4096; MakeCharByString(szRet,nSize,strInput); return TRUE; }
BOOL MySqlMem(const char * strParas, char * szReturn, int& nSize) { CString strReturn = "", strHost = _T(""), strUser = _T(""), //UserName strPwd = _T("");// Password CStringList paramList; MakeStringListByChar(paramList,strParas); POSITION pos = paramList.GetHeadPosition(); while(pos) { CString strTemp = paramList.GetNext(pos); if(strTemp.Find(__MACHINENAME__, 0) == 0) {//Get Host strHost = strTemp.Right(strTemp.GetLength() - (int)strlen(__MACHINENAME__)); } else if(strTemp.Find(__WINUSERACCOUNT__, 0) == 0) {//Get Username strUser = strTemp.Right(strTemp.GetLength() - (int)strlen(__WINUSERACCOUNT__)); } else if(strTemp.Find(__WINPASSWORD__, 0) == 0) {//Get password strPwd = strTemp.Right(strTemp.GetLength() - (int)strlen(__WINPASSWORD__)); } } //ofstream fout("mysqltest.txt",ios::app); //fout << strHost<< ","<<strUser<< ","<<strPwd<< ","<<"\r\n"; //fout << flush; //fout.close(); CoInitialize(NULL); try { WbemScripting::ISWbemLocatorPtr locator; locator.CreateInstance(WbemScripting::CLSID_SWbemLocator); if (locator != NULL) { WbemScripting::ISWbemServicesPtr services; if(IsLocalHost(strHost)) services = locator->ConnectServer(".","root\\cimv2","","","","",0,NULL); else services = locator->ConnectServer((_bstr_t)strHost,"root\\cimv2",(_bstr_t)strUser,(_bstr_t)strPwd,"","",0,NULL); WbemScripting::ISWbemObjectSetPtr objects = services->InstancesOf("Win32_LogicalMemoryConfiguration", 0x10, NULL); IEnumVARIANTPtr obj_enum = objects->Get_NewEnum(); ULONG fetched; VARIANT var; int nTotalPhyMem, nTotalVirMem; while (obj_enum->Next(1,&var,&fetched) == S_OK) { WbemScripting::ISWbemObjectPtr object = var; WbemScripting::ISWbemPropertySetPtr properties = object->Properties_; WbemScripting::ISWbemPropertyPtr prop = properties->Item("TotalPhysicalMemory",0); _variant_t value = prop->GetValue(); nTotalPhyMem = (int)value; prop = properties->Item("TotalVirtualMemory",0); value = prop->GetValue(); nTotalVirMem = (int)value; } _bstr_t com; com="SELECT * FROM Win32_PerfRawData_PerfProc_Process WHERE NAME='mysqld-nt' or NAME='mysqld'"; objects = services->ExecQuery(com,"WQL",0x10,NULL); obj_enum = objects->Get_NewEnum(); while (obj_enum->Next(1,&var,&fetched) == S_OK) { WbemScripting::ISWbemObjectPtr object = var; WbemScripting::ISWbemPropertySetPtr properties = object->Properties_; WbemScripting::ISWbemPropertyPtr prop = properties->Item("WorkingSet",0); _variant_t value = prop->GetValue(); int nPhyMem = (int)value/1024; prop = properties->Item("PrivateBytes",0); value = prop->GetValue(); int nVirMem = (int)value/1024; float fMySqlPhyMemUsage, fMySqlVirMemUsage; fMySqlPhyMemUsage = (float)nPhyMem/(float)nTotalPhyMem*100; fMySqlVirMemUsage = (float)nVirMem/(float)nTotalVirMem*100; strReturn.Format("MySqlPhyMem=%d$MySqlVirMem=%d$MySqlPhyMemUsage=%.2f$MySqlVirMemUsage=%.2f$TotalPhyMem=%d$TotalVirMem=%d$", nPhyMem, nVirMem, fMySqlPhyMemUsage, fMySqlVirMemUsage, nTotalPhyMem, nTotalVirMem); } if(strReturn == "") { sprintf(szReturn, "error=MySql is not run on this server!"); return FALSE; } } } catch (_com_error err) { char buf[200] = {0}; IErrorInfo * ei = err.ErrorInfo(); BSTR strDesEI; ei->GetDescription(&strDesEI); sprintf(szReturn, "error=Error ocured:%x: %s", (unsigned)err.Error(),_com_util::ConvertBSTRToString(strDesEI)); return FALSE; } catch(...) { sprintf(szReturn, "error=Error ocured: %d",::GetLastError()); return FALSE; } strcpy(szReturn,strReturn); CString strOutRet; strOutRet =szReturn; nSize = 2048; MakeCharByString(szReturn,nSize,strOutRet); CoUninitialize(); return TRUE; }
BOOL MemoryStatus(const char * strParas , char * szReturn, int &nSize) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); bool bRet = FALSE; CString strHost = _T(""); CString strUserName = _T(""); CString strPWD = _T(""); int nPort = 3306; //MySQL的默认端口号 MYSQL * mysql; //MySQL对象 MYSQL_RES * res; //MySQL记录集指针 MYSQL_ROW row; //MySQL行指针 CStringList strList; MakeStringListByChar(strList, strParas); POSITION pos=strList.GetHeadPosition(); while(pos) { CString strTemp=strList.GetNext(pos); if(strTemp.Find(__MACHINENAME__)==0) { strHost = strTemp.Right(strTemp.GetLength() - (int)strlen(__MACHINENAME__)); } else if(strTemp.Find(__USERACCOUNT__)==0) { strUserName = strTemp.Right(strTemp.GetLength() - (int)strlen(__USERACCOUNT__)); } else if(strTemp.Find(__PASSWORD__)==0) { strPWD = strTemp.Right(strTemp.GetLength() - (int)strlen(__PASSWORD__)); } else if(strTemp.Find(__PORT__)==0) { nPort = atoi(strTemp.Right(strTemp.GetLength() - (int)strlen(__PORT__))); } } if(strHost.IsEmpty()) { sprintf(szReturn,"error=%s$",FuncGetStringFromIDS("SV_MYSQL","MYSQL_SERVER_HOST_IS_NULL")); return FALSE; } if(nPort<=0) { sprintf(szReturn,"error=%s$",FuncGetStringFromIDS("SV_MYSQL","MYSQL_SERVER_PORT_IS_BAD")); return FALSE; } //////////////////////////////////////////////// int Innodb_page_size=0; //页大小(单位:字节) int Innodb_buffer_pool_pages_total =0; //缓冲池总大小(单位:页数) int Innodb_buffer_pool_pages_free = 0; //空页数(单位:页) int Innodb_buffer_pool_pages_data = 0; //包含数据的页(单位:页) int Innodb_buffer_pool_pages_dirty =0; //当前的脏页(单位:页),脏页是指该页包含尚未写磁盘的修改 int Innodb_buffer_pool_pages_latched = 0; //在InnoDB缓冲池中锁定的页数。这是当前正读或写或由于其它原因不能清空或删除的页数 unsigned int nCurrentID=0; //////////////////////////////////////////////// if((mysql = mysql_init((MYSQL *)NULL)) && mysql_real_connect(mysql, strHost, strUserName, strPWD, NULL, nPort, NULL, 0)) { mysql_query(mysql,"show status"); res = mysql_store_result(mysql); while(row = mysql_fetch_row(res)) { if(!strcmp(row[0], "Innodb_page_size")) { Innodb_page_size=atoi(row[1]); Innodb_page_size=Innodb_page_size/1024; //将页的单位从字节转化为Kb } else if(!strcmp(row[0], "Innodb_buffer_pool_pages_total")) { Innodb_buffer_pool_pages_total = atoi(row[1]); } else if(!strcmp(row[0], "Innodb_buffer_pool_pages_free")) { Innodb_buffer_pool_pages_free = atoi(row[1]); } else if(!strcmp(row[0], "Innodb_buffer_pool_pages_data")) { Innodb_buffer_pool_pages_data = atoi(row[1]); } else if(!strcmp(row[0], "Innodb_buffer_pool_pages_dirty")) { Innodb_buffer_pool_pages_dirty = atoi(row[1]); } else if(!strcmp(row[0], "Innodb_buffer_pool_pages_latched")) { Innodb_buffer_pool_pages_latched = atoi(row[1]); } } sprintf(szReturn,"PageSize=%d$TotalPages=%d$FreePages=%d$DataPages=%d$DirtyPages=%d$LatchedPages=%d$", Innodb_page_size, Innodb_buffer_pool_pages_total, Innodb_buffer_pool_pages_free, Innodb_buffer_pool_pages_data, Innodb_buffer_pool_pages_dirty, Innodb_buffer_pool_pages_latched); CString strInput ; strInput =szReturn; MakeCharByString(szReturn,nSize,strInput); mysql_free_result(res); bRet = TRUE; } else { sprintf(szReturn, "error=%s(%s:%d)$", FuncGetStringFromIDS("SV_MYSQL", "MYSQL_CONNECT_DATABASE_FAILED"), strHost, nPort); fprintf(stderr, "Failed to connect to database: Error: %s\n", mysql_error(mysql)); mysql_close( mysql ) ; return FALSE; } /* const char * strEnd = szReturn; while(*strEnd) { PrintLog(strEnd); strEnd+=strlen(strEnd)+1; } */ mysql_close(mysql); return TRUE; }
BOOL SlaveStatus(const char * strParas , char * szReturn, int &nSize) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); bool bRet = false; CString strHost = _T(""); CString strUserName = _T(""); CString strPWD = _T(""); int nPort = 3306; MYSQL_RES * res; //MYSQL数据库的记录集指针 MYSQL_ROW row; MYSQL *mysql; //接收MySQL数据的对象 CStringList paramList; MakeStringListByChar(paramList, strParas); POSITION pos = paramList.GetHeadPosition(); while(pos) { CString strTemp = paramList.GetNext(pos); if(strTemp.Find(__MACHINENAME__, 0)==0) { strHost = strTemp.Right(strTemp.GetLength() - (int)strlen(__MACHINENAME__)); } else if(strTemp.Find(__PORT__, 0)==0) { nPort = atoi(strTemp.Right(strTemp.GetLength() - (int)strlen(__PORT__))); } else if(strTemp.Find(__USERACCOUNT__ , 0)==0) { strUserName = strTemp.Right(strTemp.GetLength() - (int)strlen(__USERACCOUNT__)); } else if(strTemp.Find(__PASSWORD__ , 0)==0) { strPWD = strTemp.Right(strTemp.GetLength() - (int)strlen(__PASSWORD__)); } } if(strHost.IsEmpty()) { sprintf(szReturn,"error=%s",FuncGetStringFromIDS("SV_MYSQL","MYSQL_SERVER_HOST_IS_NULL")); return false; } if(nPort<=0) { sprintf(szReturn,"error=%s",FuncGetStringFromIDS("SV_MYSQL","MYSQL_SERVER_PORT_IS_BAD")); return false; } unsigned int i=0; CString strTMP = _T(""); ////////////////////////////////////////////////// CString strSlaveIOState = _T(""); CString strMasterHost = _T(""); CString strMasterUser = _T(""); CString strSlaveIORunning = _T(""); //Slave是否在运行 CString strSlaveSQLRunning = _T(""); int nMasterPort = 3306; CString strSecondsBehindMaster = _T(""); //最后一次同步时间 ////////////////////////////////////////////////// if((mysql = mysql_init((MYSQL *)NULL)) && mysql_real_connect(mysql,strHost, strUserName, strPWD, NULL, nPort, NULL, 0)) { mysql_query(mysql, "show slave status"); res = mysql_store_result(mysql); while(row = mysql_fetch_row(res)) { /* PrintLog(row[1]); PrintLog(row[2]); PrintLog(row[3]); for (i=0; i<mysql_num_fields(res); i++) { PrintLog(row[i]); } */ strSlaveIOState = row[0]; strMasterHost = row[1]; strMasterUser = row[2]; nMasterPort = atoi(row[3]); strSlaveIORunning =row[10]; strSlaveSQLRunning = row[11]; strSecondsBehindMaster = row[32]; } if(strSlaveIOState.IsEmpty()) strSlaveIOState="null"; if(strMasterHost.IsEmpty()) strMasterHost="null"; if(strMasterUser.IsEmpty()) strMasterUser="******"; if(strSlaveIORunning.IsEmpty()) strSlaveIORunning="null"; sprintf(szReturn,"SlaveIOState=%s$MasterHost=%s$MasterUser=%s$MasterPort=%d$SlaveIORunning=%s$SlaveSQLRunning=%s$SecondsBehindMaster=%s$", strSlaveIOState.GetBuffer(1), strMasterHost.GetBuffer(1), strMasterUser.GetBuffer(1), nMasterPort, strSlaveIORunning.GetBuffer(1), strSlaveSQLRunning.GetBuffer(1), strSecondsBehindMaster.GetBuffer(1)); CString strInput ; strInput =szReturn; MakeCharByString(szReturn,nSize,strInput); mysql_free_result(res); bRet = TRUE; } else { sprintf(szReturn, "error=%s(%s:%d)$", FuncGetStringFromIDS("SV_MYSQL", "MYSQL_CONNECT_DATABASE_FAILED"), strHost, nPort); fprintf(stderr, "Failed to connect to database: Error: %s\n", mysql_error(mysql)); mysql_close( mysql ) ; return FALSE; } mysql_close(mysql); /* char * strEnd = szReturn; while(*strEnd) { PrintLog(strEnd); strEnd+=strlen(strEnd)+1; } */ return bRet; }
BOOL ProList(const char * strParas , char * szReturn , int &nSize) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); bool bRet = false; CString strHost = _T(""); CString strUserName = _T(""); CString strPWD = _T(""); int nPort = 3306; //MySQL的默认端口号是3306 MYSQL_RES * res; //MYSQL数据库的记录集指针 MYSQL_ROW row; MYSQL *mysql; //接收MySQL数据的对象 CStringList paramList; MakeStringListByChar(paramList, strParas); POSITION pos = paramList.GetHeadPosition(); while(pos) { CString strTemp = paramList.GetNext(pos); if(strTemp.Find(__MACHINENAME__, 0)==0) { strHost = strTemp.Right(strTemp.GetLength() - (int)strlen(__MACHINENAME__)); } else if(strTemp.Find(__PORT__, 0)==0) { nPort = atoi(strTemp.Right(strTemp.GetLength() - (int)strlen(__PORT__))); } else if(strTemp.Find(__USERACCOUNT__ , 0)==0) { strUserName = strTemp.Right(strTemp.GetLength() - (int)strlen(__USERACCOUNT__)); } else if(strTemp.Find(__PASSWORD__ , 0)==0) { strPWD = strTemp.Right(strTemp.GetLength() - (int)strlen(__PASSWORD__)); } } if(strHost.IsEmpty()) { sprintf(szReturn,"error = %s",FuncGetStringFromIDS("SV_MYSQL","MYSQL_SERVER_HOST_IS_NULL")); return false; } if(nPort<=0) { sprintf(szReturn,"error = %s",FuncGetStringFromIDS("SV_MYSQL","MYSQL_SERVER_PORT_IS_BAD")); return false; } unsigned int i=0; CString strTMP = _T(""); ////////////////////////////////////////////////// int nID =0; //MYSQL线程标识,你要kill一个语句的时候很有用 unsigned long nCurrentID = 0; ////////////////////////////////////////////////// if((mysql = mysql_init((MYSQL *)NULL)) && mysql_real_connect(mysql,strHost, strUserName, strPWD, NULL, nPort, NULL, 0)) { res = mysql_list_processes(mysql); nCurrentID = mysql_thread_id(mysql); //获取当前线程ID号。 while(row = mysql_fetch_row(res)) { nID = atoi(row[0]); if(nID==nCurrentID) { break; } sprintf(szReturn,"%d=%d$",nID,nID); strTMP+=szReturn; } sprintf(szReturn,"%s$",strTMP.GetBuffer(1)); CString strInput ; strInput =szReturn; MakeCharByString(szReturn,nSize,strInput); mysql_free_result(res); //关闭查询的结果集 mysql_close(mysql); bRet = TRUE; } else { sprintf(szReturn, "error=%s(%s:%d)$", FuncGetStringFromIDS("SV_MYSQL", "MYSQL_CONNECT_DATABASE_FAILED"), strHost, nPort); fprintf(stderr, "Failed to connect to database: Error: %s\n", mysql_error(mysql)); mysql_close( mysql ) ; return FALSE; } /* const char * strEnd = szReturn; while(*strEnd) { PrintLog(strEnd); strEnd+=strlen(strEnd)+1; } */ return TRUE; }
BOOL ProInfo(const char * strParas , char * szReturn , int &nSize) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); bool bRet = false; CString strHost = _T(""); CString strUserName = _T(""); CString strPWD = _T(""); int nProID=0; //保存传进来的进程ID号 int nPort = 3306; //MySQL的默认端口号是3306 MYSQL_RES * res; //MYSQL数据库的记录集指针 MYSQL_ROW row; MYSQL *mysql; //接收MySQL数据的对象 CStringList paramList; MakeStringListByChar(paramList, strParas); POSITION pos = paramList.GetHeadPosition(); while(pos) { CString strTemp = paramList.GetNext(pos); if(strTemp.Find(__MACHINENAME__, 0)==0) { strHost = strTemp.Right(strTemp.GetLength() - (int)strlen(__MACHINENAME__)); } else if(strTemp.Find(__PORT__, 0)==0) { nPort = atoi(strTemp.Right(strTemp.GetLength() - (int)strlen(__PORT__))); } else if(strTemp.Find(__USERACCOUNT__ , 0)==0) { strUserName = strTemp.Right(strTemp.GetLength() - (int)strlen(__USERACCOUNT__)); } else if(strTemp.Find(__PASSWORD__ , 0)==0) { strPWD = strTemp.Right(strTemp.GetLength() - (int)strlen(__PASSWORD__)); } else if(strTemp.Find(__PROID__, 0)==0) { nProID = atoi(strTemp.Right(strTemp.GetLength() - (int)strlen(__PROID__))); } } if(strHost.IsEmpty()) { sprintf(szReturn,"error = %s",FuncGetStringFromIDS("SV_MYSQL","MYSQL_SERVER_HOST_IS_NULL")); return false; } if(nPort<=0) { sprintf(szReturn,"error = %s",FuncGetStringFromIDS("SV_MYSQL","MYSQL_SERVER_PORT_IS_BAD")); return false; } unsigned int i=0; CString strTMP = _T(""); ////////////////////////////////////////////////// int nID = 0; //MYSQL线程标识,你要kill一个语句的时候很有用 CString strDBUser = _T(""); //user列,显示当前用户,如果不是root,这个命令就只显示你权限范围内的sql语句 CString strDBHost = _T(""); //host列,显示这个语句是从哪个ip的哪个端口上发出的 CString strDatabase = _T(""); //db列,显示这个进程目前连接的是哪个数据库 CString strCommand = _T(""); //command列,显示当前连接的执行的命令,一般就是休眠(sleep),查询(query),连接(connect)。 int nTime = 0; //time列,此这个状态持续的时间,单位是秒 CString strState = _T(""); //state列,显示使用当前连接的sql语句的状态 CString strInfo = _T(""); //info列,显示这个sql语句,因为长度有限,所以长的sql语句就显示不全 unsigned long nCurrentID = 0; //当前线程ID int nTotalConn=0; //连接总数 map<CString,int> hostMap; map<CString,int>::const_iterator ptrHost; typedef pair <CString,int> hostPair; ////////////////////////////////////////////////// if((mysql = mysql_init((MYSQL *)NULL)) && mysql_real_connect(mysql,strHost, strUserName, strPWD, NULL, nPort, NULL, 0)) { // res = mysql_list_processes(mysql); CString strCommand=_T(""); mysql_query(mysql,"show processlist"); res = mysql_store_result(mysql); nCurrentID = mysql_thread_id(mysql); //获取当前线程ID strCommand.Format("kill %d",nCurrentID); while(row = mysql_fetch_row(res)) { nID = atoi(row[0]); strDBUser = row[1]; strDBHost = row[2]; strDatabase = row[3]; strCommand = row[4]; nTime = atoi(row[5]); strState = row[6]; strInfo = row[7]; strDBHost=strDBHost.Left(strDBHost.Find(':')); //擦掉获得的主机端口号 ptrHost = hostMap.find(strDBHost.GetBuffer(strDBHost.GetLength())); if(nID!=nCurrentID) { if(ptrHost==hostMap.end()) { hostMap.insert(hostPair(strDBHost.GetBuffer(strDBHost.GetLength()),1)); } //用MAP保存主机名,并且将主机出现次数统计在键值中 else { hostMap[strDBHost.GetBuffer(strDBHost.GetLength())]++; } } /* else { PrintLog(row[0]); PrintLog(row[2]); } */ nTotalConn++; } nTotalConn=nTotalConn-1; //减去自身的连接 for(ptrHost=hostMap.begin();ptrHost!=hostMap.end();ptrHost++) { strTMP.Format("%s%s的连接数是%d,",strTMP.GetBuffer(strTMP.GetLength()),ptrHost->first,ptrHost->second); } strTMP.Delete(strTMP.GetLength()-1,1); //去除返回值后多余的一个“,” sprintf(szReturn,"nTotalConn=%d$result=%s",nTotalConn,strTMP.GetBuffer(strTMP.GetLength())); CString strInput ; strInput =szReturn; MakeCharByString(szReturn,nSize,strInput); mysql_free_result(res); //释放结果集使用的内存。 mysql_close(mysql); // 关闭服务器连接。 bRet = TRUE; } else { sprintf(szReturn, "error=%s(%s:%d)$", FuncGetStringFromIDS("SV_MYSQL", "MYSQL_CONNECT_DATABASE_FAILED"), strHost, nPort); fprintf(stderr, "Failed to connect to database: Error: %s\n", mysql_error(mysql)); mysql_close( mysql ) ; return FALSE; } /* const char * strEnd=szReturn; while(*strEnd) { PrintLog(strEnd); strEnd+=strlen(strEnd)+1; } */ return bRet; }
BOOL MySQL(const char * strParas, char * szReturn, int& nSize) //(CStringList ¶mList, char *szReturn) { BOOL bRet = TRUE; CString strHost = _T(""), //MySqL Server //strDBName = _T("mysql"),//Database Name,default mysql strUser = _T(""), //UserName strPwd = _T("");// Password int nPort = 3306;//MySQL Server Port,default 3306 ///////////////////////////////////////////////////////////////////////////// const char *pszT;//Temp string MYSQL * myData ;//Access Mysql objcect ///////////////////////////////////////////////////////////////////////////// CStringList paramList; MakeStringListByChar(paramList,strParas); POSITION pos = paramList.GetHeadPosition(); while(pos) { CString strTemp = paramList.GetNext(pos); if(strTemp.Find(__MACHINENAME__, 0) == 0) {//Get Host strHost = strTemp.Right(strTemp.GetLength() - (int)strlen(__MACHINENAME__)); } else if(strTemp.Find(__PORT__, 0) == 0) {//Get Port nPort = atoi(strTemp.Right(strTemp.GetLength() - (int)strlen(__PORT__))); } else if(strTemp.Find(__USERACCOUNT__, 0) == 0) {//Get Username strUser = strTemp.Right(strTemp.GetLength() - (int)strlen(__USERACCOUNT__)); } else if(strTemp.Find(__PASSWORD__, 0) == 0) {//Get password strPwd = strTemp.Right(strTemp.GetLength() - (int)strlen(__PASSWORD__)); } /*else if(strTemp.Find(__DBNAME__, 0) == 0) {//Get database name strDBName = strTemp.Right(strTemp.GetLength() - strlen(__DBNAME__)); }*/ } if(strHost.IsEmpty()) {//host is empty sprintf(szReturn, "error=%s", FuncGetStringFromIDS("SV_MYSQL", "MYSQL_SERVER_HOST_IS_NULL")); return FALSE; } if(nPort <= 0) {//Invalid port sprintf(szReturn, "error=%s", FuncGetStringFromIDS("SV_MYSQL", "MYSQL_SERVER_PORT_IS_BAD")); return FALSE; } printf("----------%s--%s--%s--------\n",strHost,strUser,strPwd); if((myData = mysql_init((MYSQL*) 0)) && mysql_real_connect( myData, strHost, strUser, strPwd, NULL, nPort, NULL, 0 ) ) { /*if ( mysql_select_db( myData, strDBName ) < 0 ) { sprintf(szReturn, "error=%s(%s)$", FuncGetStringFromIDS("SV_MYSQL", "MYSQL_SELECT_DATABASE_FAILED"), strDBName); //printf( "Can't select the %s database !\n", strDBName) ; mysql_close( myData ) ; return FALSE; }*/ pszT = mysql_stat( myData ) ; //mysql_stat(MYSQL * myData)取得目录数据库系统状况 if(pszT) { Parser(pszT, strHost.GetBuffer(strHost.GetLength()), szReturn); // mysql_free_result(pszT); CString strInput ; strInput =szReturn; MakeCharByString(szReturn,nSize,strInput); } else { sprintf(szReturn, "error=%s", FuncGetStringFromIDS("SV_MYSQL", "MYSQL_QUERY_STAT_FAILED")); mysql_close( myData ) ; return FALSE; } } else { sprintf(szReturn, "error=%s(%s:%d)$", FuncGetStringFromIDS("SV_MYSQL", "MYSQL_CONNECT_DATABASE_FAILED"), strHost, nPort); //printf( "Can't connect to the mysql server on port %d !\n", // MYSQL_PORT ) ; fprintf(stderr, "Failed to connect to database: Error: %s\n", mysql_error(myData)); mysql_close( myData ) ; return FALSE; } mysql_close( myData ) ; return TRUE; }