diff options
Diffstat (limited to 'weblog-model.lua')
-rw-r--r-- | weblog-model.lua | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/weblog-model.lua b/weblog-model.lua index 5cced4b..1d67739 100644 --- a/weblog-model.lua +++ b/weblog-model.lua @@ -20,10 +20,10 @@ local config = format.parse_ini_file(configcontent, "") or {} local database_creation_script = { "CREATE TABLE dbhistlog (logdatetime timestamp(0) without time zone NOT NULL, msgtext text)", - "CREATE TABLE pubblocklog(sourcename character varying(40), clientip inet NOT NULL, clientuserid character varying(64) NOT NULL, logdatetime timestamp(3) without time zone NOT NULL, uri text NOT NULL, bytes integer NOT NULL, reason text, score integer)", - "CREATE TABLE blocklog(sourcename character varying(40), clientip inet NOT NULL, clientuserid character varying(64) NOT NULL, logdatetime timestamp(0) without time zone NOT NULL, uri text NOT NULL, bytes integer NOT NULL, reason text, score integer)", - "CREATE TABLE pubweblog(sourcename character varying(40), clientip inet NOT NULL, clientuserid character varying(64) NOT NULL, logdatetime timestamp(3) without time zone NOT NULL, uri text NOT NULL, bytes integer NOT NULL, reason text, score integer)", - "CREATE TABLE weblog(sourcename character varying(40), clientip inet NOT NULL, clientuserid character varying(64) NOT NULL, logdatetime timestamp(3) without time zone NOT NULL, uri text NOT NULL, bytes integer NOT NULL, reason text, score integer)", + "CREATE TABLE pubblocklog(sourcename character varying(40), clientip inet NOT NULL, clientuserid character varying(64) NOT NULL, logdatetime timestamp(3) without time zone NOT NULL, uri text NOT NULL, bytes integer NOT NULL, reason text, score integer, shortreason text)", + "CREATE TABLE blocklog(sourcename character varying(40), clientip inet NOT NULL, clientuserid character varying(64) NOT NULL, logdatetime timestamp(0) without time zone NOT NULL, uri text NOT NULL, bytes integer NOT NULL, reason text, score integer, shortreason text)", + "CREATE TABLE pubweblog(sourcename character varying(40), clientip inet NOT NULL, clientuserid character varying(64) NOT NULL, logdatetime timestamp(3) without time zone NOT NULL, uri text NOT NULL, bytes integer NOT NULL, reason text, score integer, shortreason text)", + "CREATE TABLE weblog(sourcename character varying(40), clientip inet NOT NULL, clientuserid character varying(64) NOT NULL, logdatetime timestamp(3) without time zone NOT NULL, uri text NOT NULL, bytes integer NOT NULL, reason text, score integer, shortreason text)", "CREATE TABLE source (sourcename character varying(40) NOT NULL, method character varying(100) NOT NULL, userid character varying(32), passwd character varying(255), source character varying(255) NOT NULL, tzislocal boolean, enabled boolean)", "CREATE TABLE usagestat (sourcename character varying(40) NOT NULL, date timestamp(0) without time zone NOT NULL, numrequest integer, numblock integer)", "CREATE TABLE watchlist (clientuserid character varying(64) NOT NULL, expiredatetime timestamp(0) without time zone NOT NULL)", @@ -41,12 +41,12 @@ local database_creation_script = { "CREATE INDEX weblogclientidx ON weblog USING btree (clientip, clientuserid)", "CREATE INDEX weblogclientipidx ON weblog USING btree (clientip)", "CREATE INDEX weblogclientuserididx ON weblog USING btree (clientuserid)", - "GRANT SELECT ON dbhistlog TO webloguser", - "GRANT SELECT ON pubblocklog TO webloguser", - "GRANT SELECT ON pubweblog TO webloguser", - "GRANT SELECT, UPDATE, INSERT, DELETE ON source TO webloguser", - "GRANT SELECT ON usagestat TO webloguser", - "GRANT SELECT, UPDATE, INSERT, DELETE ON watchlist TO webloguser", + "GRANT SELECT ON dbhistlog TO "..DatabaseUser, + "GRANT SELECT ON pubblocklog TO "..DatabaseUser, + "GRANT SELECT ON pubweblog TO "..DatabaseUser, + "GRANT SELECT, UPDATE, INSERT, DELETE ON source TO "..DatabaseUser, + "GRANT SELECT ON usagestat TO "..DatabaseUser, + "GRANT SELECT, UPDATE, INSERT, DELETE ON watchlist TO "..DatabaseUser, } -- ################################################################################ @@ -189,9 +189,9 @@ end local importdglog = function(logentries, sourcename) for i,entry in pairs(logentries) do - local sql = string.format("INSERT INTO blocklog VALUES ('%s', '0.0.0.0', '%s', '%s', '%s', '%s', '%s', '%s')", - escape(sourcename), escape(entry.clientuserid:lower()), escape(entry.logdatetime), - escape(entry.URL), escape(entry.bytes), escape(entry.reason), escape(entry.score or "0")) + local sql = string.format("INSERT INTO blocklog VALUES ('%s', '0.0.0.0', '%s', '%s', '%s', '%s', '%s', '%s', '%s')", + escape(sourcename), escape(entry.clientuserid:lower()), escape(entry.logdatetime), escape(entry.URL), + escape(entry.bytes), escape(entry.reason), escape(entry.score or "0"), escape(entry.shortreason)) local res = assert (con:execute(sql)) end end @@ -277,7 +277,7 @@ end local importpubweblog = function() -- Merge equal blocks into weblog sql = "update weblog set reason=blocklog.reason, " .. - "score=blocklog.score from blocklog where " .. + "score=blocklog.score, shortreason=blocklog.shortreason from blocklog where " .. "blocklog.logdatetime >= date_trunc('second', weblog.logdatetime) and " .. "blocklog.logdatetime < (weblog.logdatetime + INTERVAL '45' second) and " .. "blocklog.sourcename=weblog.sourcename and ".. @@ -436,7 +436,7 @@ local listlogentries = function(logname, clientuserid, starttime, endtime, clien cur = assert (con:execute(sql)) row = cur:fetch ({}, "a") while row do - entries[#entries+1] = {sourcename=row.sourcename, clientip=row.clientip, clientuserid=row.clientuserid, logdatetime=row.logdatetime, uri=row.uri, bytes=row.bytes, reason=row.reason, score=row.score} + entries[#entries+1] = {sourcename=row.sourcename, clientip=row.clientip, clientuserid=row.clientuserid, logdatetime=row.logdatetime, uri=row.uri, bytes=row.bytes, reason=row.reason, score=row.score, shortreason=row.shortreason} row = cur:fetch (row, "a") end -- close everything @@ -544,15 +544,15 @@ end local parsedglog = function(logdata) local logentries = {} for line in string.gmatch(logdata, "[^\n]+") do - local words = {} - for word in string.gmatch(line, "[^\t]+") do - words[#words+1] = word + local words = format.string_to_table(line, "\t") + local logentry = {logdatetime=words[1], clientuserid=words[2], clientip=words[3], URL=words[4], reason=words[5], method=words[6], bytes=words[7], shortreason=words[9]} + if logentry.reason ~= "" then + if logentry.shortreason == "" then logentry.shortreason = logentry.reason end + logentry.score = string.match(logentry.reason, "^.*: ([0-9]*) ") + logentry.logdatetime = string.gsub(logentry.logdatetime, "%.", "-") + + logentries[#logentries+1] = logentry end - local logentry = {logdatetime=words[1], clientuserid=words[2], clientip=words[3], URL=words[4], reason=words[5], method=words[6], bytes=words[7]} - logentry.score = string.match(logentry.reason, "^.*: ([0-9]*) ") - logentry.logdatetime = string.gsub(logentry.logdatetime, "%.", "-") - - logentries[#logentries+1] = logentry end return logentries end |