From 46348e1cd2782a701134b030be7452910ba2c46e Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Mon, 21 Mar 2011 15:27:07 +0000 Subject: moved sqlite based tempstorage to mysql based playlog diff --git a/nopsyncd/playlog.lua b/nopsyncd/playlog.lua new file mode 100644 index 0000000..3aa0361 --- /dev/null +++ b/nopsyncd/playlog.lua @@ -0,0 +1,89 @@ +-- +-- rhnop +-- +-- Copyright (C) 2011 Christian Pointner +-- +-- 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 . +-- + +require "luasql.mysql" + +-- CREATE DATABASE rhnop +-- GRANT select,insert,update ON rhnop.* TO 'nopsyncd' IDENTIFIED BY '123456'; +-- CREATE TABLE IF NOT EXISTS now (timestamp VARCHAR(16) PRIMARY KEY NOT NULL, cart INT NOT NULL, len INT, showtitle VARCHAR(255), title VARCHAR(255), artist VARCHAR(255), album VARCHAR(255), ismusic BOOLEAN) + +local playlog = {} + +function playlog:init() + local err + + self.env, err = luasql.mysql() + if self.env == nil then + return nil, err + end + + self.con, err = self.env:connect("rhnop", "nopsyncd", "123456", "127.0.0.1") + if self.con == nil then + return nil, err + end + + local ret, err = self.con:setautocommit(true) + if ret == nil then + return nil, err + end + + return true +end + +function playlog:getLastCart() + local cur, err = self.con:execute("SELECT cart FROM now WHERE timestamp = (SELECT MAX(timestamp) FROM now)") + if cur == nil then + return nil, err + end + + local cart = cur:fetch() + if cart == nil then cart = 0 end + return cart +end + +function playlog:insertMusic(timestamp, cart, len, title, artist, album) + cart = tonumber(cart) + len = tonumber(len) + if cart < 400000 or cart > 450000 then + poolnum = 0 + else + poolnum = math.floor(cart/1000) - 399 + end + -- usage of undocumented escape function... + local cur, err = self.con:execute("INSERT into now VALUES(" .. self.con:escape(timestamp) .. ", " .. cart .. ", " .. len .. ", 'Musikpool " .. poolnum .. "', '" .. self.con:escape(title) .. "', '" .. self.con:escape(artist) .."', '" .. self.con:escape(album) .. "', 1)") + if cur == nil then + return nil, err + end + + return true +end + +function playlog:close() + if self.con then + self.con:close() + end + + if self.env then + self.env:close() + end +end + +return playlog diff --git a/nopsyncd/qlistener.lua b/nopsyncd/qlistener.lua index 1e02df2..753902d 100755 --- a/nopsyncd/qlistener.lua +++ b/nopsyncd/qlistener.lua @@ -23,7 +23,7 @@ local queue_name = "/rhnop" local last_cart = nil mq = require "luamq" -tempstorage = require "tempstorage" +playlog = require "playlog" rddb = require "rddb" function handle_now(timestamp, nowcart, nowlen) @@ -32,7 +32,7 @@ function handle_now(timestamp, nowcart, nowlen) io.stderr:write("can't fetch cart info: " .. err .. "\n") else -- print(timestamp .. " Info: '" .. results.TITLE .. "' von '" .. results.ARTIST .. "' aus '" .. results.ALBUM .. "'") - local ret, err = tempstorage:insertMusic(timestamp, nowcart, nowlen, results.TITLE, results.ARTIST, results.ALBUM) + local ret, err = playlog:insertMusic(timestamp, nowcart, nowlen, results.TITLE, results.ARTIST, results.ALBUM) if ret == nil then io.stderr:write("can't insert music info: " .. err .. "\n") else @@ -62,17 +62,17 @@ function main_loop() os.exit(1) end - local ret, err = tempstorage:init() + local ret, err = playlog:init() if ret == nil then - io.stderr:write("creation of tempstorage failed: " .. err .. "\n") + io.stderr:write("creation of playlog failed: " .. err .. "\n") os.exit(1) end - last_cart = assert(tempstorage:getLastCart()) + last_cart = assert(playlog:getLastCart()) local ret, err = rddb:init() if ret == nil then io.stderr:write("opening rivendell db failed: " .. err .. "\n") - tempstorage:close() + playlog:close() os.exit(1) end @@ -81,7 +81,7 @@ function main_loop() if msg == nil then io.stderr:write("recv error: " .. prio .. "\n") rddb:close() - tempstorage:close() + playlog:close() os.exit(2) end handle_message(msg) diff --git a/nopsyncd/rddb.lua b/nopsyncd/rddb.lua index 56c73b7..e7ed14e 100644 --- a/nopsyncd/rddb.lua +++ b/nopsyncd/rddb.lua @@ -32,7 +32,7 @@ function rddb:init() end -- TODO: read /etc/rd.conf for connection info - self.con, err = self.env:connect("rivendell", "rivendellro", "lldrivenro", "192.168.1.16") + self.con, err = self.env:connect("rivendell", "rivendellro", "lldrivenro", "127.0.0.1") if self.con == nil then return nil, err end diff --git a/nopsyncd/tcpserver.lua b/nopsyncd/tcpserver.lua index 3f7c70a..7530ff2 100755 --- a/nopsyncd/tcpserver.lua +++ b/nopsyncd/tcpserver.lua @@ -20,7 +20,7 @@ -- require "socket" -tempstorage = require "tempstorage" +playlog = require "playlog" function init_server() local server = assert(socket.tcp()) @@ -86,9 +86,9 @@ end function main_loop() local pipefd = pipe.getreadfd() - local ret, err = tempstorage:init() + local ret, err = playlog:init() if ret == nil then - io.stderr:write("creation of tempstorage failed: " .. err .. "\n") + io.stderr:write("creation of playlog failed: " .. err .. "\n") os.exit(1) end @@ -133,7 +133,7 @@ function main_loop() end end - tempstorage:close() + playlog:close() server:close() cleanup_clients() diff --git a/nopsyncd/tempstorage.lua b/nopsyncd/tempstorage.lua deleted file mode 100644 index 4ae437a..0000000 --- a/nopsyncd/tempstorage.lua +++ /dev/null @@ -1,90 +0,0 @@ --- --- rhnop --- --- Copyright (C) 2011 Christian Pointner --- --- 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 . --- - -require "luasql.sqlite3" - -local tempstorage = {} - -function tempstorage:init() - local err - - self.env, err = luasql.sqlite3() - if self.env == nil then - return nil, err - end - - self.con, err = self.env:connect("nopsync.db") - if self.con == nil then - return nil, err - end - - local ret, err = self.con:setautocommit(true) - if ret == nil then - return nil, err - end - - local rows, err = self.con:execute("CREATE TABLE IF NOT EXISTS now (timestamp VARCHAR(16) PRIMARY KEY ASC NOT NULL, cart INT NOT NULL, len INT, showtitle VARCHAR(255), title VARCHAR(255), artist VARCHAR(255), album VARCHAR(255), ismusic BOOLEAN)") - if rows == nil then - return nil, err - end - - return true -end - -function tempstorage:getLastCart() - local cur, err = self.con:execute("SELECT cart from (SELECT cart,timestamp,MAX(timestamp) AS tsmax FROM now) where timestamp = tsmax") - if cur == nil then - return nil, err - end - - local cart = cur:fetch() - if cart == nil then cart = 0 end - return cart -end - -function tempstorage:insertMusic(timestamp, cart, len, title, artist, album) - cart = tonumber(cart) - len = tonumber(len) - if cart < 400000 or cart > 450000 then - poolnum = 0 - else - poolnum = math.floor(cart/1000) - 399 - end - -- usage of undocumented escape function... - local cur, err = self.con:execute("INSERT into now VALUES(" .. self.con:escape(timestamp) .. ", " .. cart .. ", " .. len .. ", 'Musikpool " .. poolnum .. "', '" .. self.con:escape(title) .. "', '" .. self.con:escape(artist) .."', '" .. self.con:escape(album) .. "', 1)") - if cur == nil then - return nil, err - end - - return true -end - -function tempstorage:close() - if self.con then - self.con:close() - end - - if self.env then - self.env:close() - end -end - -return tempstorage -- cgit v0.10.2