summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNikola Pajkovsky <npajkovs@redhat.com>2009-09-17 12:16:48 +0200
committerNikola Pajkovsky <npajkovs@redhat.com>2009-09-17 12:16:48 +0200
commit5a86973be999b43581e814412f0d52885abac5d4 (patch)
tree1ddbb5af77013dec00b4234ee583aff41eb43cae /src
parent9a742f012b9154c34d046dc67ba9ad904512ab60 (diff)
downloadabrt-5a86973be999b43581e814412f0d52885abac5d4.tar.gz
abrt-5a86973be999b43581e814412f0d52885abac5d4.tar.xz
abrt-5a86973be999b43581e814412f0d52885abac5d4.zip
add dbus signalization when quota exceeded
Diffstat (limited to 'src')
-rw-r--r--src/Applet/Applet.cpp8
-rw-r--r--src/Applet/CCApplet.cpp25
-rw-r--r--src/Applet/CCApplet.h3
-rw-r--r--src/Daemon/CommLayerServer.h1
-rw-r--r--src/Daemon/CommLayerServerDBus.cpp10
-rw-r--r--src/Daemon/CommLayerServerDBus.h1
-rw-r--r--src/Daemon/Daemon.cpp1
7 files changed, 49 insertions, 0 deletions
diff --git a/src/Applet/Applet.cpp b/src/Applet/Applet.cpp
index 41fc3b75..cf58c7da 100644
--- a/src/Applet/Applet.cpp
+++ b/src/Applet/Applet.cpp
@@ -52,6 +52,13 @@ crash_notify_cb(const char* progname)
applet->CrashNotify(message, progname);
}
+static void
+quota_exceed_cb(const char* str)
+{
+ applet->ShowIcon();
+ applet->CrashNotify("%s", str);
+}
+
int main(int argc, char **argv)
{
setlocale(LC_ALL,"");
@@ -91,6 +98,7 @@ int main(int argc, char **argv)
DBus::Connection conn = DBus::Connection::SystemBus();
applet = new CApplet(conn, session, CC_DBUS_PATH, CC_DBUS_NAME);
applet->ConnectCrashHandler(crash_notify_cb);
+ applet->ConnectQuotaExceedHandler(quota_exceed_cb);
if(!conn.has_name(CC_DBUS_NAME))
{
std::cout << _("ABRT service is not running") << std::endl;
diff --git a/src/Applet/CCApplet.cpp b/src/Applet/CCApplet.cpp
index 3893c77a..7b1a7f1b 100644
--- a/src/Applet/CCApplet.cpp
+++ b/src/Applet/CCApplet.cpp
@@ -193,6 +193,26 @@ void CApplet::Crash(const std::string& progname, const std::string& uid )
}
}
+void CApplet::QuotaExceed(const char* str)
+{
+ if (m_pSessionDBus->has_name("com.redhat.abrt.gui"))
+ {
+ return;
+ }
+ else
+ {
+ if(m_pQuotaExceedHandler)
+ {
+ m_pQuotaExceedHandler(str);
+ }
+ else
+ {
+ std::cout << _("This is default handler, you should register your own with ConnectQuotaExceedHandler") << std::endl;
+ std::cout.flush();
+ }
+ }
+}
+
void CApplet::DaemonStateChange_cb(bool running, void* data)
{
CApplet *applet = (CApplet *)data;
@@ -211,6 +231,11 @@ void CApplet::ConnectCrashHandler(void (*pCrashHandler)(const char *progname))
m_pCrashHandler = pCrashHandler;
}
+void CApplet::ConnectQuotaExceedHandler(void (*pQuotaExceedHandler)(const char *progname))
+{
+ m_pQuotaExceedHandler = pQuotaExceedHandler;
+}
+
void CApplet::SetIconTooltip(const char *format, ...)
{
va_list args;
diff --git a/src/Applet/CCApplet.h b/src/Applet/CCApplet.h
index 90a79e26..6c020e16 100644
--- a/src/Applet/CCApplet.h
+++ b/src/Applet/CCApplet.h
@@ -65,6 +65,7 @@ class CApplet
int AddEvent(int pUUID, const std::string& pProgname);
int RemoveEvent(int pUUID);
void ConnectCrashHandler(void (*pCrashHandler)(const char *progname));
+ void ConnectQuotaExceedHandler(void (*pQuotaExeedHandler)(const char *str));
static void DaemonStateChange_cb(bool running, void* data);
protected:
@@ -79,9 +80,11 @@ class CApplet
private:
/* dbus stuff */
void Crash(const std::string& progname, const std::string& uid);
+ void QuotaExceed(const char* str);
/* the real signal handler called to handle the signal */
void (*m_pCrashHandler)(const char *progname);
+ void (*m_pQuotaExceedHandler)(const char *str);
};
#endif /*CC_APPLET_H_*/
diff --git a/src/Daemon/CommLayerServer.h b/src/Daemon/CommLayerServer.h
index e87c5c4b..aface8a3 100644
--- a/src/Daemon/CommLayerServer.h
+++ b/src/Daemon/CommLayerServer.h
@@ -16,6 +16,7 @@ class CCommLayerServer {
virtual void Crash(const std::string& progname, const std::string& uid) {}
virtual void JobDone(const char* pDest, const char* pUUID) = 0;
virtual void JobStarted(const char* pDest) {};
+ virtual void QuotaExceed(const char* str) {}
virtual void Update(const std::string& pMessage, const char* peer, uint64_t pJobID) {};
virtual void Warning(const std::string& pMessage, const char* peer, uint64_t pJobID) {};
diff --git a/src/Daemon/CommLayerServerDBus.cpp b/src/Daemon/CommLayerServerDBus.cpp
index 8f913ad5..2f88a72b 100644
--- a/src/Daemon/CommLayerServerDBus.cpp
+++ b/src/Daemon/CommLayerServerDBus.cpp
@@ -47,6 +47,16 @@ void CCommLayerServerDBus::Crash(const std::string& progname, const std::string&
send_flush_and_unref(msg);
}
+void CCommLayerServerDBus::QuotaExceed(const char* str)
+{
+ DBusMessage* msg = new_signal_msg("QuotaExceed");
+ dbus_message_append_args(msg,
+ DBUS_TYPE_STRING, &str,
+ DBUS_TYPE_INVALID);
+ VERB2 log("Quota exceeded");
+ send_flush_and_unref(msg);
+}
+
void CCommLayerServerDBus::JobStarted(const char* peer)
{
DBusMessage* msg = new_signal_msg("JobStarted", peer);
diff --git a/src/Daemon/CommLayerServerDBus.h b/src/Daemon/CommLayerServerDBus.h
index e1185c5c..06fb15df 100644
--- a/src/Daemon/CommLayerServerDBus.h
+++ b/src/Daemon/CommLayerServerDBus.h
@@ -14,6 +14,7 @@ class CCommLayerServerDBus
virtual void Crash(const std::string& progname, const std::string& uid);
virtual void JobStarted(const char* pDest);
virtual void JobDone(const char* pDest, const char* pUUID);
+ virtual void QuotaExceed(const char* str);
virtual void Update(const std::string& pMessage, const char* peer, uint64_t pJobID);
virtual void Warning(const std::string& pMessage, const char* peer, uint64_t pJobID);
diff --git a/src/Daemon/Daemon.cpp b/src/Daemon/Daemon.cpp
index 4ee206b6..5a5dfeb2 100644
--- a/src/Daemon/Daemon.cpp
+++ b/src/Daemon/Daemon.cpp
@@ -524,6 +524,7 @@ static gboolean handle_event_cb(GIOChannel *gio, GIOCondition condition, gpointe
{
//TODO: delete oldest or biggest dir
log("Size of '%s' >= %u MB, deleting '%s'", DEBUG_DUMPS_DIR, g_settings_nMaxCrashReportsSize, name);
+ g_pCommLayer->QuotaExceed(_("Quota exceeded. Please check your MaxCrashReportsSize value in abrt.conf."));
DeleteDebugDumpDir(std::string(DEBUG_DUMPS_DIR) + "/" + name);
continue;
}