gluon-geolocator: geolocator drop dep on nixio & use posix lockfile

Signed-off-by: Jan-Tarek Butt <tarek@ring0.de>
This commit is contained in:
Jan-Tarek Butt 2019-02-08 03:28:25 +01:00
parent 791dfe0a2f
commit 22b221a8fb

View File

@ -1,7 +1,9 @@
#!/usr/bin/lua
local bit = require('bit')
local unistd = require('posix.unistd')
local fcntl = require('posix.fcntl')
local uci = require('simple-uci').cursor()
local nixio = require('nixio')
local json = require ("jsonc")
local ubus = require 'ubus'
local iwinfo = require("iwinfo")
@ -16,9 +18,21 @@ end
-- PID file to ensure the geolocator isn't running parallel
local lockfile = '/var/lock/geolocator.lock'
local lockfd = nixio.open(lockfile, 'w', 'rw-------')
local lockfd, err = fcntl.open(lockfile, bit.bor(fcntl.O_WRONLY, fcntl.O_CREAT), 384) -- mode 0600
if not lockfd:lock('tlock') then
if not lockfd then
io.stderr:write(err, '\n')
os.exit(1)
end
local ok, _ = fcntl.fcntl(lockfd, fcntl.F_SETLK, {
l_start = 0,
l_len = 0,
l_type = fcntl.F_WRLCK,
l_whence = unistd.SEEK_SET,
})
if not ok then
io.stderr:write(string.format(
"Unable to lock file %s. Make sure there is no other instance of the geolocator running.\n",
lockfile
@ -81,7 +95,7 @@ local function locate()
return true
end)
assert(#found_bssids >= 12, 'insufficient BSSIDs found')
assert(#found_bssids > 0, 'insufficient BSSIDs found')
local data = receive_json('http://openwifi.su/api/v1/bssids/' .. table.concat(found_bssids, ','))
assert(type(data) == 'table' and data.lon and data.lat, 'location not available')