From a70cb3ae11ef2b95e88308628bb8e66ba121282e Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Fri, 17 Oct 2014 01:38:11 +0200 Subject: nginx-lua now stores log data into shared dict --- src/daq/nginx-lua/s5-nginx-fetch.lua | 42 +++++++++++++++++++++++ src/daq/nginx-lua/s5-nginx-init.lua | 55 ++++++++++++++++++++++++++++++ src/daq/nginx-lua/s5-nginx-log.lua | 65 ++++++++++++++++++++++++++++++++++++ src/daq/nginx-lua/s5-nginx.lua | 54 ------------------------------ 4 files changed, 162 insertions(+), 54 deletions(-) create mode 100644 src/daq/nginx-lua/s5-nginx-fetch.lua create mode 100644 src/daq/nginx-lua/s5-nginx-init.lua create mode 100644 src/daq/nginx-lua/s5-nginx-log.lua delete mode 100644 src/daq/nginx-lua/s5-nginx.lua (limited to 'src') diff --git a/src/daq/nginx-lua/s5-nginx-fetch.lua b/src/daq/nginx-lua/s5-nginx-fetch.lua new file mode 100644 index 0000000..90503de --- /dev/null +++ b/src/daq/nginx-lua/s5-nginx-fetch.lua @@ -0,0 +1,42 @@ +-- +-- sfive +-- +-- sfive - spreadspace streaming statistics suite is a generic +-- statistic collection tool for streaming server infrastuctures. +-- The system collects and stores meta data like number of views +-- and throughput from a number of streaming servers and stores +-- it in a global data store. +-- The data acquisition is designed to be generic and extensible in +-- order to support different streaming software. +-- sfive also contains tools and applications to filter and visualize +-- live and recorded data. +-- +-- +-- Copyright (C) 2014 Christian Pointner +-- Markus Grueneis +-- +-- This file is part of sfive. +-- +-- sfive is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License version 3 +-- as published by the Free Software Foundation. +-- +-- sfive 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 sfive. If not, see . +-- +-- +-- Install this by adding the following to your nginx.conf +-- +-- location /sfive { +-- content_by_lua_file '/path/to/s5-nginx-fetch.lua'; +-- } +-- + +ngx.say('Content-type: text/plain; charset=UTF-8') +ngx.say('') +ngx.say('sfive says hello world!') diff --git a/src/daq/nginx-lua/s5-nginx-init.lua b/src/daq/nginx-lua/s5-nginx-init.lua new file mode 100644 index 0000000..9d6db84 --- /dev/null +++ b/src/daq/nginx-lua/s5-nginx-init.lua @@ -0,0 +1,55 @@ +-- +-- sfive +-- +-- sfive - spreadspace streaming statistics suite is a generic +-- statistic collection tool for streaming server infrastuctures. +-- The system collects and stores meta data like number of views +-- and throughput from a number of streaming servers and stores +-- it in a global data store. +-- The data acquisition is designed to be generic and extensible in +-- order to support different streaming software. +-- sfive also contains tools and applications to filter and visualize +-- live and recorded data. +-- +-- +-- Copyright (C) 2014 Christian Pointner +-- Markus Grueneis +-- +-- This file is part of sfive. +-- +-- sfive is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License version 3 +-- as published by the Free Software Foundation. +-- +-- sfive 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 sfive. If not, see . +-- +-- +-- Install this by adding the following to your nginx.conf +-- +-- http { +-- lua_shared_dict sfive 64m; +-- init_by_lua_file '/path/to/s5-nginx-init.lua'; +-- } +-- + +ngx.log(ngx.DEBUG, "SFive: loaded") +local sfive = ngx.shared.sfive; +sfive:flush_all() +sfive:flush_expired() +local succ, err, forc = sfive:set("sem", 0) +if not succ then + ngx.log(ngx.ERR, "SFive: creating semaphore failed: " .. err) +else + local succ, err, forc = sfive:set("log_idx", 0) + if not succ then + ngx.log(ngx.ERR, "SFive: creating index failed: " .. err) + else + ngx.log(ngx.INFO, "SFive: initalized successfully!") + end +end diff --git a/src/daq/nginx-lua/s5-nginx-log.lua b/src/daq/nginx-lua/s5-nginx-log.lua new file mode 100644 index 0000000..f81bb8e --- /dev/null +++ b/src/daq/nginx-lua/s5-nginx-log.lua @@ -0,0 +1,65 @@ +-- +-- sfive +-- +-- sfive - spreadspace streaming statistics suite is a generic +-- statistic collection tool for streaming server infrastuctures. +-- The system collects and stores meta data like number of views +-- and throughput from a number of streaming servers and stores +-- it in a global data store. +-- The data acquisition is designed to be generic and extensible in +-- order to support different streaming software. +-- sfive also contains tools and applications to filter and visualize +-- live and recorded data. +-- +-- +-- Copyright (C) 2014 Christian Pointner +-- Markus Grueneis +-- +-- This file is part of sfive. +-- +-- sfive is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License version 3 +-- as published by the Free Software Foundation. +-- +-- sfive 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 sfive. If not, see . +-- +-- +-- Install this by adding the following to your nginx.conf +-- +-- location /path/to/hls { +-- log_by_lua_file '/path/to/s5-nginx-log.lua'; +-- } +-- + +local status = ngx.var.status + +if status == '200' or status == '206' then + local sfive = ngx.shared.sfive; + local idx, err = sfive:incr("log_idx", 1) + if not idx then + ngx.log(ngx.ERR, "SFive: incrementing index failed: " .. err) + else + local json = '{' + json = json .. '"time": "' .. string.gsub(ngx.utctime(), " ", "T", 1) .. '",' + json = json .. '"client": "' .. ngx.var.remote_addr .. '",' + json = json .. '"port": ' .. ngx.var.remote_port .. ',' + json = json .. '"ua": "' .. ngx.var.http_user_agent .. '",' + json = json .. '"uri": "' .. ngx.var.uri .. '",' + json = json .. '"status": ' .. status .. ',' + json = json .. '"bytes_sent": ' .. ngx.var.bytes_sent + json = json .. '}' + + local succ, err, forc = sfive:add("log_" .. idx, json, 600) + if not succ then + ngx.log(ngx.ERR, "SFive: adding log line (log_" .. idx ") to shared dict: " .. err) + elseif forc then + ngx.log(ngx.WARN, "SFive: adding log line has overwritten other log lines - consider increasing the shared dict") + end + end +end diff --git a/src/daq/nginx-lua/s5-nginx.lua b/src/daq/nginx-lua/s5-nginx.lua deleted file mode 100644 index 3db5201..0000000 --- a/src/daq/nginx-lua/s5-nginx.lua +++ /dev/null @@ -1,54 +0,0 @@ --- --- sfive --- --- sfive - spreadspace streaming statistics suite is a generic --- statistic collection tool for streaming server infrastuctures. --- The system collects and stores meta data like number of views --- and throughput from a number of streaming servers and stores --- it in a global data store. --- The data acquisition is designed to be generic and extensible in --- order to support different streaming software. --- sfive also contains tools and applications to filter and visualize --- live and recorded data. --- --- --- Copyright (C) 2014 Christian Pointner --- Markus Grueneis --- --- This file is part of sfive. --- --- sfive is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License version 3 --- as published by the Free Software Foundation. --- --- sfive 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 sfive. If not, see . --- --- --- Install this by adding the following to your nginx.conf --- --- location /path/to/hls { --- log_by_lua_file '/path/to/s5-nginx.lua'; --- } --- - -local status = ngx.var.status - -if status == '200' or status == '206' then - local json = '{' - json = json .. '"time": "' .. string.gsub(ngx.utctime(), " ", "T", 1) .. '",' - json = json .. '"client": "' .. ngx.var.remote_addr .. '",' - json = json .. '"port": ' .. ngx.var.remote_port .. ',' - json = json .. '"ua": "' .. ngx.var.http_user_agent .. '",' - json = json .. '"uri": "' .. ngx.var.uri .. '",' - json = json .. '"status": ' .. status .. ',' - json = json .. '"bytes_sent": ' .. ngx.var.bytes_sent - json = json .. '}' - - ngx.log(ngx.ERR, json) -end -- cgit v1.2.3