89
91
void cd_disks_format_value_on_icon (CairoDataRenderer *pRenderer, int iNumValue, gchar *cFormatBuffer, int iBufferLength, CairoDockModuleInstance *myApplet)
91
static gchar s_upRateFormatted[11];
92
double fValue = cairo_data_renderer_get_normalized_current_value_with_latency (pRenderer, iNumValue);
93
int i = iNumValue / 2;
94
CDDiskSpeedData *pSpeed = g_list_nth_data (myData.lDisks, i);
95
fValue *= (iNumValue == i * 2 ? pSpeed->uMaxReadRate : pSpeed->uMaxWriteRate);
97
_cd_speed_formatRate (fValue, s_upRateFormatted, 11, FALSE);
98
snprintf (cFormatBuffer, iBufferLength,
100
cairo_data_renderer_can_write_values (pRenderer) ? (iNumValue == i * 2 ?"↑" : "↓") : "",
93
if (iNumValue < (int) myConfig.iNumberParts)
96
pSize = g_list_nth_data (myData.lParts, iNumValue);
97
snprintf (cFormatBuffer, iBufferLength,
103
static gchar s_upRateFormatted[11];
104
double fValue = cairo_data_renderer_get_normalized_current_value_with_latency (pRenderer, iNumValue);
105
int i = iNumValue / 2;
106
CDDiskSpeedData *pSpeed = g_list_nth_data (myData.lDisks, i);
107
fValue *= (iNumValue == i * 2 ? pSpeed->uMaxReadRate : pSpeed->uMaxWriteRate);
109
_cd_speed_formatRate (fValue, s_upRateFormatted, 11, FALSE);
110
snprintf (cFormatBuffer, iBufferLength,
112
cairo_data_renderer_can_write_values (pRenderer) ? (iNumValue == i * 2 ?"↑" : "↓") : "",
107
120
static gchar s_readRateFormatted[11], s_writeRateFormatted[11];
108
121
static double s_fValues[CD_DISKS_NB_MAX_VALUES];
109
122
//~ memset (s_fValues, 0, sizeof (s_fValues));
110
CDDiskSpeedData *pSpeed;
111
123
GString *sLabel = g_string_new ("");
127
if (myConfig.iNumberParts > 0)
130
for (i = 0; i < myConfig.iNumberParts; i++)
132
pSize = g_list_nth_data (myData.lParts, i);
133
s_fValues[i] = *pSize;
134
//cd_warning("Partition %d = %s : %.1f%%", i, myConfig.cParts[i], *pSize * 100);
136
if (myConfig.iInfoDisplay == CAIRO_DOCK_INFO_ON_LABEL)
139
g_string_append (sLabel, " - ");
141
g_string_append_printf (sLabel, "%s : %.1f%%", myConfig.cParts[i], *pSize * 100);
115
147
if (myData.iNumberDisks > 0)
149
CDDiskSpeedData *pSpeed;
117
150
for (i = 0; i < myData.iNumberDisks; i++)
119
152
pSpeed = g_list_nth_data (myData.lDisks, i);
183
219
double fTimeElapsed = g_timer_elapsed (myData.pClock, NULL);
184
220
g_timer_start (myData.pClock);
186
if (!(myData.iNumberDisks > 0))
222
if (!(myConfig.iNumberParts + myData.iNumberDisks > 0))
188
224
cairo_dock_downgrade_task_frequency (myData.pPeriodicTask);
189
225
cd_warning("Disks : No disk defined");
191
g_return_if_fail ((fTimeElapsed > 0.1) || (myData.iNumberDisks > 0));
227
g_return_if_fail ((fTimeElapsed > 0.1) || (myConfig.iNumberParts + myData.iNumberDisks > 0));
197
buff[BUFFSIZE-1] = 0;
198
fd = fopen (DISKS_SPEED_DATA_PIPE, "rb");
201
cairo_dock_downgrade_task_frequency (myData.pPeriodicTask);
202
cd_warning("Disks : Your kernel doesn't support diskstat. (2.5.70 or above required)");
206
//~ cairo_dock_set_normal_task_frequency (myData.pPeriodicTask);
229
if (myConfig.iNumberParts > 0)
208
CDDiskSpeedData* pSpeed;
209
long long unsigned uReadBlocks, uWriteBlocks;
213
if (!fgets(buff,BUFFSIZE-1,fd))
232
struct statvfs buffer;
235
for (i = 0; i < myConfig.iNumberParts; i++)
237
pSize = g_list_nth_data (myData.lParts, i);
238
status = statvfs(myConfig.cParts[i], &buffer);
239
*pSize = 1. - (double) buffer.f_bfree / (double) buffer.f_blocks;
243
if (myData.iNumberDisks > 0)
249
buff[BUFFSIZE-1] = 0;
250
fd = fopen (DISKS_SPEED_DATA_PIPE, "rb");
253
cairo_dock_downgrade_task_frequency (myData.pPeriodicTask);
254
cd_warning("Disks : Your kernel doesn't support diskstat. (2.5.70 or above required)");
258
//~ cairo_dock_set_normal_task_frequency (myData.pPeriodicTask);
260
CDDiskSpeedData* pSpeed;
261
long long unsigned uReadBlocks, uWriteBlocks;
219
/// Using Linux iostat : http://www.kernel.org/doc/Documentation/iostats.txt
220
/// gathering fields 3, 6 and 10
221
sscanf(buff, " %*d %*d %15s %*u %*u %llu %*u %*u %*u %llu %*u %*u %*u %*u",
222
//&disk_major, // field 1
229
if (strlen (disk_name) == 3)
230
for (i = 0; i < myData.iNumberDisks; i++)
265
if (!fgets(buff,BUFFSIZE-1,fd))
232
pSpeed = g_list_nth_data (myData.lDisks, i);
233
if (strcmp (pSpeed->cName, disk_name) == 0)
271
/// Using Linux iostat : http://www.kernel.org/doc/Documentation/iostats.txt
272
/// gathering fields 3, 6 and 10
273
sscanf(buff, " %*d %*d %15s %*u %*u %llu %*u %*u %*u %llu %*u %*u %*u %*u",
274
//&disk_major, // field 1
281
if (strlen (disk_name) == 3)
282
for (i = 0; i < myData.iNumberDisks; i++)
235
if (pSpeed->bInitialized) // la 1ere iteration on ne peut pas calculer le debit.
284
pSpeed = g_list_nth_data (myData.lDisks, i);
285
if (strcmp (pSpeed->cName, disk_name) == 0)
237
pSpeed->uReadSpeed = (uReadBlocks - pSpeed->uReadBlocks) * DISK_BLOCK_SIZE / fTimeElapsed;
238
pSpeed->uWriteSpeed = (uWriteBlocks - pSpeed->uWriteBlocks) * DISK_BLOCK_SIZE / fTimeElapsed;
287
if (pSpeed->bInitialized) // la 1ere iteration on ne peut pas calculer le debit.
289
pSpeed->uReadSpeed = (uReadBlocks - pSpeed->uReadBlocks) * DISK_BLOCK_SIZE / fTimeElapsed;
290
pSpeed->uWriteSpeed = (uWriteBlocks - pSpeed->uWriteBlocks) * DISK_BLOCK_SIZE / fTimeElapsed;
293
pSpeed->bInitialized = TRUE;
295
pSpeed->uReadBlocks = uReadBlocks;
296
pSpeed->uWriteBlocks = uWriteBlocks;
297
//~ cd_warning("%s %u %u", pSpeed->cName, pSpeed->uReadSpeed, pSpeed->uWriteSpeed);
299
pSpeed->bAcquisitionOK = TRUE;
241
pSpeed->bInitialized = TRUE;
243
pSpeed->uReadBlocks = uReadBlocks;
244
pSpeed->uWriteBlocks = uWriteBlocks;
245
//~ cd_warning("%s %u %u", pSpeed->cName, pSpeed->uReadSpeed, pSpeed->uWriteSpeed);
247
pSpeed->bAcquisitionOK = TRUE;
253
// if (myConfig.bListAll && !bFound) // need monitor
255
//~ cd_warning("creation");
256
//~ pSpeed = g_new0 (CDDiskSpeedData, 1);
257
//~ pSpeed->cName = g_strdup (disk_name);
258
//~ myData.lDisks = g_list_append (myData.lDisks, pSpeed);
259
// speed_set_data (pDisk, new_reads, new_writes);
305
// if (myConfig.bListAll && !bFound) // need monitor
307
//~ cd_warning("creation");
308
//~ pSpeed = g_new0 (CDDiskSpeedData, 1);
309
//~ pSpeed->cName = g_strdup (disk_name);
310
//~ myData.lDisks = g_list_append (myData.lDisks, pSpeed);
311
// speed_set_data (pDisk, new_reads, new_writes);
319
#if (GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION < 28)
320
void _reset_parts_list (double *pSize)
326
void cd_disks_reset_parts_list (CairoDockModuleInstance *myApplet)
328
if (myConfig.iNumberParts > 0)
330
#if (GLIB_MAJOR_VERSION > 2) || (GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION >= 28)
331
g_list_free_full (myData.lParts, g_free);
333
g_list_foreach (myData.lParts, (GFunc) _reset_parts_list, NULL);
335
myData.lParts = NULL;
340
void _reset_one_disk (CDDiskSpeedData *pSpeed)
342
if (pSpeed->cName != NULL)
343
g_free (pSpeed->cName);
347
void cd_disks_reset_disks_list (CairoDockModuleInstance *myApplet)
349
if (myData.iNumberDisks > 0)
351
g_list_foreach (myData.lDisks, (GFunc) _reset_one_disk, NULL);
352
g_list_free (myData.lDisks);
353
myData.lDisks = NULL;