2017-11-08 12 views
0

ruby​​コードを使用しているlogstash構成ファイルがあります。私が書いているコードは繰り返しあり、私はそれの関数を抽出したい。 logstash設定ファイルで可能ですか?ここルビコードの機能Logstash

は私が何をやりたいことはそうevent.get('storeNumber').to_s + event.get('txnNumber').to_s + event.get('tillNumber').to_sの値が格納されていることを推測してい

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" 
} 

}

答えて

0

の方法を抽出する必要があるの私のコンフィギュレーションファイルの一部です。あなたはそれが何度も何度も何度も印刷されているとは限りません。答えははいです。これは次のように動作します:

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 
      ..." 
+0

これは私が探しているものではありません。私はすべてのルビコードをメソッドに入れて別のif節で呼びたいと思っていますが、現在は別の節で同じコードを繰り返しています。私のコードのメソッドを作成し、if節から呼び出すことが可能かどうかを知りたいです。 –

+0

このようなもの https://discuss.elastic.co/t/methods-in-logstash-ruby/102144/3 –

関連する問題