yandextank/plugins/Telegraf/config.py
def create_collector_config(self, workdir):
        """ Telegraf collector config,
        toml format

        """
        cfg_path = "agent_collector_{}.cfg".format(self.host)
        if os.path.isfile(cfg_path):
            logger.info(
                'Found agent config file in working directory with the same name as created for host %s.\n'
                'Creating new one via tempfile. This will affect predictable filenames for agent artefacts',
                self.host)
            handle, cfg_path = tempfile.mkstemp('.cfg', 'agent_collector_')
            os.close(handle)

        self.monitoring_data_output = "{remote_folder}/monitoring.rawdata".format(
            remote_folder=workdir)

        defaults_old_enabled = ['CPU', 'Memory', 'Disk', 'Net', 'System']

        try:
            config = ConfigParser.RawConfigParser()

            config.add_section("global_tags")
            config.add_section("agent")
            config.set(
                "agent",
                "interval",
                "'{interval}s'".format(interval=self.interval))
            config.set("agent", "round_interval", "true")
            config.set("agent", "flush_interval", "'1s'")
            config.set("agent", "collection_jitter", "'0s'")
            config.set("agent", "flush_jitter", "'1s'")

            for section in self.host_config.keys():
                # telegraf-style config
                if not self.old_style_configs:
                    config.add_section(
                        "{section_name}".format(
                            section_name=self.host_config[section]['name']))
                    for key, value in iteritems(self.host_config[section]):
                        if key != 'name':
                            config.set(
                                "{section_name}".format(
                                    section_name=self.host_config[section][
                                        'name']),
                                "{key}".format(key=key),
                                "{value}".format(value=value))
                # monitoring-style config
                else:
                    if section in defaults_old_enabled:
                        config.add_section(
                            "{section_name}".format(
                                section_name=self.host_config[section]['name']))
                        for key, value in iteritems(self.host_config[section]):
                            if key in [
                                    'fielddrop', 'fieldpass', 'percpu',
                                    'devices', 'interfaces'
                            ]:
                                config.set(
                                    "{section_name}".format(
                                        section_name=self.host_config[section][
                                            'name']),
                                    "{key}".format(key=key),
                                    "{value}".format(value=value))

            # outputs
            config.add_section("[outputs.file]")
            config.set(
                "[outputs.file]",
                "files",
                "['{config}']".format(config=self.monitoring_data_output))
            config.set("[outputs.file]", "data_format", "'json'")

            with open(cfg_path, 'w') as fds:
                config.write(fds)

            # dirty hack, this allow to avoid bash escape quoting, we're pushing shell script w/ arguments
            # index of argument is index of custom metric in our config
            inputs = ""
            for idx, cmd in enumerate(self.custom):
                inputs += "[[inputs.exec]]\n"
                inputs += "commands = ['/bin/sh {workdir}/agent_customs.sh -{idx}']\n".format(
                    workdir=workdir, idx=idx)
                inputs += "data_format = 'value'\n"
                inputs += "data_type = 'float'\n"
                inputs += "name_prefix = '{}_'\n\n".format(cmd.get('label'))
                if cmd['diff']:
                    decoder.diff_metrics['custom'].append(
                        decoder.find_common_names(cmd.get('label')))

            with open(cfg_path, 'a') as fds:
                fds.write(inputs)

            # telegraf raw configuration into xml
            telegraf_raw = ""
            for element in self.telegrafraw:
                telegraf_raw += element

            with open(cfg_path, 'a') as fds:
                fds.write(telegraf_raw)

        except Exception as exc:
            logger.error(
                'Error trying to create monitoring config. Malformed? %s',
                exc,
                exc_info=True)
        return cfg_path
def create_collector_config(self, workdir):
        """ Telegraf collector config,
        toml format

        """
        cfg_path = "agent_collector_{}.cfg".format(self.host)
        if os.path.isfile(cfg_path):
            logger.info(
                'Found agent config file in working directory with the same name as created for host %s.\n'
                'Creating new one via tempfile. This will affect predictable filenames for agent artefacts',
                self.host)
            handle, cfg_path = tempfile.mkstemp('.cfg', 'agent_collector_')
            os.close(handle)

        self.monitoring_data_output = "{remote_folder}/monitoring.rawdata".format(
            remote_folder=workdir)

        defaults_old_enabled = ['CPU', 'Memory', 'Disk', 'Net', 'System']

        try:
            config = ConfigParser.RawConfigParser()

            config.add_section("global_tags")
            config.add_section("agent")
            config.set(
                "agent",
                "interval",
                "'{interval}s'".format(interval=self.interval))
            config.set("agent", "round_interval", "true")
            config.set("agent", "flush_interval", "'1s'")
            config.set("agent", "collection_jitter", "'0s'")
            config.set("agent", "flush_jitter", "'1s'")

            for section in self.host_config.keys():
                # telegraf-style config
                if not self.old_style_configs:
                    config.add_section(
                        "{section_name}".format(
                            section_name=self.host_config[section]['name']))
                    for key, value in iteritems(self.host_config[section]):
                        if key != 'name':
                            config.set(
                                "{section_name}".format(
                                    section_name=self.host_config[section][
                                        'name']),
                                "{key}".format(key=key),
                                "{value}".format(value=value))
                # monitoring-style config
                else:
                    if section in defaults_old_enabled:
                        config.add_section(
                            "{section_name}".format(
                                section_name=self.host_config[section]['name']))
                        for key, value in iteritems(self.host_config[section]):
                            if key in [
                                    'fielddrop', 'fieldpass', 'percpu',
                                    'devices', 'interfaces'
                            ]:
                                config.set(
                                    "{section_name}".format(
                                        section_name=self.host_config[section][
                                            'name']),
                                    "{key}".format(key=key),
                                    "{value}".format(value=value))

            # outputs
            config.add_section("[outputs.file]")
            config.set(
                "[outputs.file]",
                "files",
                "['{config}']".format(config=self.monitoring_data_output))
            config.set("[outputs.file]", "data_format", "'json'")

            with open(cfg_path, 'w') as fds:
                config.write(fds)

            # dirty hack, this allow to avoid bash escape quoting, we're pushing shell script w/ arguments
            # index of argument is index of custom metric in our config
            inputs = ""
            for idx, cmd in enumerate(self.custom):
                inputs += "[[inputs.exec]]\n"
                inputs += "commands = ['/bin/sh {workdir}/agent_customs.sh -{idx}']\n".format(
                    workdir=workdir, idx=idx)
                inputs += "data_format = 'value'\n"
                inputs += "data_type = 'float'\n"
                inputs += "name_prefix = '{}_'\n\n".format(cmd.get('label'))
                if cmd['diff']:
                    decoder.diff_metrics['custom'].append(
                        decoder.find_common_names(cmd.get('label')))

            with open(cfg_path, 'a') as fds:
                fds.write(inputs)

            # telegraf raw configuration into xml
            telegraf_raw = ""
            for element in self.telegrafraw:
                telegraf_raw += element

            with open(cfg_path, 'a') as fds:
                fds.write(telegraf_raw)

        except Exception as exc:
            logger.error(
                'Error trying to create monitoring config. Malformed? %s',
                exc,
                exc_info=True)
        return cfg_path
def create_collector_config ( self , workdir ) : cfg_path = "agent_collector_{}.cfg" . format ( self . host ) if os . path . isfile ( cfg_path ) : logger . info ( 'Found agent config file in working directory with the same name as created for host %s.\n' 'Creating new one via tempfile. This will affect predictable filenames for agent artefacts' , self . host ) handle , cfg_path = tempfile . mkstemp ( '.cfg' , 'agent_collector_' ) os . close ( handle ) self . monitoring_data_output = "{remote_folder}/monitoring.rawdata" . format ( remote_folder = workdir ) defaults_old_enabled = [ 'CPU' , 'Memory' , 'Disk' , 'Net' , 'System' ] try : config = ConfigParser . RawConfigParser ( ) config . add_section ( "global_tags" ) config . add_section ( "agent" ) config . set ( "agent" , "interval" , "'{interval}s'" . format ( interval = self . interval ) ) config . set ( "agent" , "round_interval" , "true" ) config . set ( "agent" , "flush_interval" , "'1s'" ) config . set ( "agent" , "collection_jitter" , "'0s'" ) config . set ( "agent" , "flush_jitter" , "'1s'" ) for section in self . host_config . keys ( ) : # telegraf-style config if not self . old_style_configs : config . add_section ( "{section_name}" . format ( section_name = self . host_config [ section ] [ 'name' ] ) ) for key , value in iteritems ( self . host_config [ section ] ) : if key != 'name' : config . set ( "{section_name}" . format ( section_name = self . host_config [ section ] [ 'name' ] ) , "{key}" . format ( key = key ) , "{value}" . format ( value = value ) ) # monitoring-style config else : if section in defaults_old_enabled : config . add_section ( "{section_name}" . format ( section_name = self . host_config [ section ] [ 'name' ] ) ) for key , value in iteritems ( self . host_config [ section ] ) : if key in [ 'fielddrop' , 'fieldpass' , 'percpu' , 'devices' , 'interfaces' ] : config . set ( "{section_name}" . format ( section_name = self . host_config [ section ] [ 'name' ] ) , "{key}" . format ( key = key ) , "{value}" . format ( value = value ) ) # outputs config . add_section ( "[outputs.file]" ) config . set ( "[outputs.file]" , "files" , "['{config}']" . format ( config = self . monitoring_data_output ) ) config . set ( "[outputs.file]" , "data_format" , "'json'" ) with open ( cfg_path , 'w' ) as fds : config . write ( fds ) # dirty hack, this allow to avoid bash escape quoting, we're pushing shell script w/ arguments # index of argument is index of custom metric in our config inputs = "" for idx , cmd in enumerate ( self . custom ) : inputs += "[[inputs.exec]]\n" inputs += "commands = ['/bin/sh {workdir}/agent_customs.sh -{idx}']\n" . format ( workdir = workdir , idx = idx ) inputs += "data_format = 'value'\n" inputs += "data_type = 'float'\n" inputs += "name_prefix = '{}_'\n\n" . format ( cmd . get ( 'label' ) ) if cmd [ 'diff' ] : decoder . diff_metrics [ 'custom' ] . append ( decoder . find_common_names ( cmd . get ( 'label' ) ) ) with open ( cfg_path , 'a' ) as fds : fds . write ( inputs ) # telegraf raw configuration into xml telegraf_raw = "" for element in self . telegrafraw : telegraf_raw += element with open ( cfg_path , 'a' ) as fds : fds . write ( telegraf_raw ) except Exception as exc : logger . error ( 'Error trying to create monitoring config. Malformed? %s' , exc , exc_info = True ) return cfg_path
Telegraf collector config,
        toml format
Telegraf collector config toml format