/* Copyright (C) 2009 Jiri Moskovcak (jmoskovc@redhat.com) Copyright (C) 2009 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. */ #ifndef CRASHWATCHER_H_ #define CRASHWATCHER_H_ #include #include #include #include //#include "DBusManager.h" //#include "DBusServerProxy.h" #include "MiddleWare.h" #include "Settings.h" //FIXME remove when it gets to autoconf #include "CommLayerServerDBus.h" #ifdef HAVE_DBUS #include "CommLayerServerDBus.h" #elif HAVE_SOCKET #include "CommLayerServerSocket.h" #endif #include "CommLayerInner.h" // 1024 simultaneous actions #define INOTIFY_BUFF_SIZE ((sizeof(struct inotify_event)+FILENAME_MAX)*1024) class CCrashWatcher //: public CDBusServer_adaptor, // public DBus::IntrospectableAdaptor, // public DBus::ObjectAdaptor, : public CObserver { private: typedef struct SCronCallbackData { CCrashWatcher* m_pCrashWatcher; std::string m_sPluginName; std::string m_sPluginArgs; unsigned int m_nTimeout; SCronCallbackData(CCrashWatcher* pCrashWatcher, const std::string& pPluginName, const std::string& pPluginArgs, const unsigned int& pTimeout) : m_pCrashWatcher(pCrashWatcher), m_sPluginName(pPluginName), m_sPluginArgs(pPluginArgs), m_nTimeout(pTimeout) {} } cron_callback_data_t; static gboolean handle_event_cb(GIOChannel *gio, GIOCondition condition, gpointer data); static gboolean cron_activation_periodic_cb(gpointer data); static gboolean cron_activation_one_cb(gpointer data); static gboolean cron_activation_reshedule_cb(gpointer data); static void cron_delete_callback_data_cb(gpointer data); void StartWatch(); void GStartWatch(); void Lock(); void SetUpMW(); void SetUpCron(); /* finds dumps created when daemon wasn't running */ void FindNewDumps(const std::string& pPath); double GetDirSize(const std::string &pPath); int m_nFd; GIOChannel* m_pGio; GMainLoop *m_pMainloop; std::string m_sTarget; CMiddleWare *m_pMW; CCommLayerServer *m_pCommLayer; CCommLayerInner *m_pCommLayerInner; /*FIXME not needed */ //DBus::Connection *m_pConn; CSettings *m_pSettings; public: //CCrashWatcher(const std::string& pPath,DBus::Connection &connection); CCrashWatcher(const std::string& pPath); virtual ~CCrashWatcher(); //run as daemon void Daemonize(); //don't go background - for debug void Run(); /* methods exported on dbus */ public: virtual vector_crash_infos_t GetCrashInfos(const std::string &pUID); virtual map_crash_report_t CreateReport(const std::string &pUUID,const std::string &pUID); virtual bool Report(map_crash_report_t pReport); virtual bool DeleteDebugDump(const std::string& pUUID, const std::string& pUID); /* Observer methods */ void Status(const std::string& pMessage); void Debug(const std::string& pMessage); void Warning(const std::string& pMessage); }; #endif /*CRASHWATCHER_H_*/