#include "readUtil.h" #include "myMonitoringTool.h" #include // Rip an integer out of a string. int extract_int(char *str) { ///_|> descry: takes an integer out of a string ///_|> str: string to search ///_|> returning: void char num[LINE_BUF]; int num_idx = 0; int str_idx = 0; while (str[str_idx] != '\0') { if (isdigit(str[str_idx])) { num[num_idx] = str[str_idx]; num_idx++; } str_idx++; } num[num_idx] = '\0'; return atoi(num); } int get_file_line_value(char *filename, int linenum) { ///_|> descry: Get the integer at a specific line in a value. First line in /// file is line num ///_|> filename: file to search ///_|> linenum: line to read ///_|> returning: integer thats found FILE *file = fopen(filename, "r"); if (file == NULL) { printf("could not open %s", filename); exit(1); } char line[LINE_BUF]; for (int i = 0; i <= linenum; i++) { fgets(line, LINE_BUF, file); } fclose(file); char label[LINE_BUF]; char sep[LINE_BUF]; int value; char tail[LINE_BUF]; sscanf(line, "%s %s %d %s", label, sep, &value, tail); return extract_int(line); } long read_cpu_util() { ///_|> decry: Read total cpu time usage from /proc/stat ///_|> returning: cpu usage since boot char dummy[LINE_BUF]; long user; long nice; long system; long idle; // not counted long io; long intr; long sintr; long steal; long guest; long guest_nice; FILE *file = fopen("/proc/stat", "r"); if (file == NULL) { printf("could not open /proc/stat"); exit(1); } fscanf(file, "%s %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld", dummy, &user, &nice, &system, &idle, &io, &intr, &sintr, &steal, &guest, &guest_nice); fclose(file); // return value is in 1/100 s return user + nice + system + io + intr + sintr; }