]> git.ipfire.org Git - thirdparty/snapper.git/commitdiff
- added dbus function to query and clear plugins report
authorArvin Schnell <aschnell@suse.de>
Tue, 28 Nov 2023 07:32:40 +0000 (08:32 +0100)
committerArvin Schnell <aschnell@suse.de>
Tue, 28 Nov 2023 07:32:40 +0000 (08:32 +0100)
server/Client.cc
server/Client.h
server/MetaSnapper.cc
server/MetaSnapper.h
server/Types.cc
server/Types.h

index c117c03506d71e07fc7ff267f72e0af70b66b628..68f89d793eacf0a093ec4d3557a2248b2761eb9b 100644 (file)
@@ -399,6 +399,13 @@ Client::introspect(DBus::Connection& conn, DBus::Message& msg)
        "      <arg name='config-name' type='s' direction='in'/>\n"
        "    </method>\n"
 
+       "    <method name='GetPluginsReport'>\n"
+       "      <arg name='report' type='a(sasi)' direction='out'/>\n"
+       "    </method>\n"
+
+       "    <method name='ClearPluginsReport'>\n"
+       "    </method>\n"
+
        "  </interface>\n"
        "</node>\n";
 
@@ -682,7 +689,7 @@ Client::create_config(DBus::Connection& conn, DBus::Message& msg)
 
     check_permission(conn, msg);
 
-    meta_snappers.createConfig(config_name, subvolume, fstype, template_name);
+    meta_snappers.createConfig(config_name, subvolume, fstype, template_name, report);
 
     DBus::MessageMethodReturn reply(msg);
 
@@ -710,7 +717,7 @@ Client::delete_config(DBus::Connection& conn, DBus::Message& msg)
     check_lock(conn, msg, config_name);
     check_config_in_use(*it);
 
-    meta_snappers.deleteConfig(it);
+    meta_snappers.deleteConfig(it, report);
 
     DBus::MessageMethodReturn reply(msg);
 
@@ -891,7 +898,7 @@ Client::set_snapshot(DBus::Connection& conn, DBus::Message& msg)
     if (snap == snapshots.end())
        SN_THROW(IllegalSnapshotException());
 
-    snapper->modifySnapshot(snap, smd);
+    snapper->modifySnapshot(snap, smd, report);
 
     DBus::MessageMethodReturn reply(msg);
 
@@ -922,7 +929,7 @@ Client::create_single_snapshot(DBus::Connection& conn, DBus::Message& msg)
 
     Snapper* snapper = it->getSnapper();
 
-    Snapshots::iterator snap1 = snapper->createSingleSnapshot(scd);
+    Snapshots::iterator snap1 = snapper->createSingleSnapshot(scd, report);
 
     DBus::MessageMethodReturn reply(msg);
 
@@ -961,7 +968,7 @@ Client::create_single_snapshot_v2(DBus::Connection& conn, DBus::Message& msg)
 
     Snapshots::iterator parent = snapshots.find(parent_num);
 
-    Snapshots::iterator snap2 = snapper->createSingleSnapshot(parent, scd);
+    Snapshots::iterator snap2 = snapper->createSingleSnapshot(parent, scd, report);
 
     DBus::MessageMethodReturn reply(msg);
 
@@ -995,7 +1002,7 @@ Client::create_single_snapshot_of_default(DBus::Connection& conn, DBus::Message&
 
     Snapper* snapper = it->getSnapper();
 
-    Snapshots::iterator snap = snapper->createSingleSnapshotOfDefault(scd);
+    Snapshots::iterator snap = snapper->createSingleSnapshotOfDefault(scd, report);
 
     DBus::MessageMethodReturn reply(msg);
 
@@ -1029,7 +1036,7 @@ Client::create_pre_snapshot(DBus::Connection& conn, DBus::Message& msg)
 
     Snapper* snapper = it->getSnapper();
 
-    Snapshots::iterator snap1 = snapper->createPreSnapshot(scd);
+    Snapshots::iterator snap1 = snapper->createPreSnapshot(scd, report);
 
     DBus::MessageMethodReturn reply(msg);
 
@@ -1067,7 +1074,7 @@ Client::create_post_snapshot(DBus::Connection& conn, DBus::Message& msg)
 
     Snapshots::iterator snap1 = snapshots.find(pre_num);
 
-    Snapshots::iterator snap2 = snapper->createPostSnapshot(snap1, scd);
+    Snapshots::iterator snap2 = snapper->createPostSnapshot(snap1, scd, report);
 
     bool background_comparison = true;
     it->getConfigInfo().get_value("BACKGROUND_COMPARISON", background_comparison);
@@ -1113,7 +1120,7 @@ Client::delete_snapshots(DBus::Connection& conn, DBus::Message& msg)
 
        Snapshots::iterator snap = snapshots.find(*it2);
 
-       snapper->deleteSnapshot(snap);
+       snapper->deleteSnapshot(snap, report);
     }
 
     DBus::MessageMethodReturn reply(msg);
@@ -1708,6 +1715,8 @@ Client::sync(DBus::Connection& conn, DBus::Message& msg)
 
     y2deb("Sync config_name:" << config_name);
 
+    boost::unique_lock<boost::shared_mutex> lock(big_mutex);
+
     MetaSnappers::iterator it = meta_snappers.find(config_name);
 
     check_permission(conn, msg, *it);
@@ -1722,6 +1731,43 @@ Client::sync(DBus::Connection& conn, DBus::Message& msg)
 }
 
 
+void
+Client::get_plugins_report(DBus::Connection& conn, DBus::Message& msg)
+{
+    y2deb("GetPluginsReport");
+
+    boost::unique_lock<boost::shared_mutex> lock(big_mutex);
+
+    check_permission(conn, msg);
+
+    DBus::MessageMethodReturn reply(msg);
+
+    DBus::Marshaller marshaller(reply);
+    marshaller << report.entries;
+
+    conn.send(reply);
+}
+
+
+void
+Client::clear_plugins_report(DBus::Connection& conn, DBus::Message& msg)
+{
+    y2deb("ClearPluginsReport");
+
+    boost::unique_lock<boost::shared_mutex> lock(big_mutex);
+
+    check_permission(conn, msg);
+
+    DBus::MessageMethodReturn reply(msg);
+
+    report.clear();
+
+    DBus::Marshaller marshaller(reply);
+
+    conn.send(reply);
+}
+
+
 void
 Client::debug(DBus::Connection& conn, DBus::Message& msg)
 {
@@ -1836,6 +1882,8 @@ Client::dispatch(DBus::Connection& conn, DBus::Message& msg)
        { "QueryQuota", &Client::query_quota },
        { "QueryFreeSpace", &Client::query_free_space },
        { "Sync", &Client::sync },
+       { "GetPluginsReport", &Client::get_plugins_report },
+       { "ClearPluginsReport", &Client::clear_plugins_report },
        { "Debug", &Client::debug }
     };
 
index dd7e09620aeac211b03a38f6063e1408e04a9747..5fee4a3d268c491e078f00fa7d827e92d60c8604 100644 (file)
@@ -34,6 +34,7 @@
 #include <snapper/Snapper.h>
 #include <snapper/Snapshot.h>
 #include <snapper/Comparison.h>
+#include <snapper/Plugins.h>
 #include <dbus/DBusConnection.h>
 #include <dbus/DBusMessage.h>
 
@@ -120,6 +121,8 @@ public:
     void query_quota(DBus::Connection& conn, DBus::Message& msg);
     void query_free_space(DBus::Connection& conn, DBus::Message& msg);
     void sync(DBus::Connection& conn, DBus::Message& msg);
+    void get_plugins_report(DBus::Connection& conn, DBus::Message& msg);
+    void clear_plugins_report(DBus::Connection& conn, DBus::Message& msg);
     void debug(DBus::Connection& conn, DBus::Message& msg);
 
     void dispatch(DBus::Connection& conn, DBus::Message& msg);
@@ -174,6 +177,8 @@ public:
 
     bool zombie = false;
 
+    Plugins::Report report;
+
 private:
 
     void method_call_worker();
index 506c6286732f44af6d0d18f5aa0d30d293a25c10..e0f090bc3c181d96909d19a6c0e2ccb862c579df 100644 (file)
@@ -21,7 +21,7 @@
  */
 
 
-#include <string.h>
+#include <cstring>
 #include <sys/types.h>
 #include <boost/algorithm/string.hpp>
 
@@ -172,10 +172,10 @@ MetaSnappers::find(const string& config_name)
 
 
 void
-MetaSnappers::createConfig(const string& config_name, const string& subvolume,
-                          const string& fstype, const string& template_name)
+MetaSnappers::createConfig(const string& config_name, const string& subvolume, const string& fstype,
+                          const string& template_name, Plugins::Report& report)
 {
-    Snapper::createConfig(config_name, "/", subvolume, fstype, template_name);
+    Snapper::createConfig(config_name, "/", subvolume, fstype, template_name, report);
 
     ConfigInfo config_info = Snapper::getConfig(config_name, "/");
 
@@ -184,9 +184,9 @@ MetaSnappers::createConfig(const string& config_name, const string& subvolume,
 
 
 void
-MetaSnappers::deleteConfig(iterator it)
+MetaSnappers::deleteConfig(iterator it, Plugins::Report& report)
 {
-    Snapper::deleteConfig(it->configName(), "/");
+    Snapper::deleteConfig(it->configName(), "/", report);
 
     entries.erase(it);
 }
index 7377e123fb20c98a3cb467635d1a2b2a58b7bc85..a630295e9ee89d0dbe7169c5c7b4ace0ddea1390 100644 (file)
@@ -105,8 +105,8 @@ public:
     iterator find(const string& config_name);
 
     void createConfig(const string& config_name, const string& subvolume, const string& fstype,
-                     const string& template_name);
-    void deleteConfig(iterator);
+                     const string& template_name, Plugins::Report& report);
+    void deleteConfig(iterator, Plugins::Report& report);
 
 private:
 
index db469bc0e74fcf1b03e7b034f3dfce346faab4ca..db72afcf965e5d7325d35ec928241b1f8178ff75 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) [2012-2013] Novell, Inc.
- * Copyright (c) [2016,2018] SUSE LLC
+ * Copyright (c) [2016-2023] SUSE LLC
  *
  * All Rights Reserved.
  *
@@ -31,6 +31,7 @@ namespace DBus
     const char* TypeInfo<File>::signature = "(su)";
     const char* TypeInfo<QuotaData>::signature = "(tt)";
     const char* TypeInfo<FreeSpaceData>::signature = "(tt)";
+    const char* TypeInfo<Plugins::Report::Entry>::signature = "(sasi)";
 
 
     Marshaller&
@@ -124,4 +125,14 @@ namespace DBus
        return marshaller;
     }
 
+
+    Marshaller&
+    operator<<(Marshaller& marshaller, const Plugins::Report::Entry& data)
+    {
+       marshaller.open_struct();
+       marshaller << data.name << data.args << data.exit_status;
+       marshaller.close_struct();
+       return marshaller;
+    }
+
 }
index a51fabd1f9d07a2c832d9081146fe140336dcbc3..478612ec1fa79ec7b7952e70e27eae8f70bd914e 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2012 Novell, Inc.
- * Copyright (c) [2016,2018] SUSE LLC
+ * Copyright (c) [2016-2023] SUSE LLC
  *
  * All Rights Reserved.
  *
 
 
 #include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <dbus/dbus.h>
-
+#include <cstdlib>
+#include <cstring>
 #include <string>
+#include <dbus/dbus.h>
 
 #include <snapper/Snapper.h>
 #include <snapper/Snapshot.h>
@@ -46,6 +45,7 @@ namespace DBus
     template <> struct TypeInfo<File> { static const char* signature; };
     template <> struct TypeInfo<QuotaData> { static const char* signature; };
     template <> struct TypeInfo<FreeSpaceData> { static const char* signature; };
+    template <> struct TypeInfo<Plugins::Report::Entry> { static const char* signature; };
 
     Marshaller& operator<<(Marshaller& marshaller, const ConfigInfo& data);
 
@@ -64,4 +64,6 @@ namespace DBus
 
     Marshaller& operator<<(Marshaller& marshaller, const FreeSpaceData& data);
 
+    Marshaller& operator<<(Marshaller& marshaller, const Plugins::Report::Entry& data);
+
 }