diff options
Diffstat (limited to 'src/nopcollectd')
-rwxr-xr-x | src/nopcollectd | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/nopcollectd b/src/nopcollectd new file mode 100755 index 0000000..0f7c66e --- /dev/null +++ b/src/nopcollectd @@ -0,0 +1,75 @@ +#!/usr/bin/lua +-- +-- rhnop +-- +-- Copyright (C) 2011-2014 Christian Pointner <equinox@helsinki.at> +-- +-- This file is part of rhnop. +-- +-- rhnop is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- any later version. +-- +-- rhnop is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with rhnop. If not, see <http://www.gnu.org/licenses/>. +-- +-- +-- send now and next cart# and length to nopsyncd +-- this script should be called by the now/next macro cart +-- the arguments should be: now# nowlen next# nextlen +-- + +require "socket" + +package.path = package.path .. ";_rhnoplibdir_/?.lua" +db = require "db" + +if #arg < 1 then + io.stderr:write("too few parameters\n") + os.exit(1) +end + +conffile = "nopcollectd." .. arg[1] .. ".conf" +conf = require "conf" + +src_db = assert(db.init(conf.src_db, conf.src_user, conf.src_pwd, conf.src_host, conf.src_port, conf.src_table)) +dst_db = assert(db.init(conf.dst_db, conf.dst_user, conf.dst_pwd, conf.dst_host, conf.dst_port, conf.dst_table)) + +local sock = assert(socket.tcp()) +local ret, err = sock:connect(conf.sync_host, conf.sync_port) +if ret == nil then + print(err) + return 1 +end +print "connection established" + +local last = dst_db:getLastEntry() +print("last timestamp was " .. last) +local cur = assert(src_db:findMissingEntries(last)) +local cnt = 0 +while true do + local data = src_db:getNextMissingEntry(cur) + if data == nil then break end + local ret, err = dst_db:addEntry(data) + if ret == nil then print(err) end + cnt = cnt + 1 +end + +print("synced " .. cnt .. " Entries") + +while true do + local timestamp = sock:receive('*l') + if timestamp == nil then break end + data = assert(src_db:getEntry(timestamp)) + assert(dst_db:addEntry(data)) +end + +sock:close() + +return 0 |