From 16b6963ef5e37805d2587684f90d2c6d5dd4ffdc Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Thu, 6 Dec 2018 17:57:59 +0100 Subject: [PATCH] cli list: show a hint about creating a case in RHTS Adds "Run 'abrt-cli report ...' for creating a case in Red Hat Customer Portal" to abrt-cli list output. Resolves: #1649753 (cherry-picked from 7966e5737e8d3af43b1ecdd6a823234b8d25931d) Signed-off-by: Jakub Filak --- configure.ac | 2 ++ src/cli/Makefile.am | 3 ++- src/cli/list.c | 49 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 76e0f274b..5d70bb9a8 100644 --- a/configure.ac +++ b/configure.ac @@ -246,6 +246,7 @@ DEFAULT_PLUGINS_CONF_DIR='${datadir}/${PACKAGE_NAME}/conf.d/plugins' EVENTS_DIR='${datadir}/libreport/events' EVENTS_CONF_DIR='${sysconfdir}/libreport/events.d' JOURNAL_CATALOG_DIR='$(prefix)/lib/systemd/catalog' +WORKFLOWS_DIR='${datadir}/libreport/workflows' ENABLE_SOCKET_OR_DBUS='-DENABLE_DBUS=1' DEFAULT_DUMP_LOCATION_MODE=0751 DEFAULT_DUMP_DIR_MODE=$($PKG_CONFIG --variable=dd_mode libreport) @@ -389,6 +390,7 @@ AC_SUBST(PLUGINS_CONF_DIR) AC_SUBST(DEFAULT_PLUGINS_CONF_DIR) AC_SUBST(EVENTS_CONF_DIR) AC_SUBST(JOURNAL_CATALOG_DIR) +AC_SUBST(WORKFLOWS_DIR) AC_SUBST(EVENTS_DIR) AC_SUBST(DEFAULT_DUMP_LOCATION) AC_SUBST(DEFAULT_DUMP_LOCATION_MODE) diff --git a/src/cli/Makefile.am b/src/cli/Makefile.am index 92dc20ab4..a7c76efa3 100644 --- a/src/cli/Makefile.am +++ b/src/cli/Makefile.am @@ -17,7 +17,8 @@ abrt_cli_CFLAGS = \ -I$(srcdir)/../include \ -I$(srcdir)/../lib \ $(LIBREPORT_CFLAGS) \ - $(POLKIT_AGENT_CFLAGS) + $(POLKIT_AGENT_CFLAGS) \ + -DWORKFLOWS_DIR=\"${WORKFLOWS_DIR}\" if SUGGEST_AUTOREPORTING abrt_cli_CFLAGS += -DSUGGEST_AUTOREPORTING=1 diff --git a/src/cli/list.c b/src/cli/list.c index d069695c6..2c140cb38 100644 --- a/src/cli/list.c +++ b/src/cli/list.c @@ -77,6 +77,55 @@ static void print_crash(problem_data_t *problem_data, int detailed, int text_siz /*names_to_skip:*/ NULL, /*max_text_size:*/ text_size, MAKEDESC_SHOW_ONLY_LIST | MAKEDESC_SHOW_URLS); + + /* + * If the problem is reportable and has not yet been reported into RHTS + * and there is at least one applicable Workflow which contains + * 'report_RHTSupport' event, then append a short message informing + * user that he can create a new case in Red Hat Customer Portal. + */ + const char *const not_reportable = problem_data_get_content_or_NULL(problem_data, FILENAME_NOT_REPORTABLE); + const char *const reported_to = not_reportable ? NULL : problem_data_get_content_or_NULL(problem_data, FILENAME_REPORTED_TO); + report_result_t *const report = !reported_to ? NULL : find_in_reported_to_data(reported_to, "RHTSupport"); + + if (!not_reportable && !report) + { + /* The lines below should be replaced by something simpler, I'd + * like to see: + * GHashTable *possible_worfklows = load_applicable_workflows_for_dump(); + * + * However, this feature (rhbz#1055565) is intended for RHEL only + * and I'm not sure whether it's worth to file another bug against + * libreport and try to improve libreport public API. + */ + const char *const dump_dir_name = problem_data_get_content_or_NULL(problem_data, CD_DUMPDIR); + GList *const wf_names = list_possible_events_glist(dump_dir_name, "workflow"); + GHashTable *const possible_workflows = load_workflow_config_data_from_list(wf_names, WORKFLOWS_DIR); + g_list_free_full(wf_names, free); + + int event_found = 0; + + GHashTableIter iter; + gpointer key = NULL; + gpointer value = NULL; + + g_hash_table_iter_init(&iter, possible_workflows); + while (!event_found && g_hash_table_iter_next(&iter, &key, &value)) + { + GList *const event_names = wf_get_event_names((workflow_t *)value); + event_found = !!g_list_find_custom(event_names, "report_RHTSupport", (GCompareFunc)g_strcmp0); + g_list_free_full(event_names, free); + } + + g_hash_table_destroy(possible_workflows); + + if (event_found) + { + char *tmp = xasprintf("%sRun 'abrt-cli report %s' for creating a case in Red Hat Customer Portal\n", desc, dump_dir_name); + free(desc); + desc = tmp; + } + } } fputs(desc, stdout); free(desc); -- 2.17.2