yandex / yandex-tank

Load and performance benchmark tool
Other
2.46k stars 279 forks source link

<type 'exceptions.ValueError'>: could not convert string to float: postgres #809

Open Ezhvtumane opened 5 years ago

Ezhvtumane commented 5 years ago

When I using [[inputs.postgres]] I receive this error, because this plugin has string metrics.

https://github.com/yandex/yandex-tank/blob/develop/yandextank/plugins/Telegraf/plugin.py#L299 This type conversion throw exception.

Please, check type before cast. Thanks. Hope it's be fixed.

fomars commented 4 years ago

не понял пожалуйста, приложите полный текст ошибки

Ezhvtumane commented 4 years ago

К сожалению, сейчас нет возможности запустить тест и полностью привести текст ошибки. В целом там проблема в том, что может прийти не числовая метрика, а стринга. Тогда весь тест валится. Например имя хоста или любая другая метрика теста которая не int.

В своем проекте я пофиксил следующим образом: добавил дополнительную проверку:

elif isinstance(value, basestring) or isinstance(self.data[host][metric], basestring): self.sign[host][metric] = 0 self.data[host][metric] = value

        for metric, value in data.iteritems():
            if value == '':
                self.sign[host][metric] = -1
                self.data[host][metric] = value
            elif isinstance(value, basestring) or isinstance(self.data[host][metric], basestring):
                self.sign[host][metric] = 0
                self.data[host][metric] = value
            else:
                if not self.data[host].get(metric, None):
                    self.sign[host][metric] = 1
                elif float(value) > float(self.data[host][metric]):
                    self.sign[host][metric] = 1
                elif float(value) < float(self.data[host][metric]):
                    self.sign[host][metric] = -1
                else:
                    self.sign[host][metric] = 0
                self.data[host][metric] = "%.2f" % float(value)