Hi,
I am receiving the below error and am not sure what is causing it. I am just trying to convert eastings and northings to co-ordinates to make the data useful in kibana. Anyone know what could be causing it?
[2019-07-09T10:10:56,026][FATAL][logstash.runner ] The given configuration is invalid. Reason: undefined method `-' for nil:NilClass
[2019-07-09T10:10:56,037][ERROR][org.logstash.Logstash ] java.lang.IllegalStateException: Logstash stopped processing because of an error: (SystemExit) exit
In ruby file:
def filter(event)
#metres in, degrees out
east = event.get("easting")
north = event.get("northing")
if east == nil
event.set("location", "nil, nil") #latitude & longitude respectively
return [event]
else
k = 0.9996012717 #grid scale factor on central meridean
origin_lat = 49.0
origin_long = -2.0
origin_x = 400000 # 400 kM
origin_y = -100000 # 100 kM
a = 6377563.396 # Airy Spheroid
b = 6356256.910
# compute interim values
a = a * k
b = b * k
n1 = (a - b)/(a + b)
n2 = n1 * n1
n3 = n2 * n1
lat = origin_lat * Math::PI / 180.0 # to radians
e2 = (a * a - b * b)/(a * a) # first eccentricity
#ex = (a * a - b * b)/(b * b) # second eccentricity
origin_northings = b * lat + b * (n1 * (1.0 + 5.0 * n1*(1.0+n1)/4.0)*lat - 3.0*n1*(1.0+n1*(1.0+7.0*n1/8.0))*Math.sin(lat)*Math.cos(lat) + (15.0*n1*(n1+n2)/8.0)*Math.sin(2.0*lat)*Math.cos(2.0*lat) - (35.0*n3/24.0)*Math.sin(3.0*lat)*Math.cos(3.0*lat) )
northing = north - origin_y
easting = east - origin_x
# Evaluate M term: latitude of the northing on the centre meridian
northing += origin_northings
phid = northing / (b*(1.0 + n1 + 5.0*(n2+n3)/4.0)) - 1.0
phid2 = phid + 1.0
while (phid2 - phid).abs > 1E-6
phid = phid2
nphid = b*phid + b*(n1*(1.0 + 5.0*n1*(1.0+n1)/4.0)*phid - 3.0*n1*(1.0+n1*(1.0+7.0*n1/8.0))*Math.sin(phid)*Math.cos(phid) + (15.0*n1*(n1+n2)/8.0)*Math.sin(2.0*phid)*Math.cos(2.0*phid) - (35.0*n3/24.0)*Math.sin(3.0*phid)*Math.cos(3.0*phid) )
dnphid = b*((1.0+n1+5.0*(n2+n3)/4.0) - 3.0*(n1+n2+7.0*n3/8.0)*Math.cos(2.0*phid) + (15.0*(n2+n3)/4.0)*Math.cos(4*phid) - (35.0*n3/8.0)*Math.cos(6.0*phid))
phid2 = phid - (nphid - northing)/dnphid
end
c = Math.cos(phid)
s = Math.sin(phid)
t = Math.tan(phid)
t2 = t*t
q2 = easting*easting
nu2 = (a*a)/(1.0 - e2*s*s)
nu = Math.sqrt(nu2)
nudivrho = a*a*c*c/(b*b) - c*c + 1.0
eta2 = nudivrho - 1
rho = nu / nudivrho
invnurho = ((1.0 - e2*s*s)*(1.0 - e2*s*s))/(a*a*(1.0 - e2))
lat = phid - t*q2*invnurho/2.0 + (q2*q2*(t/(24*rho*nu2*nu)*(5 + (3*t2) + eta2 - (9*t2*eta2))))
lon = (easting/(c*nu)) - (easting*q2*((nudivrho+2.0*t2)/(6.0*nu2))/(c*nu)) + (q2*q2*easting*(5 + (28*t2) + (24*t2*t2))/(120*nu2*nu2*nu*c))
latitude = lat * 180.0 / Math::PI
longitude = (lon * 180.0 / Math::PI) + origin_long
#location = "#{latitude}, #{longitude}"
event.set("location", "#{latitude}, #{longitude}") #latitude & longitude respectively
return [event]
end
end
test "north east" do
in_event { [{"easting" => 614502} , {"northing" => 246928}] }
expect("returns location") do |events|
events.get("location") == "52.07867241905442, 1.1307201995107992"
end
end
In config file:
input {
# sql query 1, 2, 3, 4, 5, 7, 8, 9 gets the response times by product id, domain id, cp id,
jdbc {
jdbc_driver_library => ""
jdbc_connection_string => ""
jdbc_driver_class => ""
jdbc_user => ""
jdbc_password => ""
last_run_metadata_path => ""
statement => "SELECT v_product_id, v_domain_id, v_comm_provider_id, i_status, v_api_name,
v_managed_server,d_updated_date, nvl(i_time_taken,0) resp_time, v_reservation_ref, cp_name, v_description,
v_error_desc, CONCAT(CONCAT(i_status, ': '),v_error_desc) code_and_desc, northing, easting
FROM OR_FieldReserve.tb_fr_track_performance a
LEFT OUTER JOIN OR_FieldReserve.TB_CP_DETAILS b ON a.v_comm_provider_id = b.cp_id
LEFT OUTER JOIN OR_FieldReserve.TB_AREA c ON a.v_domain_id = c.v_area_id
LEFT OUTER JOIN OR_FieldReserve.TB_FR_ERROR_CODES_ASG d ON a.i_status = d.i_error_code
LEFT OUTER JOIN OR_FieldReserve.Pwa_exchange_map e ON a.v_exchange_id = e.v_arms_gc
WHERE d_updated_date > :sql_last_value"
#use_column_value => true
#tracking_column => "d_updated_date"
schedule => "*/2 * * * *"
}
}
filter{
ruby{
path => "/software/bea/elk/logstash-7.1.1/config/NEtoLL.rb"
}
}
output {
stdout { codec => rubydebug }
elasticsearch {
hosts => [""]
index => ""
user => ""
password => ""
}
}