source: npl/mediabox/lcdproc_edwin/src/clients/lcdproc/load.c @ c5c522c

gcc484ntopperl-5.22
Last change on this file since c5c522c was c5c522c, checked in by Edwin Eefting <edwin@datux.nl>, 8 years ago

initial commit, transferred from cleaned syn3 svn tree

  • Property mode set to 100644
File size: 3.5 KB
Line 
1#include <stdlib.h>
2#include <stdio.h>
3#include <string.h>
4#include <unistd.h>
5#include <fcntl.h>
6
7#include "../../shared/sockets.h"
8
9#include "main.h"
10#include "mode.h"
11#include "load.h"
12
13int loadavg_fd = 0;
14
15static double get_loadavg(void);
16
17static double get_loadavg(void)
18{
19  double load;
20
21  reread(loadavg_fd, "get_load:");
22  sscanf(buffer, "%lf", &load);
23  return load;
24}
25
26
27int load_init()
28{
29   if(!loadavg_fd)
30      loadavg_fd = open("/proc/loadavg",O_RDONLY);
31   
32   return 0;
33}
34
35int load_close()
36{
37   if(loadavg_fd)
38      close(loadavg_fd);
39
40   loadavg_fd = 0;
41   
42   return 0;
43}
44
45
46///////////////////////////////////////////////////////////////////////////
47// Shows a display very similar to "xload"'s histogram.
48//
49
50int xload_screen(int rep, int display)
51{
52   static int first = 1;
53   static float loads[LCD_MAX_WIDTH];
54   int n, i;
55   float loadmax=0, factor, x;
56   int status = 0;
57
58 
59   if(first)  // Only the first time this is ever called...
60   {
61      first = 0;
62      memset(loads, 0, sizeof(float)*LCD_MAX_WIDTH);
63     
64      sock_send_string(sock, "screen_add X\n");
65      sprintf(buffer, "screen_set X name {X-Load: %s}\n", host);
66      sock_send_string(sock, buffer);
67      // Add the vbars...
68      for(i=1; i<lcd_wid; i++)
69      {
70         sprintf(tmp, "widget_add X %i vbar\n", i);
71         sock_send_string(sock, tmp);
72         sprintf(tmp, "widget_set X %i %i %i 0\n", i, i, lcd_hgt);
73         sock_send_string(sock, tmp);
74      }
75      // And add a title...
76      if(lcd_hgt >= 4)
77      {
78         sock_send_string(sock, "widget_add X title title\n");
79         sock_send_string(sock, "widget_set X title {LOAD        }\n");
80      }
81      else
82      {
83         sock_send_string(sock, "widget_add X title string\n");
84         sock_send_string(sock, "widget_set X title 1 1 {LOAD}\n");
85         sock_send_string(sock, "widget_del X heartbeat\n");
86      }
87      sock_send_string(sock, "widget_add X zero string\n");
88      sock_send_string(sock, "widget_add X top string\n");
89      sprintf(tmp, "widget_set X zero %i %i 0\n", lcd_wid, lcd_hgt);
90      sock_send_string(sock, tmp);
91      sprintf(tmp, "widget_set X top %i %i 1\n",
92              lcd_wid, (lcd_hgt==2)?1:2);
93      sock_send_string(sock, tmp);
94   }
95
96
97
98   for(n=0; n<(lcd_wid-2); n++) loads[n] = loads[n+1];
99   loads[lcd_wid-2] = get_loadavg();
100
101   for(n=0; n<lcd_wid-1; n++)
102      if(loads[n] > loadmax) loadmax = loads[n];
103
104   n = (int)loadmax;
105   if ((float)n < loadmax) { n++; }
106   sprintf(tmp, "widget_set X top %i %i %i\n",
107           lcd_wid, (lcd_hgt==2)?1:2, n);
108   //if(display) sock_send_string(sock, tmp);
109   sock_send_string(sock, tmp);
110
111   
112   if (loadmax < 1.0) factor = (float)(lcd_cellhgt) * ((lcd_hgt==2)?2.0:3.0);
113   else factor = (float)(lcd_cellhgt) * ((lcd_hgt==2)?2.0:3.0) / (float)n;
114
115   for(n=0; n<lcd_wid-1; n++)
116   {
117      x = (loads[n] * factor);
118      //###test!!!!!!
119      //x=n;
120     
121      sprintf(tmp, "widget_set X %i %i %i %i\n", n+1, n+1, lcd_hgt, (int)x);
122      //if(display) sock_send_string(sock, tmp);
123      sock_send_string(sock, tmp);
124   }
125   
126   if(loadmax < LOAD_MIN)
127   {
128      status = BACKLIGHT_OFF;
129   }
130   if(loadmax > LOAD_MIN)
131   {
132      status = BACKLIGHT_ON;
133   }
134   if(loads[lcd_wid-2] > LOAD_MAX)
135   {
136      status = BLINK_ON;
137   }
138
139   // And now the title...
140   if(lcd_hgt >= 4)
141      sprintf(tmp, "widget_set X title {LOAD %2.2f: %s}\n",
142              loads[lcd_wid-2], host);
143   else
144      sprintf(tmp, "widget_set X title 1 1 {%s %2.2f}\n",
145              host, loads[lcd_wid-2]);
146   //if(display) sock_send_string(sock, tmp);
147   sock_send_string(sock, tmp);
148
149
150   return status;
151} // End xload_screen()
152
153
154
Note: See TracBrowser for help on using the repository browser.