summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2010-01-26 15:51:04 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2010-01-26 15:51:04 +0100
commita138fe87467ca96a6314889fe0dd17dcdccded62 (patch)
tree3e60f39c3c7d2fcb8f0ab3749c1a10624396c23c /lib
parentff98bfacba236960b600512623af165821df038c (diff)
downloadabrt-a138fe87467ca96a6314889fe0dd17dcdccded62.tar.gz
abrt-a138fe87467ca96a6314889fe0dd17dcdccded62.tar.xz
abrt-a138fe87467ca96a6314889fe0dd17dcdccded62.zip
SOSreport: make it avoid double runs; add forced regeneration; upd PLUGINS-HOWTO
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/Plugins/FileTransfer.cpp2
-rw-r--r--lib/Plugins/FileTransfer.h2
-rw-r--r--lib/Plugins/KerneloopsScanner.cpp2
-rw-r--r--lib/Plugins/KerneloopsScanner.h2
-rw-r--r--lib/Plugins/RunApp.cpp2
-rw-r--r--lib/Plugins/RunApp.h2
-rw-r--r--lib/Plugins/SOSreport.cpp38
-rw-r--r--lib/Plugins/SOSreport.h2
-rw-r--r--lib/Plugins/TicketUploader.cpp13
-rw-r--r--lib/Utils/Action.h2
10 files changed, 39 insertions, 28 deletions
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 <fstream>
-#include <sstream>
+*/
+//#include <fstream>
+//#include <sstream>
#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