summaryrefslogtreecommitdiff
path: root/src/daq
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2014-10-17 01:38:11 +0200
committerChristian Pointner <equinox@spreadspace.org>2014-10-17 01:38:11 +0200
commita70cb3ae11ef2b95e88308628bb8e66ba121282e (patch)
tree0c18f92abff2670dd7c8b4a9d41c4f3e5b8909dd /src/daq
parentadded 'Z' after each timestamp to state it's UTC (diff)
nginx-lua now stores log data into shared dict
Diffstat (limited to 'src/daq')
-rw-r--r--src/daq/nginx-lua/s5-nginx-fetch.lua42
-rw-r--r--src/daq/nginx-lua/s5-nginx-init.lua (renamed from src/daq/nginx-lua/s5-nginx.lua)33
-rw-r--r--src/daq/nginx-lua/s5-nginx-log.lua65
3 files changed, 124 insertions, 16 deletions
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 <equinox@spreadspace.org>
+-- Markus Grueneis <gimpf@gimpf.org>
+--
+-- 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 <http://www.gnu.org/licenses/>.
+--
+--
+-- 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.lua b/src/daq/nginx-lua/s5-nginx-init.lua
index 3db5201..9d6db84 100644
--- a/src/daq/nginx-lua/s5-nginx.lua
+++ b/src/daq/nginx-lua/s5-nginx-init.lua
@@ -32,23 +32,24 @@
--
-- Install this by adding the following to your nginx.conf
--
--- location /path/to/hls {
--- log_by_lua_file '/path/to/s5-nginx.lua';
+-- http {
+-- lua_shared_dict sfive 64m;
+-- init_by_lua_file '/path/to/s5-nginx-init.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)
+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 <equinox@spreadspace.org>
+-- Markus Grueneis <gimpf@gimpf.org>
+--
+-- 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 <http://www.gnu.org/licenses/>.
+--
+--
+-- 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