Skip to content

Commit 8b693ff

Browse files
committed
Stats tuning
1 parent 1a5f9d4 commit 8b693ff

3 files changed

Lines changed: 63 additions & 61 deletions

File tree

remmina/src/remmina_stats.c

Lines changed: 41 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -238,9 +238,11 @@ JsonNode *remmina_stats_get_os_info()
238238
gchar *kernel_arch;
239239
gchar *id;
240240
gchar *description;
241-
gchar *etc_release;
241+
GHashTable *etc_release;
242242
gchar *release;
243243
gchar *codename;
244+
GHashTableIter iter;
245+
gchar *key, *value;
244246

245247
/** @warning this function is usually executed on a dedicated thread,
246248
* not on the main thread */
@@ -249,77 +251,83 @@ JsonNode *remmina_stats_get_os_info()
249251
json_builder_begin_object(b);
250252

251253
json_builder_set_member_name(b, "kernel_name");
252-
253254
kernel_name = g_strdup_printf("%s", remmina_utils_get_kernel_name());
254255
if (!kernel_name || kernel_name[0] == '\0') {
255-
g_free(kernel_name);
256-
kernel_name = g_strdup("n/a");
256+
json_builder_add_null_value(b);
257+
}else {
258+
json_builder_add_string_value(b, kernel_name);
257259
}
258-
json_builder_add_string_value(b, kernel_name);
259260
g_free(kernel_name);
260261

261262
json_builder_set_member_name(b, "kernel_release");
262263
kernel_release = g_strdup_printf("%s", remmina_utils_get_kernel_release());
263264
if (!kernel_release || kernel_release[0] == '\0') {
264-
g_free(kernel_release);
265-
kernel_release = g_strdup("n/a");
265+
json_builder_add_null_value(b);
266+
}else {
267+
json_builder_add_string_value(b, kernel_release);
266268
}
267-
json_builder_add_string_value(b, kernel_release);
268269
g_free(kernel_release);
269270

270271
json_builder_set_member_name(b, "kernel_arch");
271272
kernel_arch = g_strdup_printf("%s", remmina_utils_get_kernel_arch());
272273
if (!kernel_arch || kernel_arch[0] == '\0') {
273-
g_free(kernel_arch);
274-
kernel_arch = g_strdup("n/a");
274+
json_builder_add_null_value(b);
275+
}else {
276+
json_builder_add_string_value(b, kernel_arch);
275277
}
276-
json_builder_add_string_value(b, kernel_arch);
277278
g_free(kernel_arch);
278279

280+
json_builder_set_member_name(b, "lsb_distributor");
279281
id = remmina_utils_get_lsb_id();
280282
if (!id || id[0] == '\0') {
281-
g_free(id);
282-
id = g_strdup("n/a");
283+
json_builder_add_null_value(b);
284+
}else {
285+
json_builder_add_string_value(b, id);
283286
}
284-
json_builder_set_member_name(b, "lsb_distributor");
285-
json_builder_add_string_value(b, id);
286287
g_free(id);
287288

289+
json_builder_set_member_name(b, "lsb_distro_description");
288290
description = remmina_utils_get_lsb_description();
289291
if (!description || description[0] == '\0') {
290-
g_free(description);
291-
description = g_strdup("n/a");
292+
json_builder_add_null_value(b);
293+
}else {
294+
json_builder_add_string_value(b, description);
292295
}
293-
json_builder_set_member_name(b, "lsb_distro_description");
294-
json_builder_add_string_value(b, description);
295296
g_free(description);
296297

298+
json_builder_set_member_name(b, "lsb_distro_release");
297299
release = remmina_utils_get_lsb_release();
298300
if (!release || release[0] == '\0') {
299-
g_free(release);
300-
release = g_strdup("n/a");
301+
json_builder_add_null_value(b);
302+
}else {
303+
json_builder_add_string_value(b, release);
301304
}
302-
json_builder_set_member_name(b, "lsb_distro_release");
303-
json_builder_add_string_value(b, release);
304305
g_free(release);
305306

307+
json_builder_set_member_name(b, "lsb_distro_codename");
306308
codename = remmina_utils_get_lsb_codename();
307309
if (!codename || codename[0] == '\0') {
308-
g_free(codename);
309-
codename = g_strdup("n/a");
310+
json_builder_add_null_value(b);
311+
}else {
312+
json_builder_add_string_value(b, codename);
310313
}
311-
json_builder_set_member_name(b, "lsb_distro_codename");
312-
json_builder_add_string_value(b, codename);
313314
g_free(codename);
314315

315316
etc_release = remmina_utils_get_etc_release();
316-
if (!etc_release || etc_release[0] == '\0') {
317-
g_free(etc_release);
318-
etc_release = g_strdup("n/a");
319-
}
320317
json_builder_set_member_name(b, "etc_release");
321-
json_builder_add_string_value(b, etc_release);
322-
g_free(etc_release);
318+
if (etc_release) {
319+
json_builder_begin_object(b);
320+
g_hash_table_iter_init (&iter, etc_release);
321+
while (g_hash_table_iter_next (&iter, (gpointer)&key, (gpointer)&value)) {
322+
json_builder_set_member_name(b, key);
323+
json_builder_add_string_value(b, value);
324+
}
325+
json_builder_end_object(b);
326+
g_hash_table_remove_all(etc_release);
327+
g_hash_table_unref(etc_release);
328+
}else {
329+
json_builder_add_null_value(b);
330+
}
323331

324332
/** @todo Add other means to identify a release name/description
325333
* to cover as much OS as possible, like /etc/issue

remmina/src/remmina_utils.c

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,10 @@ static gchar* remmina_utils_read_distrofile(gchar *filename)
259259
return NULL;
260260
}
261261

262+
g_debug("%s: File %s is %lu bytes long\n", __func__, filename, st.st_size);
263+
if (st.st_size > 131072)
264+
return NULL;
265+
262266
if (!g_file_get_contents(filename, &distro_desc, &file_sz, &err)) {
263267
g_debug("%s: could not get the file content%s: %s\n", __func__, filename, err->message);
264268
g_error_free(err);
@@ -315,11 +319,8 @@ gchar* remmina_utils_get_lsb_id()
315319
{
316320
TRACE_CALL(__func__);
317321
gchar *lsb_id = NULL;
318-
gchar *s;
319322
if (g_spawn_command_line_sync("/usr/bin/lsb_release -si", &lsb_id, NULL, NULL, NULL)) {
320-
s = remmina_utils_string_strip(lsb_id);
321-
g_free(lsb_id);
322-
return s;
323+
return lsb_id;
323324
}
324325
return NULL;
325326
}
@@ -332,13 +333,10 @@ gchar* remmina_utils_get_lsb_description()
332333
{
333334
TRACE_CALL(__func__);
334335
gchar *lsb_description = NULL;
335-
gchar *s;
336336
GError *err = NULL;
337337

338338
if (g_spawn_command_line_sync("/usr/bin/lsb_release -sd", &lsb_description, NULL, NULL, &err)) {
339-
s = remmina_utils_string_strip(lsb_description);
340-
g_free(lsb_description);
341-
return s;
339+
return lsb_description;
342340
}else {
343341
g_debug("%s: could not execute lsb_release %s\n", __func__, err->message);
344342
g_error_free(err);
@@ -355,11 +353,8 @@ gchar* remmina_utils_get_lsb_release()
355353
{
356354
TRACE_CALL(__func__);
357355
gchar *lsb_release = NULL;
358-
gchar *s;
359356
if (g_spawn_command_line_sync("/usr/bin/lsb_release -sr", &lsb_release, NULL, NULL, NULL)) {
360-
s = remmina_utils_string_strip(lsb_release);
361-
g_free(lsb_release);
362-
return s;
357+
return lsb_release;
363358
}
364359
return NULL;
365360
}
@@ -372,11 +367,8 @@ gchar* remmina_utils_get_lsb_codename()
372367
{
373368
TRACE_CALL(__func__);
374369
gchar *lsb_codename = NULL;
375-
gchar *s;
376370
if (g_spawn_command_line_sync("/usr/bin/lsb_release -sc", &lsb_codename, NULL, NULL, NULL)) {
377-
s = remmina_utils_string_strip(lsb_codename);
378-
g_free(lsb_codename);
379-
return s;
371+
return lsb_codename;
380372
}
381373
return NULL;
382374
}
@@ -386,24 +378,27 @@ gchar* remmina_utils_get_lsb_codename()
386378
* Test each known distribution specific information file and print it's content.
387379
* @return a string or NULL. Caller must free it with g_free().
388380
*/
389-
gchar* remmina_utils_get_etc_release()
381+
GHashTable* remmina_utils_get_etc_release()
390382
{
391383
TRACE_CALL(__func__);
392-
gchar *distro_desc = NULL;
393-
gchar *s;
384+
gchar *etc_release = NULL;
394385
gint i;
386+
GHashTable *r;
387+
388+
r = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
395389

396390
for (i = 0; distroArray[i].filename != NULL; i++) {
397391
g_debug("%s: File %s\n", __func__, distroArray[i].filename);
398-
distro_desc = remmina_utils_read_distrofile(distroArray[i].filename);
399-
if (distro_desc && distro_desc[0] != '\0') {
400-
g_debug("%s: Distro description %s\n", __func__, distro_desc);
401-
break;
392+
etc_release = remmina_utils_read_distrofile(distroArray[i].filename);
393+
if (etc_release) {
394+
if (etc_release[0] != '\0') {
395+
g_debug("%s: Distro description %s\n", __func__, etc_release);
396+
g_hash_table_insert(r, distroArray[i].filename, etc_release);
397+
} else
398+
g_free(etc_release);
402399
}
403400
}
404-
s = remmina_utils_string_strip(distro_desc);
405-
g_free(distro_desc);
406-
return s;
401+
return r;
407402
}
408403

409404
/**
@@ -430,4 +425,3 @@ const gchar* remmina_utils_get_os_info()
430425
return kernel_string;
431426
}
432427

433-

remmina/src/remmina_utils.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,5 @@ gchar* remmina_utils_get_lsb_id();
5252
gchar* remmina_utils_get_lsb_description();
5353
gchar* remmina_utils_get_lsb_release();
5454
gchar* remmina_utils_get_lsb_codename();
55-
gchar* remmina_utils_get_etc_release();
55+
GHashTable* remmina_utils_get_etc_release();
5656
const gchar* remmina_utils_get_os_info();

0 commit comments

Comments
 (0)