diff options
Diffstat (limited to 'src/nopsyncd')
-rwxr-xr-x | src/nopsyncd | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/nopsyncd b/src/nopsyncd new file mode 100755 index 0000000..f67f2c4 --- /dev/null +++ b/src/nopsyncd @@ -0,0 +1,70 @@ +#!/usr/bin/lua +-- +-- rhnop +-- +-- Copyright (C) 2011-2015 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/>. +-- + +socket = require "socket" + +package.path = package.path .. ";_rhnoplibdir_/?.lua" +db = require "db" +conf = require "conf" + +if #arg < 1 then + io.stderr:write("too few parameters\n") + os.exit(1) +end + +local cnf = conf.load("_rhnopescdir_/nopsyncd." .. arg[1] .. ".conf") + +src_db = assert(db.init(cnf.src_db, cnf.src_user, cnf.src_pwd, cnf.src_host, cnf.src_port, cnf.src_table)) +dst_db = assert(db.init(cnf.dst_db, cnf.dst_user, cnf.dst_pwd, cnf.dst_host, cnf.dst_port, cnf.dst_table)) + +local sock = assert(socket.tcp()) +local ret, err = sock:connect(cnf.sync_host, cnf.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 |