Ich verwende Fluentd, um einige Daten aus einer Reihe von Sensoren zu pushen. Die Daten, die ich dränge, enthalten ein "timestamp" -Feld (in Millisekunden), das ich in seinen Datumskomponenten (Jahr, Monat usw.) explodieren muss. Ich benutze einen Filter, um das zu tun, wenn Daten gepusht werden, so dass ich durch etwas Ruby-Code den Zeitstempel, z.fluentd Zuweisung von Typen zu neuen Feld im Filter
<filter *>
@type record_transformer
enable_ruby
<record>
year ${Time.at(Integer(record['timestamp'])/1000.0).strftime("%Y")}
monthnumber ${Time.at(Integer(record['timestamp'])/1000.0).strftime("%-m")}
monthname ${Time.at(Integer(record['timestamp'])/1000.0).strftime("%B")}
daynumber ${Time.at(Integer(record['timestamp'])/1000.0).strftime("%-d")}
dayname ${Time.at(Integer(record['timestamp'])/1000.0).strftime("%A")}
hour ${Time.at(Integer(record['timestamp'])/1000.0).strftime("%-k")}
minutes ${Time.at(Integer(record['timestamp'])/1000.0).strftime("%-M")}
seconds ${Time.at(Integer(record['timestamp'])/1000.0).strftime("%-S")}
</record>
</filter>
mein Problem ist, dass die neuen Felder es werde in der json mit String-Typen zugeordnet nehmen, während für einige der ich streng ganzen Zahlen müssen (zum Beispiel für das Jahr, Monthnumber, daynumber, usw.) . Gibt es irgendeinen Weg, um flüssig zu sagen, dass diese Felder als ganze Zahlen hinzugefügt werden müssen?
Ich habe versucht, mit:
year ${Integer(Time.at(Integer(record['timestamp'])/1000.0).strftime("%Y"))}
aber es hat nicht funktioniert.