예제 #1
0
    def __init__(self, plugin_name, plugin_domain, read_freq, time_to_reading):
        from xmlrpclib import ServerProxy

        # The proxy through which we talk to the rrd daemon is the
        # same for all plugins, so we just initialize it once and
        # share it among them
        if PluginControl.__plugin_proxy is None:
            PluginControl.__plugin_proxy = ServerProxy(
                'http://' + SOCKPATH, transport=UnixStreamTransport()).Plugin

        if plugin_domain not in PLUGIN_DOMAINS:
            raise ValueError("'plugin_domain' = '{}' not one of '{}'".format(
                plugin_domain, ', '.join(PLUGIN_DOMAINS)))

        if read_freq not in READ_FREQS:
            raise ValueError("'read_freq' = '{}' not one of '{}'".format(
                read_freq, ', '.join(READ_FREQS)))

        self.__time_to_reading = float(time_to_reading)

        if time_to_reading >= READ_FREQS[read_freq] - 1:
            raise ValueError("'time_to_reading' too high")

        self.__mmap = PluginBackend(plugin_name)
        self.__plugin_name = plugin_name
        self.__plugin_domain = plugin_domain
        self.__read_freq = read_freq
        self.__dispatch = getattr(PluginControl.__plugin_proxy, plugin_domain)