Add linux specific timeslidersmf module and dependencies
authorRalf Ertzinger <ralf@skytale.net>
Fri, 21 Feb 2014 14:12:04 +0000 (15:12 +0100)
committerRalf Ertzinger <ralf@skytale.net>
Fri, 21 Feb 2014 14:12:04 +0000 (15:12 +0100)
usr/share/time-slider/lib/time_slider/linux/smf.py [new file with mode: 0644]
usr/share/time-slider/lib/time_slider/linux/timesliderconfig.py [new file with mode: 0644]
usr/share/time-slider/lib/time_slider/linux/timeslidersmf.py [new file with mode: 0755]
usr/share/time-slider/lib/time_slider/timesliderd.py

diff --git a/usr/share/time-slider/lib/time_slider/linux/smf.py b/usr/share/time-slider/lib/time_slider/linux/smf.py
new file mode 100644 (file)
index 0000000..748ca22
--- /dev/null
@@ -0,0 +1,45 @@
+#!/usr/bin/python2
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+import timesliderconfig
+import time_slider.smf as base
+
+class SMFInstance(base.SMFInstance):
+
+    def __init__(self, instanceName):
+        base.SMFInstance.__init__(self, instanceName)
+
+    def get_service_state(self):
+        config = timesliderconfig.Config()
+        return config.get(self.instanceName[5:], 'state')
+
+    def get_service_dependencies(self):
+        return []
+
+    def get_prop(self, propgroup, propname):
+        return timesliderconfig.Config().get(self.instanceName[5:], \
+                propgroup + '/' + propname)
+
+if __name__ == "__main__":
+  S = SMFInstance('svc:/application/time-slider')
+  print S
+
diff --git a/usr/share/time-slider/lib/time_slider/linux/timesliderconfig.py b/usr/share/time-slider/lib/time_slider/linux/timesliderconfig.py
new file mode 100644 (file)
index 0000000..453abc6
--- /dev/null
@@ -0,0 +1,91 @@
+#!/usr/bin/python2
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+import ConfigParser
+import sys
+
+# Default config file name position
+configfile = "/etc/time-slider/timesliderd.conf"
+
+# Default values
+default_properties = {
+    'application/time-slider': {
+        'zpool/emergency-level': 95,
+        'zpool/critical-level': 90,
+        'zpool/warning-level': 80,
+        'zfs/sep': '_',
+        'daemon/verbose': 'true',
+        'state': 'online',
+    },
+    'system/filesystem/zfs/auto-snapshot:monthly': {
+        'zfs/interval': 'months',
+        'zfs/period': 1,
+        'zfs/keep': 2,
+        'state': 'online',
+    },
+    'system/filesystem/zfs/auto-snapshot:weekly': {
+        'zfs/interval': 'days',
+        'zfs/period': 7,
+        'zfs/keep': 4,
+        'state': 'online',
+    },
+    'system/filesystem/zfs/auto-snapshot:daily': {
+        'zfs/interval': 'days',
+        'zfs/period': 1,
+        'zfs/keep': 6,
+        'state': 'online',
+    },
+    'system/filesystem/zfs/auto-snapshot:hourly': {
+        'zfs/interval': 'hours',
+        'zfs/period': 1,
+        'zfs/keep': 23,
+        'state': 'online',
+    },
+    'system/filesystem/zfs/auto-snapshot:frequent': {
+        'zfs/interval': 'minutes',
+        'zfs/period': 15,
+        'zfs/keep': 3,
+        'state': 'online',
+    },
+}
+
+class Config:
+    def __init__(self):
+        self.config = ConfigParser.ConfigParser()
+        self.config.read(configfile)
+
+    def get(self, section, option):
+        try:
+            result = self.config.get(section, option)
+            sys.stderr.write('CONFIG: FILE section %s, option %s with value %s\n' % (section, option, result))
+            return result
+        except (ConfigParser.NoOptionError, ConfigParser.NoSectionError):
+            try:
+                result = default_properties[section][option]
+                sys.stderr.write('CONFIG: DEFAULT section %s, option %s with value %s\n' % (section, option, result))
+                return result
+            except KeyError:
+                sys.stderr.write('CONFIG: NOTFOUND section %s, option %s\n' % (section, option))
+                return ''
+
+    def sections(self):
+        return self.config.sections()
diff --git a/usr/share/time-slider/lib/time_slider/linux/timeslidersmf.py b/usr/share/time-slider/lib/time_slider/linux/timeslidersmf.py
new file mode 100755 (executable)
index 0000000..64f3a5b
--- /dev/null
@@ -0,0 +1,65 @@
+#!/usr/bin/python2
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+import time_slider.timeslidersmf as base
+import smf
+import threading
+
+class TimeSliderSMF(base.TimeSliderSMF):
+
+    def __init__(self, instanceName = base.SMFNAME):
+        base.TimeSliderSMF.__init__(self, instanceName)
+
+#
+# This is beyond ugly.
+#
+# The problem this is trying to solve is to change the inheritance chain. Origially
+# it looks like this:
+#
+# <class 'time_slider.linux.timeslidersmf.TimeSliderSMF'>
+# <class 'time_slider.timeslidersmf.TimeSliderSMF'>
+# <class 'time_slider.smf.SMFInstance'>
+# <type 'exceptions.Exception'>
+# <type 'exceptions.BaseException'>
+# <type 'object'>
+#
+# We'd like it to look like this:
+#
+# <class 'time_slider.linux.timeslidersmf.TimeSliderSMF'>
+# <class 'time_slider.timeslidersmf.TimeSliderSMF'>
+# <class 'time_slider.linux.smf.SMFInstance'>
+# <class 'time_slider.smf.SMFInstance'>
+# <type 'exceptions.Exception'>
+# <type 'exceptions.BaseException'>
+# <type 'object'>
+#
+# so we can inject some linux specific things into SMF without having to copy all
+# the code.
+#
+# This has to be done here as the __init__ of TimeSliderSMF will otherwise fail.
+#
+
+base.TimeSliderSMF.__bases__ = (smf.SMFInstance,)
+
+if __name__ == "__main__":
+  S = TimeSliderSMF('svc:/application/time-slider')
+  print S
index 2261ee9..d3fee51 100755 (executable)
@@ -43,7 +43,7 @@ import dbus.mainloop.glib
 import dbussvc
 import zfs
 import smf
-import timeslidersmf
+import time_slider.linux.timeslidersmf as timeslidersmf
 import autosnapsmf
 import plugin
 from time_slider.linux.rbac import RBACprofile