#include #include #include #include #include #include #include #include #define INTERVAL 10 int get_cpu_usage_percentage(void); int get_ram_usage_percentage(void); void get_formatted_date_time(char *format, char *formattedDateTime); double get_available_space_from_mountpoint_gb(const char *mountpoint); double get_total_space_from_mountpoint_gb(const char *mountpoint); double get_used_space_from_mountpoint_gb(const char *mountpoint); double get_used_space_from_mountpoint_percentage(const char *mountpoint); int get_number_of_processes(void); #ifdef SYSINFO_IMPLEMENTATION int get_cpu_usage_percentage(void) { int perc; long double a[4], b[4]; FILE *fp; fp = fopen("/proc/stat", "r"); if (fp == NULL) { fprintf(stderr, "ERROR: failed to open file /proc/stat"); return 1; } fscanf(fp, "%*s %Lf %Lf %Lf %Lf", &a[0], &a[1], &a[2], &a[3]); fclose(fp); sleep(INTERVAL); fp = fopen("/proc/stat", "r"); if (fp == NULL) { fprintf(stderr, "ERROR: failed to open file /proc/stat"); return 1; } fscanf(fp, "%*s %Lf %Lf %Lf %Lf", &b[0], &b[1], &b[2], &b[3]); fclose(fp); perc = 100 * ((b[0]+b[1]+b[2]) - (a[0]+a[1]+a[2])) / ((b[0]+b[1]+b[2]+b[3]) - (a[0]+a[1]+a[2]+a[3])); return (perc); } int get_ram_usage_percentage(void) { long total, free, buffers, cached; FILE *fp; fp = fopen("/proc/meminfo", "r"); if (fp == NULL) { fprintf(stderr, "ERROR: failed to open file /proc/meminfo"); return 1; } fscanf(fp, "MemTotal: %ld kB\n", &total); fscanf(fp, "MemFree: %ld kB\n", &free); fscanf(fp, "MemAvailable: %ld kB\nBuffers: %ld kB\n", &buffers, &buffers); fscanf(fp, "Cached: %ld kB\n", &cached); fclose(fp); return (100 * ((total - free) - (buffers + cached)) / total); } void get_formatted_date_time(char *format, char *formattedDateTime) { time_t rawtime; struct tm *timeptr; time(&rawtime); timeptr = localtime(&rawtime); strftime(formattedDateTime, 80, format, timeptr); } double get_available_space_from_mountpoint_gb(const char *mountpoint) { struct statfs mountpointStatfs; statfs(mountpoint, &mountpointStatfs); return ((long double)mountpointStatfs.f_bfree * mountpointStatfs.f_bsize)/1073741824; } double get_total_space_from_mountpoint_gb(const char *mountpoint) { struct statfs mountpointStatfs; statfs(mountpoint, &mountpointStatfs); return ((long double)mountpointStatfs.f_blocks * mountpointStatfs.f_bsize)/1073741824; } double get_used_space_from_mountpoint_gb(const char *mountpoint) { struct statfs mountpointStatfs; statfs(mountpoint, &mountpointStatfs); return (((long double)mountpointStatfs.f_blocks * mountpointStatfs.f_bsize) - ((long double)mountpointStatfs.f_bfree * mountpointStatfs.f_bsize))/1073741824; } double get_used_space_from_mountpoint_percentage(const char *mountpoint) { return (get_used_space_from_mountpoint_gb(mountpoint)/get_total_space_from_mountpoint_gb(mountpoint)) * 100; } #endif