elasticsearch,logstash,Ruby,elasticsearch,Logstash" /> elasticsearch,logstash,Ruby,elasticsearch,Logstash" />

ruby代码Logstash中的函数

ruby代码Logstash中的函数,ruby,elasticsearch,logstash,Ruby,elasticsearch,Logstash,我有一个logstash配置文件,其中使用的是ruby代码。我写的代码是重复的,我想从中提取一个函数。在logstash配置文件中是否可能 这是我的配置文件的一部分,我需要从中提取 map_action => "update" } ruby { code => "event.set('storeNumber', @@map['storeNumber_task1']) if @@map[event.get('storeNumber').to_

我有一个logstash配置文件,其中使用的是ruby代码。我写的代码是重复的,我想从中提取一个函数。在logstash配置文件中是否可能

这是我的配置文件的一部分,我需要从中提取

  map_action => "update"
}

ruby
{
  code =>    "event.set('storeNumber', @@map['storeNumber_task1'])
              if @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'startTime'] == nil and @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'endTime'] == nil
                 @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'startTime'] = event.get('logTimestamp');
                 @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'endTime'] = event.get('logTimestamp');
                 @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'counter'] = 1;
             elsif @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'startTime'] > event.get('logTimestamp')
                   @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'startTime'] = event.get('logTimestamp');
                   @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'counter'] += 1;
             elsif @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'endTime'] < event.get('logTimestamp')
                   @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'endTime'] = event.get('logTimestamp');
                   @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'counter'] += 1;
             else 
                   @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'counter'] += 1;
             end
             if @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'counter'] == 5
                @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'totalTime']= (Time.parse(@@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'endTime']).to_f - Time.parse(@@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'startTime']).to_f).round(4)
                event.set('processingTime', @@map[event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s + 'totalTime'])
             end"             
}

date 
{
        match => ["logTimestamp", "YYYY-MM-dd HH:mm:ss,SSS"]
        target => "logTimestamp"
}

}

我猜您想做的是存储event.get'storeNumber'。to_s+event.get'txnNumber'。to_s+event.get'tillNumber'。to_s,这样您就不会反复打印它了。答案是肯定的,应该是这样的:

ruby
{
    code => "foo = event.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_s
             event.set('storeNumber', @@map['storeNumber_task1'])
             if @@map[foo + 'startTime'] == nil and @@map[foo + 'endTime'] == nil
             ..."

这不是我要找的。我想把我所有的ruby代码放在一个方法中,并在不同的if-else子句中调用它,目前我在不同的子句中一次又一次地重复相同的代码。我想知道是否有可能为我的代码创建一个方法,并从任何if子句调用它