ruby代码Logstash中的函数
我有一个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_
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子句调用它