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