Использование фильтра Ruby в logsta sh для суммирования значений поля при каждом появлении события - PullRequest
1 голос
/ 20 февраля 2020

Я пытаюсь суммировать значение указанного поля c каждый раз, когда оно отображается, поле имеет следующий формат: [cdr][Service-Information][PS-Information][Service-Data-Container][Accounting-Output-Octets], а его значение представляет собой поле чисел c (оно показывает количество битов потребляется).

Я пытаюсь сделать следующее:

a = event.get("[cdr][Service-Information][PS-Information][Service-Data-Container][Accounting-Output-Octets]")
if a
    sum = 0
    a.each_index { |x|
        sum += a["amount"]
    }
    event.set("amount-sum", sum)
end

Я получаю следующую ошибку:

Ruby исключение произошло: неопределенный метод `each_index 'для Integer

Я новичок ie в Ruby, поэтому я понятия не имею, служит ли этот код и для этого типа поля.

1 Ответ

0 голосов
/ 26 февраля 2020

Если целое число a Вы можете использовать что-то вроде этого:

a = 123456789
a = a.to_s.split("").map(&:to_i)
sum = 0
a.each do |x|
  sum += x
end
p sum #=> 45

И, пожалуйста, НЕ ИСПОЛЬЗУЙТЕ фигурную скобку, если блок не находится в одной строке. Здесь я сделал это с конца, чтобы показать, как это должно быть. Если вы хотите использовать один блок строк - вы должны написать так:

a.each {|x| sum += x} 

, если блок> 1 строк, чем использовать do / end | еще {}

...