68,87d67 < int strIndexOf(char *string1, char *string2); < char *strSubstring(char *string1, char *string2, int StartingPos, int EndPos); < char *GetThreadsPerfdata(char *stringtoparse); < char *GetQuestionsPerfdata(char *stringtoparse); < char *GetSQPerfdata(char *stringtoparse); < char *GetOpensPerfdata(char *stringtoparse); < char *GetFTPerfdata(char *stringtoparse); < char *GetOTPerfdata(char *stringtoparse); < char *GetQPSAPerfdata(char *stringtoparse); < < struct mysql_statistics < { < char *ThreadsPerfdata; < char *QuestionsPerfdata; < char *SQPerfdata; < char *OpensPerfdata; < char *FTPerfdata; < char *OTPerfdata; < char *QPSAPerfdata; < }; 102,105d81 < < /* variables needed to parse */ < char *StringToParse; < struct mysql_statistics Stats; 138,154d113 < /* parse the server stats */ < strcpy(StringToParse, result); < < Stats.ThreadsPerfdata = GetThreadsPerfdata(StringToParse); < strcpy(StringToParse, result); < Stats.QuestionsPerfdata = GetQuestionsPerfdata(StringToParse); < strcpy(StringToParse, result); < Stats.SQPerfdata = GetSQPerfdata(StringToParse); < strcpy(StringToParse, result); < Stats.OpensPerfdata = GetOpensPerfdata(StringToParse); < strcpy(StringToParse, result); < Stats.FTPerfdata = GetFTPerfdata(StringToParse); < strcpy(StringToParse, result); < Stats.OTPerfdata = GetOTPerfdata(StringToParse); < strcpy(StringToParse, result); < Stats.QPSAPerfdata = GetQPSAPerfdata(StringToParse); < 270c229 < printf ("%s %s | %s %s %s %s %s %s %s\n", result, slaveresult, Stats.ThreadsPerfdata, Stats.SQPerfdata, Stats.OpensPerfdata, Stats.FTPerfdata, Stats.OTPerfdata, Stats.QPSAPerfdata); --- > printf ("%s %s\n", result, slaveresult); 272c231 < printf ("%s | %s %s %s %s %s %s %s\n", result, Stats.ThreadsPerfdata, Stats.QuestionsPerfdata, Stats.SQPerfdata, Stats.OpensPerfdata, Stats.FTPerfdata, Stats.OTPerfdata, Stats.QPSAPerfdata); --- > printf ("%s\n", result); 278,512d236 < char < *GetQPSAPerfdata(char *stringtoparse) < { < int Start = 0; < int End = 0; < char *qpsa; < char *output; < Start = strIndexOf("Queries per second avg\0", stringtoparse); < End = strlen(stringtoparse); < < qpsa = strSubstring(qpsa, stringtoparse, Start, End); < qpsa = strSubstring(qpsa, qpsa, strIndexOf(" \0", qpsa) + 1, strlen(qpsa)); < qpsa = strSubstring(qpsa, qpsa, strIndexOf(" \0", qpsa) + 1, strlen(qpsa)); < qpsa = strSubstring(qpsa, qpsa, strIndexOf(" \0", qpsa) + 1, strlen(qpsa)); < qpsa = strSubstring(qpsa, qpsa, strIndexOf(" \0", qpsa) + 1, strlen(qpsa)); < printf("%s", qpsa); < asprintf(&output, "%s", fperfdata("queries_per_second_avg", atof(qpsa), "", < FALSE, 0, < FALSE, 0, < TRUE, 0, < FALSE, 0)); < < return output; < } < < char < *GetOTPerfdata(char *stringtoparse) < { < int Start = 0; < int End = 0; < char *ot; < char *output; < Start = strIndexOf("Open tables\0", stringtoparse); < End = strIndexOf("Queries per second avg\0", stringtoparse); < < ot = strSubstring(ot, stringtoparse, Start, End - 2); < ot = strSubstring(ot, ot, strIndexOf(" \0", ot) + 1, strlen(ot)); < ot = strSubstring(ot, ot, strIndexOf(" \0", ot) + 1, strlen(ot)); < asprintf(&output, "%s", perfdata("open_tables", atoi(ot), "", < FALSE, 0, < FALSE, 0, < TRUE, 0, < FALSE, 0)); < < return output; < } < < char < *GetFTPerfdata(char *stringtoparse) < { < int Start = 0; < int End = 0; < char *ft; < char *output; < Start = strIndexOf("Flush tables\0", stringtoparse); < End = strIndexOf("Open tables\0", stringtoparse); < < ft = strSubstring(ft, stringtoparse, Start, End - 2); < ft = strSubstring(ft, ft, strIndexOf(" \0", ft) + 1, strlen(ft)); < ft = strSubstring(ft, ft, strIndexOf(" \0", ft) + 1, strlen(ft)); < asprintf(&output, "%s", perfdata("flush_tables", atoi(ft), "", < FALSE, 0, < FALSE, 0, < TRUE, 0, < FALSE, 0)); < < return output; < } < < char < *GetOpensPerfdata(char *stringtoparse) < { < int Start = 0; < int End = 0; < char *opens; < char *output; < Start = strIndexOf("Opens\0", stringtoparse); < End = strIndexOf("Flush tables\0", stringtoparse); < < opens = strSubstring(opens, stringtoparse, Start, End - 2); < opens = strSubstring(opens, opens, strIndexOf(" \0", opens) + 1, strlen(opens)); < asprintf(&output, "%s", perfdata("opens", atoi(opens), "", < FALSE, 0, < FALSE, 0, < TRUE, 0, < FALSE, 0)); < < return output; < } < < char < *GetSQPerfdata(char *stringtoparse) < { < int Start = 0; < int End = 0; < char *slowqueries; < char *output; < Start = strIndexOf("Slow queries\0", stringtoparse); < End = strIndexOf("Opens\0", stringtoparse); < < slowqueries = strSubstring(slowqueries, stringtoparse, Start, End - 2); < slowqueries = strSubstring(slowqueries, slowqueries, strIndexOf(" \0", slowqueries) + 1, strlen(slowqueries)); < slowqueries = strSubstring(slowqueries, slowqueries, strIndexOf(" \0", slowqueries) + 1, strlen(slowqueries)); < asprintf(&output, "%s", perfdata("slow_queries", atoi(slowqueries), "", < FALSE, 0, < FALSE, 0, < TRUE, 0, < FALSE, 0)); < < return output; < } < < char < *GetQuestionsPerfdata(char *stringtoparse) < { < int Start = 0; < int End = 0; < char *questions; < char *output; < Start = strIndexOf("Questions\0", stringtoparse); < End = strIndexOf("Slow queries\0", stringtoparse); < < questions = strSubstring(questions, stringtoparse, Start, End - 2); < questions = strSubstring(questions, questions, strIndexOf(" \0", questions) + 1, strlen(questions)); < asprintf(&output, "%s", perfdata("questions", atoi(questions), "", < FALSE, 0, < FALSE, 0, < TRUE, 0, < FALSE, 0)); < < return output; < } < < char < *GetThreadsPerfdata(char *stringtoparse) < { < int Start = 0; < int End = 0; < char *threads; < char *output; < < Start = strIndexOf("Threads\0", stringtoparse); < End = strIndexOf("Questions\0", stringtoparse); < < threads = strSubstring(threads, stringtoparse, Start, End - 2); < threads = strSubstring(threads, threads, strIndexOf(" \0", threads) + 1, strlen(threads)); < asprintf(&output, "%s", perfdata("threads", atoi(threads), "", < FALSE, 0, < FALSE, 0, < TRUE, 0, < FALSE, 0)); < < return output; < } < < /* takes the substring from string1 between startingpos and the startingpos plus the length, < all is returned */ < char < *strSubstring(char *string1, char *string2, int StartingPos, int EndPos) < { < /* current position in string2 */ < int CurPos = 0; < /* current position in string1 */ < int String1Pos = 0; < char *NULLChar = "\0"; < < for (CurPos = StartingPos; CurPos < EndPos; CurPos++) < { < string1[String1Pos] = string2[CurPos]; < String1Pos++; < } < < string1[String1Pos] = *NULLChar; < < return string1; < } < < /* gets the starting position of string1 in string2, < if string1 is not contained in string2 then the function returns -1 */ < int < strIndexOf (char *string1, char *string2) < { < /* current position in string2 */ < int CurPos = 0; < /* the amount of matches found after the startingposition was found */ < int CharsFound = 0; < /* the starting position of string1 in string2 */ < int StartingPos = -1; < /* length of string1 */ < int Length1 = strlen(string1); < /* Length of string2 */ < int Length2 = strlen(string2); < /* the maximum length of the search */ < int MaxLength = 0; < < /* check if string2 is longer the string1, if not tell the program that something went wrong */ < if (Length2 < Length1) < { < return -2; < } < < /* calculate the max length of the search */ < MaxLength = Length2; < < for (CurPos = 0; CurPos != MaxLength; CurPos++) < { < if (CharsFound == Length1) < { < return StartingPos; < } < < if (StartingPos == -1) < { < if (string2[CurPos] == string1[CharsFound]) < { < StartingPos = CurPos; < CharsFound++; < } < } < else < { < if (string2[CurPos] == string1[CharsFound]) < { < CharsFound++; < } < else < { < CharsFound = 0; < StartingPos = -1; < } < } < } < < return -1; < }