summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2011-02-28 17:16:28 +0100
committerDenys Vlasenko <dvlasenk@redhat.com>2011-02-28 17:16:28 +0100
commit39ce00f37c753ae7830a8f33631de468a0ec8212 (patch)
treeded3799f81e3d63c40b48427a33c5c87f1ab00dd
parent1bbf4c784aa9fda4d137013ea584874d56d45a33 (diff)
downloadabrt-39ce00f37c753ae7830a8f33631de468a0ec8212.tar.gz
abrt-39ce00f37c753ae7830a8f33631de468a0ec8212.tar.xz
abrt-39ce00f37c753ae7830a8f33631de468a0ec8212.zip
show more useful columns in abrt-gtk; use human-readable time in dir names
For most users, "hostname" is the same for every crash (it is their hostname). Not every problem even has "Application" field ("low on disk space" problem, for example, doesn't), whereas any problem should have "Reason" field. For non-root, it is useful to see which dumps are in /var/spool/abrt (and aren't writable), and which are in $HOME/.abrt/spool. Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
-rw-r--r--src/daemon/abrt-server.c4
-rw-r--r--src/gui-gtk/abrt-gtk.c34
-rw-r--r--src/hooks/abrt-hook-ccpp.c4
-rw-r--r--src/include/abrtlib.h6
-rw-r--r--src/lib/Makefile.am3
-rw-r--r--src/lib/create_dump_dir.c5
-rw-r--r--src/lib/iso_date_string.c31
-rw-r--r--src/plugins/abrt-action-rhtsupport.c2
-rw-r--r--src/plugins/abrt-action-upload.c2
9 files changed, 63 insertions, 28 deletions
diff --git a/src/daemon/abrt-server.c b/src/daemon/abrt-server.c
index f34f3366..de22f427 100644
--- a/src/daemon/abrt-server.c
+++ b/src/daemon/abrt-server.c
@@ -107,9 +107,9 @@ static void create_debug_dump()
This directory is renamed to final directory name after
all files have been stored into it.
*/
- char *path = xasprintf(DEBUG_DUMPS_DIR"/%s-%ld-%u.new",
+ char *path = xasprintf(DEBUG_DUMPS_DIR"/%s-%s-%u.new",
dir_basename,
- (long)time(NULL),
+ iso_date_string(NULL),
pid);
/* No need to check the path length, as all variables used are limited, and dd_create()
fails if the path is too long. */
diff --git a/src/gui-gtk/abrt-gtk.c b/src/gui-gtk/abrt-gtk.c
index 085ed9f0..ae21fa30 100644
--- a/src/gui-gtk/abrt-gtk.c
+++ b/src/gui-gtk/abrt-gtk.c
@@ -10,8 +10,8 @@ static GtkWidget *s_treeview;
enum
{
COLUMN_REPORTED,
- COLUMN_APPLICATION,
- COLUMN_HOSTNAME,
+ COLUMN_REASON,
+ COLUMN_DIRNAME,
COLUMN_LATEST_CRASH_STR,
COLUMN_LATEST_CRASH,
COLUMN_DUMP_DIR,
@@ -36,23 +36,21 @@ void add_directory_to_dirlist(const char *dirname)
);
const char *reported = (msg ? GTK_STOCK_YES : GTK_STOCK_NO);
free(msg);
- char *executable = dd_load_text(dd, FILENAME_EXECUTABLE);
- char *hostname = dd_load_text(dd, FILENAME_HOSTNAME);
+ char *reason = dd_load_text(dd, FILENAME_REASON);
GtkTreeIter iter;
gtk_list_store_append(s_dumps_list_store, &iter);
gtk_list_store_set(s_dumps_list_store, &iter,
COLUMN_REPORTED, reported,
- COLUMN_APPLICATION, executable,
- COLUMN_HOSTNAME, hostname,
+ COLUMN_REASON, reason,
+ COLUMN_DIRNAME, dd->dd_dir,
//OPTION: time format
COLUMN_LATEST_CRASH_STR, time_buf,
COLUMN_LATEST_CRASH, (int)time,
COLUMN_DUMP_DIR, dirname,
-1);
- free(hostname);
- free(executable);
+ free(reason);
dd_close(dd);
VERB1 log("added: %s", dirname);
@@ -136,40 +134,38 @@ static void add_columns(GtkTreeView *treeview)
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
- /* column reported */
renderer = gtk_cell_renderer_pixbuf_new();
column = gtk_tree_view_column_new_with_attributes(_("Reported"),
renderer,
"stock_id",
COLUMN_REPORTED,
NULL);
+ gtk_tree_view_column_set_resizable(column, TRUE);
gtk_tree_view_column_set_sort_column_id(column, COLUMN_REPORTED);
gtk_tree_view_append_column(treeview, column);
- /* column for executable path */
renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes(_("Application"),
+ column = gtk_tree_view_column_new_with_attributes(_("Problem"),
renderer,
"text",
- COLUMN_APPLICATION,
+ COLUMN_REASON,
NULL);
gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_sort_column_id(column, COLUMN_APPLICATION);
+ gtk_tree_view_column_set_sort_column_id(column, COLUMN_REASON);
gtk_tree_view_append_column(treeview, column);
- /* column for hostname */
renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes(_("Hostname"),
+ column = gtk_tree_view_column_new_with_attributes(_("Stored in"),
renderer,
"text",
- COLUMN_HOSTNAME,
+ COLUMN_DIRNAME,
NULL);
- gtk_tree_view_column_set_sort_column_id(column, COLUMN_HOSTNAME);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sort_column_id(column, COLUMN_DIRNAME);
gtk_tree_view_append_column(treeview, column);
- /* column for the date of the last crash */
renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes(_("Last Crash"),
+ column = gtk_tree_view_column_new_with_attributes(_("Last occurrence"),
renderer,
"text",
COLUMN_LATEST_CRASH_STR,
diff --git a/src/hooks/abrt-hook-ccpp.c b/src/hooks/abrt-hook-ccpp.c
index ea618cf9..ac8f90ee 100644
--- a/src/hooks/abrt-hook-ccpp.c
+++ b/src/hooks/abrt-hook-ccpp.c
@@ -489,8 +489,8 @@ int main(int argc, char** argv)
return 0;
}
- unsigned path_len = snprintf(path, sizeof(path), "%s/ccpp-%ld-%lu.new",
- dddir, (long)time(NULL), (long)pid);
+ unsigned path_len = snprintf(path, sizeof(path), "%s/ccpp-%s-%lu.new",
+ dddir, iso_date_string(NULL), (long)pid);
if (path_len >= (sizeof(path) - sizeof("/"FILENAME_COREDUMP)))
return 1;
diff --git a/src/include/abrtlib.h b/src/include/abrtlib.h
index ecae0de7..61731587 100644
--- a/src/include/abrtlib.h
+++ b/src/include/abrtlib.h
@@ -221,6 +221,12 @@ char* get_cmdline(pid_t pid);
#define daemon_is_ok abrt_daemon_is_ok
int daemon_is_ok();
+/* Takes ptr to time_t, or NULL if you want to use current time.
+ * Returns "YYYY-MM-DD-hh:mm:ss" string.
+ */
+#define iso_date_string abrt_iso_date_string
+char *iso_date_string(time_t *pt);
+
#define make_description_bz abrt_make_description_bz
char* make_description_bz(crash_data_t *crash_data);
#define make_description_reproduce_comment abrt_make_description_reproduce_comment
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 566d2931..bad3e63a 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -25,13 +25,14 @@ libreport_la_SOURCES = \
append_to_malloced_string.c \
overlapping_strcpy.c \
skip_whitespace.c \
+ glib_support.c \
+ iso_date_string.c \
strbuf.c strbuf.h \
xatonum.c \
spawn.c \
dirsize.c \
dump_dir.c \
get_cmdline.c \
- glib_support.c \
daemon_is_ok.c \
load_plugin_settings.c \
make_descr.c \
diff --git a/src/lib/create_dump_dir.c b/src/lib/create_dump_dir.c
index 2caf9af9..cbacdab6 100644
--- a/src/lib/create_dump_dir.c
+++ b/src/lib/create_dump_dir.c
@@ -31,8 +31,8 @@ static struct dump_dir *try_dd_create(const char *base_dir_name, const char *dir
struct dump_dir *create_dump_dir_from_crash_data(crash_data_t *crash_data, const char *base_dir_name)
{
- char dir_name[sizeof("abrt-tmp-%lu-%lu") + sizeof(long)*3 * 2];
- sprintf(dir_name, "abrt-tmp-%lu-%lu", (long)getpid(), (long)time(NULL));
+ char dir_name[sizeof("abrt-tmp-YYYY-MM-DD-HH:MM:SS-%lu") + sizeof(long)*3];
+ sprintf(dir_name, "abrt-tmp-%s-%lu", iso_date_string(NULL), (long)getpid());
struct dump_dir *dd;
if (base_dir_name)
@@ -53,6 +53,7 @@ struct dump_dir *create_dump_dir_from_crash_data(crash_data_t *crash_data, const
free(home);
}
}
+//TODO: try user's home dir obtained by getpwuid(getuid())?
/* Try /tmp */
if (!dd)
dd = try_dd_create("/tmp", dir_name);
diff --git a/src/lib/iso_date_string.c b/src/lib/iso_date_string.c
new file mode 100644
index 00000000..4600ff7f
--- /dev/null
+++ b/src/lib/iso_date_string.c
@@ -0,0 +1,31 @@
+/*
+ Copyright (C) 2011 ABRT team
+ Copyright (C) 2011 RedHat Inc
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#include "abrtlib.h"
+
+char *iso_date_string(time_t *pt)
+{
+ static char buf[sizeof("YYYY-MM-DD-HH:MM:SS") + 4];
+
+ time_t t;
+ struct tm *ptm = localtime(pt ? pt : (time(&t), &t));
+ strftime(buf, sizeof(buf), "%Y-%m-%d-%H:%M:%S", ptm);
+
+ return buf;
+}
diff --git a/src/plugins/abrt-action-rhtsupport.c b/src/plugins/abrt-action-rhtsupport.c
index 3ec81522..94523e08 100644
--- a/src/plugins/abrt-action-rhtsupport.c
+++ b/src/plugins/abrt-action-rhtsupport.c
@@ -95,7 +95,7 @@ static void report_to_rhtsupport(
file = new_reportfile();
/* SELinux guys are not happy with /tmp, using /var/run/abrt */
- tempfile = xasprintf(LOCALSTATEDIR"/run/abrt/tmp-%lu-%lu.tar.gz", (long)getpid(), (long)time(NULL));
+ tempfile = xasprintf(LOCALSTATEDIR"/run/abrt/tmp-%s-%lu.tar.gz", iso_date_string(NULL), (long)getpid());
int pipe_from_parent_to_child[2];
xpipe(pipe_from_parent_to_child);
diff --git a/src/plugins/abrt-action-upload.c b/src/plugins/abrt-action-upload.c
index 6f9c5fab..88380bd7 100644
--- a/src/plugins/abrt-action-upload.c
+++ b/src/plugins/abrt-action-upload.c
@@ -128,7 +128,7 @@ static int create_and_upload_archive(
/* Create a child gzip which will compress the data */
/* SELinux guys are not happy with /tmp, using /var/run/abrt */
- tempfile = xasprintf(LOCALSTATEDIR"/run/abrt/upload-%lu-%lu.tar.gz", (long)getpid(), (long)time(NULL));
+ tempfile = xasprintf(LOCALSTATEDIR"/run/abrt/upload-%s-%lu.tar.gz", iso_date_string(NULL), (long)getpid());
int pipe_from_parent_to_child[2];
xpipe(pipe_from_parent_to_child);
child = fork();