From a138fe87467ca96a6314889fe0dd17dcdccded62 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 26 Jan 2010 15:51:04 +0100 Subject: SOSreport: make it avoid double runs; add forced regeneration; upd PLUGINS-HOWTO Signed-off-by: Denys Vlasenko --- lib/Plugins/FileTransfer.cpp | 2 +- lib/Plugins/FileTransfer.h | 2 +- lib/Plugins/KerneloopsScanner.cpp | 2 +- lib/Plugins/KerneloopsScanner.h | 2 +- lib/Plugins/RunApp.cpp | 2 +- lib/Plugins/RunApp.h | 2 +- lib/Plugins/SOSreport.cpp | 38 +++++++++++++++++++++++++------------- lib/Plugins/SOSreport.h | 2 +- lib/Plugins/TicketUploader.cpp | 13 ++++++------- lib/Utils/Action.h | 2 +- 10 files changed, 39 insertions(+), 28 deletions(-) (limited to 'lib') diff --git a/lib/Plugins/FileTransfer.cpp b/lib/Plugins/FileTransfer.cpp index 4d317c8d..5479f9fb 100644 --- a/lib/Plugins/FileTransfer.cpp +++ b/lib/Plugins/FileTransfer.cpp @@ -284,7 +284,7 @@ static string DirBase(const char *pStr) return string(pStr + beg, end - beg); } -void CFileTransfer::Run(const char *pActionDir, const char *pArgs) +void CFileTransfer::Run(const char *pActionDir, const char *pArgs, int force) { update_client(_("File Transfer: Creating a report...")); diff --git a/lib/Plugins/FileTransfer.h b/lib/Plugins/FileTransfer.h index 91207f49..2548c506 100644 --- a/lib/Plugins/FileTransfer.h +++ b/lib/Plugins/FileTransfer.h @@ -43,7 +43,7 @@ class CFileTransfer : public CAction virtual void SetSettings(const map_plugin_settings_t& pSettings); //ok to delete? // virtual const map_plugin_settings_t& GetSettings(); - virtual void Run(const char *pActionDir, const char *pArgs); + virtual void Run(const char *pActionDir, const char *pArgs, int force); }; #endif /* FILETRANSFER_H_ */ diff --git a/lib/Plugins/KerneloopsScanner.cpp b/lib/Plugins/KerneloopsScanner.cpp index 42ffd409..fb9bac60 100644 --- a/lib/Plugins/KerneloopsScanner.cpp +++ b/lib/Plugins/KerneloopsScanner.cpp @@ -46,7 +46,7 @@ CKerneloopsScanner::CKerneloopsScanner() SaveOopsToDebugDump(); } -void CKerneloopsScanner::Run(const char *pActionDir, const char *pArgs) +void CKerneloopsScanner::Run(const char *pActionDir, const char *pArgs, int force) { const char *syslog_file = "/var/log/messages"; map_plugin_settings_t::const_iterator it = m_pSettings.find("SysLogFile"); diff --git a/lib/Plugins/KerneloopsScanner.h b/lib/Plugins/KerneloopsScanner.h index 9f00df21..dfcb8b5e 100644 --- a/lib/Plugins/KerneloopsScanner.h +++ b/lib/Plugins/KerneloopsScanner.h @@ -46,7 +46,7 @@ class CKerneloopsScanner : public CAction /* Plugin interface */ public: CKerneloopsScanner(); - virtual void Run(const char *pActionDir, const char *pArgs); + virtual void Run(const char *pActionDir, const char *pArgs, int force); }; #endif diff --git a/lib/Plugins/RunApp.cpp b/lib/Plugins/RunApp.cpp index 77f5d3c8..ecbecf20 100644 --- a/lib/Plugins/RunApp.cpp +++ b/lib/Plugins/RunApp.cpp @@ -31,7 +31,7 @@ using namespace std; -void CActionRunApp::Run(const char *pActionDir, const char *pArgs) +void CActionRunApp::Run(const char *pActionDir, const char *pArgs, int force) { /* Don't update_client() - actions run at crash time, there is no client * to talk to at that point */ diff --git a/lib/Plugins/RunApp.h b/lib/Plugins/RunApp.h index 939feaa5..da465f89 100644 --- a/lib/Plugins/RunApp.h +++ b/lib/Plugins/RunApp.h @@ -29,7 +29,7 @@ class CActionRunApp : public CAction { public: - virtual void Run(const char *pActionDir, const char *pArgs); + virtual void Run(const char *pActionDir, const char *pArgs, int force); }; #endif diff --git a/lib/Plugins/SOSreport.cpp b/lib/Plugins/SOSreport.cpp index 25769105..90611b5d 100644 --- a/lib/Plugins/SOSreport.cpp +++ b/lib/Plugins/SOSreport.cpp @@ -16,10 +16,9 @@ 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 -#include +*/ +//#include +//#include #include "abrtlib.h" #include "abrt_types.h" #include "ABRTException.h" @@ -28,6 +27,8 @@ #include "ABRTException.h" #include "CommLayerInner.h" +using namespace std; + static void ErrorCheck(int pos) { if (pos < 0) @@ -36,7 +37,7 @@ static void ErrorCheck(int pos) } } -static std::string ParseFilename(const std::string& pOutput) +static string ParseFilename(const string& pOutput) { /* the sosreport's filename is embedded in sosreport's output. @@ -64,9 +65,19 @@ static std::string ParseFilename(const std::string& pOutput) return pOutput.substr(filename_start, filename_end - filename_start + 1); } -void CActionSOSreport::Run(const char *pActionDir, const char *pArgs) +void CActionSOSreport::Run(const char *pActionDir, const char *pArgs, int force) { - update_client(_("Executing SOSreport plugin...")); + if (!force) + { + CDebugDump dd; + dd.Open(pActionDir); + bool bt_exists = dd.Exist("sosreport.tar.bz2"); + if (bt_exists) + { + VERB3 log("%s already exists, not regenerating", "sosreport.tar.bz2"); + return; + } + } static const char command_default[] = "sosreport --batch --no-progressbar --only=anaconda --only=bootloader" " --only=devicemapper --only=filesys --only=hardware --only=kernel" @@ -74,7 +85,7 @@ void CActionSOSreport::Run(const char *pActionDir, const char *pArgs) " --only=pam --only=process --only=rpm -k rpm.rpmva=off --only=ssh" " --only=startup --only=yum 2>&1"; static const char command_prefix[] = "sosreport --batch --no-progressbar"; - std::string command; + string command; vector_string_t args; parse_args(pArgs, args, '"'); @@ -88,16 +99,17 @@ void CActionSOSreport::Run(const char *pActionDir, const char *pArgs) command = ssprintf("%s %s 2>&1", command_prefix, args[0].c_str()); } - update_client(_("running sosreport: %s"), command.c_str()); - std::string output = command; + update_client(_("Running sosreport: %s"), command.c_str()); + string output = command; output += '\n'; char *command_out = run_in_shell_and_save_output(/*flags:*/ 0, command.c_str(), /*dir:*/ NULL, /*size_p:*/ NULL); output += command_out; free(command_out); - update_client(_("done running sosreport")); + update_client(_("Done running sosreport")); + VERB3 log("sosreport output:'%s'", output.c_str()); - std::string sosreport_filename = ParseFilename(output); - std::string sosreport_dd_filename = concat_path_file(pActionDir, "sosreport.tar.bz2"); + string sosreport_filename = ParseFilename(output); + string sosreport_dd_filename = concat_path_file(pActionDir, "sosreport.tar.bz2"); CDebugDump dd; dd.Open(pActionDir); diff --git a/lib/Plugins/SOSreport.h b/lib/Plugins/SOSreport.h index d4e0d733..bd08eee1 100644 --- a/lib/Plugins/SOSreport.h +++ b/lib/Plugins/SOSreport.h @@ -26,7 +26,7 @@ class CActionSOSreport : public CAction { public: - virtual void Run(const char *pActionDir, const char *pArgs); + virtual void Run(const char *pActionDir, const char *pArgs, int force); }; #endif diff --git a/lib/Plugins/TicketUploader.cpp b/lib/Plugins/TicketUploader.cpp index 38590f34..0ea2d5b2 100644 --- a/lib/Plugins/TicketUploader.cpp +++ b/lib/Plugins/TicketUploader.cpp @@ -166,7 +166,7 @@ string CTicketUploader::Report(const map_crash_data_t& pCrashData, bool do_upload; int retry_count; int retry_delay; - + /* if parse_settings fails it returns an empty map so we need to use defaults */ map_plugin_settings_t settings = parse_settings(pSettings); // Get ticket name, customer name, and do_encrypt from config settings @@ -275,7 +275,7 @@ string CTicketUploader::Report(const map_crash_data_t& pCrashData, } // generate md5sum - cmd = ssprintf("cd %s; md5sum %s", tmpdir_name, outfile_basename.c_str()); + cmd = ssprintf("cd %s; md5sum <%s", tmpdir_name, outfile_basename.c_str()); string md5sum = ReadCommand(cmd.c_str()); // upload or cp to /tmp @@ -298,13 +298,12 @@ string CTicketUploader::Report(const map_crash_data_t& pCrashData, msg += "Please copy this into ticket: "; msg += ticket_name; msg += '\n'; - msg += "========cut here========="; - msg += '\n'; + msg += "========cut here========\n"; } else { msg += "Please send this to your technical support:\n"; - msg += "========cut here========="; + msg += "========cut here========\n"; } if (do_upload) { @@ -324,7 +323,7 @@ string CTicketUploader::Report(const map_crash_data_t& pCrashData, } msg += "FILE: "; msg += outfile_basename; - msg += "\nMD5SUM:"; + msg += "\nMD5SUM: "; msg += md5sum; msg += '\n'; if (do_encrypt) @@ -337,7 +336,7 @@ string CTicketUploader::Report(const map_crash_data_t& pCrashData, // warn the client (why _warn_? it's not an error, maybe update_client?): //error_msg("%s", msg.c_str()); - + // delete the temporary directory cmd = ssprintf("rm -rf %s", tmpdir_name); RunCommand(cmd.c_str()); diff --git a/lib/Utils/Action.h b/lib/Utils/Action.h index 5992cbff..d9a68b79 100644 --- a/lib/Utils/Action.h +++ b/lib/Utils/Action.h @@ -39,7 +39,7 @@ class CAction : public CPlugin * @param pActionDir An actual directory. * @param pArgs Plugin's arguments. */ - virtual void Run(const char *pActionDir, const char *pArgs) = 0; + virtual void Run(const char *pActionDir, const char *pArgs, int force) = 0; }; #endif -- cgit