Guest User

sysinfo_icons.c

a guest
Jul 4th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.99 KB | None | 0 0
  1. /*
  2.  * sysinfos.c
  3.  * generate sys infos for my lemonbar config
  4.  *
  5.  * easysid - Tuesday, 27 June 2017 15:07 IST
  6.  *
  7.  * show info only when it exceeds a threshold
  8.  *
  9.  * broadly copied from https://github.com/TrilbyWhite/dwmStatus
  10.  * and other sources on the internet.
  11.  */
  12.  
  13. #include <stdio.h>
  14. #include <string.h>
  15. #include <time.h>
  16. #include <unistd.h>
  17. #include <arpa/inet.h>
  18. #include <sys/socket.h>
  19.  
  20. /* input files */
  21. #define CPU_FILE       "/proc/stat"
  22. #define RAM_FILE       "/proc/meminfo"
  23. #define AC_ADP_FILE    "/sys/class/power_supply/ADP1/online"
  24. #define BAT_CAP_FILE   "/sys/class/power_supply/BAT0/capacity"
  25. #define CPU_TEMP_FILE  "/sys/class/hwmon/hwmon1/temp2_input"
  26. #define _SERVER        "8.8.8.8"
  27. #define _PORT          53
  28. #define _TIMEOUT       500000
  29. #define FORMAT         "S"
  30. #define INTERVAL       3
  31.  
  32. /* Control values for thresholds */
  33. #define LIM_CPU 45
  34. #define LIM_RAM 1600
  35. #define LIM_TMP 59
  36. #define LIM_BAT 90
  37. #define LIM_BAT_LOW 30
  38. #define CYCLES_COUNT 5
  39.  
  40.  
  41. /* format strings */
  42. #define STR_SEP      "    "
  43.  
  44. /* icons from material design */
  45. /* CPU and RAM */
  46. #define STR_CPU      "%%{F#FFFAFAFA A:dzen_popup_toggle.sh sysinfo:}\uf3e1%%{F-} %.0f%%%%{A}"
  47. #define STR_RAM_M    "%%{F#FFFAFAFA A:dzen_popup_toggle.sh diskinfo:}\uf3e0%%{F-} %.0fM%%{A}"
  48. #define STR_RAM_G    "%%{F#FFFAFAFA A:dzen_popup_toggle.sh diskinfo:}\uf3e0%%{F-} %.2fG%%{A}"
  49. /* internet connection */
  50. #define STR_NET      "%%{F#FFFAFAFA A:dzen_popup_toggle.sh netinfo:}\uf2e8%%{F- A}"
  51. #define STR_NONET    "%%{F#FF999999 A:dzen_popup_toggle.sh netinfo:}\uf2e6%%{F- A}"
  52. /* temperatures */
  53. #define STR_TEMP     "%%{F#FFFAFAFA}\uf161%%{F-} %ld°"
  54. /* clock and calendar*/
  55. #define STR_CLK      "C %%{F-}%s"
  56. #define STR_CAL      "%%{F- A:dzen_popup_toggle.sh calendar:}\uf331 %s %%{A}"
  57. /* ac and battery status */
  58. #define STR_AC       "%%{F#FFFAFAFA}\uf2a1%%{F-}"
  59. #define STR_CHG      "%%{F#FFFAFAFA}\uf114%%{F-} %ld%%"
  60. #define STR_BATF     "%%{F#FFFAFAFA}\uf116%%{F-}"
  61. #define STR_BATU     "%%{F#FFFAFAFA}\uf116%%{F-} %ld%%"
  62. #define STR_BATH     "%%{F#FFFAFAFA}\uf116%%{F-} %ld%%"
  63. #define STR_BATC     "%%{F#FFab4c42}\uf113%% %ld%%%%{F-}"
  64.  
  65.  
  66. const int test_flag = 0;
  67.  
  68.  
  69. void print_long_info()
  70. {
  71.     char format = 'S';
  72.     // display flags
  73.     int show_cpu, show_ram, show_temp;
  74.     int cpu_count, ram_count, temp_count;
  75.     int sock;
  76.     long a, b, c, d, e, f, g, idle, total, oldidle, oldtotal, total_d, idle_d;
  77.     float used;
  78.     char str[30], tmp[100], status[512];
  79.     FILE *infile;
  80.     time_t now;
  81.     struct tm *lt;
  82.     struct timeval timeout;
  83.     struct sockaddr_in addr = {AF_INET, htons(_PORT), {inet_addr(_SERVER)}, {0}};
  84.     timeout.tv_sec = 0;
  85.     timeout.tv_usec = _TIMEOUT;
  86.  
  87.     // seed cpu usage values. Saves time in main loop
  88.     infile = fopen(CPU_FILE, "r");
  89.     fscanf(infile, "cpu %ld %ld %ld %ld %ld %ld %ld", &a, &b, &c, &d, &e, &f, &g);
  90.     fclose(infile);
  91.     oldtotal = a+b+c+d+e+f+g;
  92.     oldidle = d+e;
  93.     // initialize the flags
  94.     show_cpu = show_ram = show_temp = 0;
  95.     cpu_count = ram_count = temp_count = CYCLES_COUNT;
  96.     // infinite loop
  97.     for (;;) {
  98.         tmp[0] = status[0] = '\0';
  99.  
  100.         // CPU
  101.         infile = fopen(CPU_FILE, "r");
  102.         fscanf(infile, "cpu %ld %ld %ld %ld %ld %ld %ld", &a, &b, &c, &d, &e, &f, &g);
  103.         fclose(infile);
  104.         total = a+b+c+d+e+f+g;
  105.         idle = d+e;
  106.         total_d = total - oldtotal;
  107.         idle_d = idle - oldidle;
  108.         oldtotal = total;
  109.         oldidle = idle;
  110.         used = 0.0;
  111.         if (total_d > 0)
  112.             used = 100*(total_d - idle_d)/total_d;
  113.         if (used > LIM_CPU)
  114.             show_cpu = cpu_count = 1;
  115.         else
  116.             show_cpu = 0;
  117.         if (show_cpu == 1 || cpu_count < CYCLES_COUNT || test_flag) {
  118.             sprintf(tmp, STR_CPU, used);
  119.             strcat(status, tmp);
  120.             strcat(status, STR_SEP);
  121.         }
  122.  
  123.         // RAM
  124.         infile = fopen(RAM_FILE, "r");
  125.         fscanf(infile, "MemTotal: %ld kB\nMemFree: %ld kB\nMemAvailable: %ld kB\
  126.                \nBuffers: %ld kB\nCached: %ld kB", &total, &f, &a, &b, &c);
  127.         fclose(infile);
  128.         used = (total - f - b - c)/1024;
  129.         if (used > LIM_RAM)
  130.             show_ram = ram_count = 1;
  131.         else
  132.             show_ram = 0;
  133.         if (show_ram == 1 || ram_count < CYCLES_COUNT || test_flag) {
  134.             if (used >= 1000)
  135.                 sprintf(tmp, STR_RAM_G, used/1024);
  136.             else
  137.                 sprintf(tmp, STR_RAM_M, used);
  138.             strcat(status, tmp);
  139.             strcat(status, STR_SEP);
  140.         }
  141.  
  142.         // Temperatures
  143.         infile = fopen(CPU_TEMP_FILE, "r");
  144.         fscanf(infile, "%ld\n", &a);
  145.         fclose(infile);
  146.         /* infile = fopen(GPU_TEMP_FILE, "r"); */
  147.         /* fscanf(infile, "%ld\n", &b); */
  148.         /* fclose(infile); */
  149.         a = a/1000;
  150.         if (a > LIM_TMP)
  151.             show_temp = temp_count = 1;
  152.         else
  153.             show_temp = 0;
  154.         if (show_temp == 1 || temp_count < CYCLES_COUNT || test_flag) {
  155.             sprintf(tmp, STR_TEMP, a);
  156.             strcat(status, tmp);
  157.             strcat(status, STR_SEP);
  158.         }
  159.  
  160.         // Network
  161.         sock = socket(AF_INET, SOCK_STREAM, 0);
  162.         setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout));
  163.         setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout));
  164.         if (connect(sock, (struct sockaddr *) &addr, sizeof(addr)) != 0)
  165.             sprintf(tmp, STR_NONET);
  166.         else
  167.             sprintf(tmp, STR_NET);
  168.         strcat(status, tmp);
  169.         strcat(status, STR_SEP);
  170.         close(sock);
  171.  
  172.         // Battery
  173.         infile = fopen(AC_ADP_FILE, "r");
  174.         fscanf(infile, "%ld\n", &a);
  175.         fclose(infile);
  176.         infile = fopen(BAT_CAP_FILE, "r");
  177.         fscanf(infile, "%ld\n", &c);
  178.         fclose(infile);
  179.         if (a == 1) {
  180.             if (c < LIM_BAT)
  181.                 sprintf(tmp, STR_CHG, c);
  182.             else
  183.                 sprintf(tmp, STR_AC);
  184.             strcat(status, tmp);
  185.             strcat(status, STR_SEP);
  186.         }
  187.         else {
  188.             if (c < LIM_BAT_LOW)
  189.                 sprintf(tmp, STR_BATC, c);
  190.             else if (c < 50)
  191.                 sprintf(tmp, STR_BATH, c);
  192.             else if (c < 80)
  193.                 sprintf(tmp, STR_BATU, c);
  194.             else
  195.                 sprintf(tmp, STR_BATF);
  196.             strcat(status, tmp);
  197.             strcat(status, STR_SEP);
  198.         }
  199.  
  200.         // calendar
  201.         time(&now);
  202.         lt = localtime(&now);
  203.         strftime(str, sizeof(str), "%a, %d %b", lt);
  204.         sprintf(tmp, STR_CAL, str);
  205.         strcat(status, tmp);
  206.  
  207.         // Clock
  208.         strftime(str, sizeof(str), "%l:%M %p", lt);
  209.         sprintf(tmp, STR_CLK, str);
  210.  
  211.         printf("%c %s\n", format, status);
  212.         printf("%s\n", tmp);
  213.         fflush(stdout);
  214.         cpu_count++;
  215.         ram_count++;
  216.         temp_count++;
  217.         sleep(INTERVAL);
  218.     }
  219. }
  220.  
  221.  
  222. int main()
  223. {
  224.     print_long_info();
  225.     return 0;
  226. }
Add Comment
Please, Sign In to add comment