summaryrefslogtreecommitdiffstats
path: root/doc/howto-write-reporter
diff options
context:
space:
mode:
Diffstat (limited to 'doc/howto-write-reporter')
-rw-r--r--doc/howto-write-reporter205
1 files changed, 0 insertions, 205 deletions
diff --git a/doc/howto-write-reporter b/doc/howto-write-reporter
deleted file mode 100644
index abc77d5d..00000000
--- a/doc/howto-write-reporter
+++ /dev/null
@@ -1,205 +0,0 @@
-How to write your reporter plugin
----------------------------------
-This plugin receives the entire finished crash report and posts/reports
-it somewhere (e.g. logs it, mails it, posts it on some web tool...)
-
-You have to override these methods:
-
-std::string Report(const map_crash_data_t& pCrashData,
- const map_plugin_settings_t& pSettings,
- const char *pArgs)
-
-void SetSettings(const map_plugin_settings_t& pSettings);
-- It is not a mandatory method.
-
-Example of header plugin
-------------------------
-$ cat abrt-reporter-hello-world.h
-
-#ifndef ABRT_REPORTER_HELLO_WORLD_H
-#define ABRT_REPORTER_HELLO_WORLD_H
-
-/*
- * If you want to build reporter you have to include `reporter'.
- * Others are analyzer.h, database.h and action.h
- */
-#include <abrt/reporter.h>
-
-class CHelloWorld : public CReporter
-{
- private:
- /*
- * In our tutorial we will have two options called OptionBool
- * and PrintString. Daemon will load HelloWorld.conf and pass
- * it to our SetSettings method in parsed form, allowing us to
- * change options
- */
- bool m_OptionBool;
- std::string m_PrintString;
-
- public:
- /**
- * A method, which reports a crash dump to particular receiver.
- * The plugin can take arguments, but the plugin has to parse them
- * by itself.
- * @param pCrashData A crash report.
- * @oaran pSettings A settings passed from gui or cli
- * @param pArgs Plugin's arguments.
- * @retun A message which can be displayed after a report is created.
- */
- virtual std::string Report(const map_crash_data_t& pCrashData,
- const map_plugin_settings_t& pSettings,
- const char *pArgs);
-
- /**
- * A method, which takes settings and apply them. It is not a mandatory
- * method.
- * @param pSettings Plugin's settings
- */
- virtual void SetSettings(const map_plugin_settings_t& pSettings);
-};
-
-#endif
-
-Example of source code of plugin
---------------------------------
-$ cat abrt-reporter-hello-world.cpp
-
-#include <abrt/abrtlib.h>
-#include <abrt/abrt_exception.h>
-#include "abrt-reporter-hello-world.h"
-
-std::string CHelloWorld::Report(const map_crash_data_t& pCrashData,
- const map_plugin_settings_t& pSettings,
- const char *pArgs)
-{
- if (!m_OptionBool)
- {
- /*
- * Exceptions is used to notify gui/cli that something is wrong
- * and stop reporting; gui/cli will show it as an error message.
- */
- throw CABRTException(EXCEP_PLUGIN, "OptionBool is set to `no', wrong");
- }
-
- /*
- * Same as example above, but here we show now how you can use try..catch block
- */
- try
- {
- }
- catch (CABRTException& e)
- {
- //throw CABRTException(EXCEP_PLUGIN, "Oops something wrong");
- }
-
- /*
- * If you want to log some information use function log.
- * abrtd can be started as standalone application running in
- * foreground (abrtd -d) and then you will see log information.
- * Logging has tree levels and they are controlled by VERBx where `x'
- * can be 1,2 and 3. If you want to see level1(VERB1 message) run abrtd -dv,
- * for level2 (VERB2 message) -dvv and for level3 (VERB3 message) -dvvv.
- */
-
- VERB1 log("what you sometimes want to see, even on a production box");
- VERB2 log("debug message, not going into insanely small details");
- VERB3 log("lots and lots of details");
-
- return m_PrintString;
-}
-
-void CHelloWorld::SetSettings(const map_plugin_settings_t& pSettings)
-{
- m_pSettings = pSettings;
-
- map_plugin_settings_t::const_iterator end = pSettings.end();
- map_plugin_settings_t::const_iterator it;
-
- it = pSettings.find("OptionBool");
- if (it != end)
- m_OptionBool = string_to_bool(it->second.c_str());
-
- it = pSettings.find("PrintString");
- if (it != end)
- m_PrintString = it->second;
-
-}
-
-/*
- * Use the macro PLUGIN_INFO in the *.cpp file of your plugin so that your
- * subclass will be properly registered and treated as a plugin.
- * This sets up all the lower-level and administrative details to fit your
- * class into the plugin infrastructure. The syntax is:
- *
- * PLUGIN_INFO(type, plugin_class, name, version, description, email, www, gtk_builder)
- * - "type" is one of ANALYZER, ACTION, REPORTER, or DATABASE
- * - "plugin_class" is the identifier of the class
- * - "name" is a string with the name of the plugin
- * - "version" is a string with the version of the plugin
- * - "description" is a string with the summary of what the plugin does
- * - "email" and "www" are strings with the contact info for the author
- * - "gtk_builder" is path to plugins gui
- */
-
-PLUGIN_INFO(REPORTER,
- CHelloWorld,
- "HelloWorld",
- "0.0.1",
- "Show `Hello world!!!' in gui",
- "author",
- "www adress to project/plugin",
- "/path/to/gui.plugin")
-
-Example of configuration file
------------------------------
-When option 'Enabled' is missing or is set to 'no', plugin won't be loaded
-at abrtd start-up (but may be loaded later if plugin is used in one of the
-directives). If it is set to 'yes', plugin is loaded right away.
-At the plugin load time, options are parsed by daemon and passed to plugin's
-SetSettings method.
-
-
-$ cat HelloWorld.conf
-Enabled = yes
-
-# just for demonstration
-# if OptionBool is set to yes, it will print the text specified in PrintString option
-# if OptionBool is set to no, the error with the message "OptionBool is set to `no', wrong"
-will be generated.
-
-OptionBool = yes
-
-PrintString = "Hello World!!!"
-
-Example of Makefile
--------------------
-Makefile is written to build plugin on 64bit machines. If you want to build for
-32bit get rid of -m64 in build section and rename /usr/lib64/abrt to /usr/lib/abrt
-
-$ cat Makefile
-PROGRAM = libHelloWorld
-CXX = g++
-SRCS += abrt-reporter-hello-world.cpp
-OBJS += $(addsuffix .o, $(basename $(SRCS)))
-
-
-.PHONY: clean install uninstall
-
-%.o: %.cpp
- $(CXX) `pkg-config --cflags --libs abrt` -m64 -c -Wall -std=c++98 -pedantic $<
-
-$(PROGRAM).so: $(OBJS)
- $(CXX) -shared $< -o $@
-
-clean:
- rm -f *.o *.so
-
-install:
- install -m 755 -D $(PROGRAM).so /usr/lib64/abrt/
- install -m 644 -D HelloWorld.conf /etc/abrt/plugins/
-
-uninstall:
- rm -f /usr/lib64/abrt/$(PROGRAM).so
- rm -f /etc/abrt/plugins/HelloWorld.conf
-