summaryrefslogtreecommitdiff
path: root/src/nopsyncd
diff options
context:
space:
mode:
Diffstat (limited to 'src/nopsyncd')
-rwxr-xr-xsrc/nopsyncd70
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