feedback #7

Open
Norticus36 wants to merge 7 commits from feedback into master
14 changed files with 569 additions and 0 deletions

@ -21,6 +21,12 @@ mkdir -p /var/www/stream/token/tokendb
chown root:www-data /var/www/stream/publish/token/tokendb /var/www/stream/token/tokendb
chmod 775 /var/www/stream/publish/token/tokendb /var/www/stream/token/tokendb
mkdir -p /var/www/stream/feedback
mkdir -p /var/www/stream/currentlylive
mkdir -p /var/www/stream/paststats
chown root:www-data /var/www/stream/feedback /var/www/stream/currentlylive /var/www/stream/paststats
chmod 775 /var/www/stream/feedback /var/www/stream/currentlylive /var/www/stream/paststats
if [ ! -f /var/www/stream/legal.html ]; then
cp legal.html /var/www/stream/
fi
@ -60,6 +66,56 @@ if [ ! -f /var/www/stream/publish/token/gen_publish.cgi ]; then
chmod +x /var/www/stream/publish/token/gen_publish.cgi
fi
if [ ! -f /var/www/stream/feedback/feedback.html ]; then
cat feedback_index.html | sed 's/\$DOMAINNAME/'"$EL_DOMAINNAME"'/g' >/var/www/stream/feedback/index.html
fi
if [ ! -f /var/www/stream/feedback/streamstats.html ]; then
cat feedback_streamstats.html | sed 's/\$DOMAINNAME/'"$EL_DOMAINNAME"'/g' >/var/www/stream/feedback/streamstats.html
fi
if [ ! -f /var/www/stream/feedback/gettmp.js ]; then
cat feedback_gettmp.js | sed 's/\$DOMAINNAME/'"$EL_DOMAINNAME"'/g' >/var/www/stream/feedback/gettmp.js
fi
if [ ! -f /var/www/stream/feedback/gettmpstats.cgi ]; then
cat gettmpstats.cgi | sed 's/\$DOMAINNAME/'"$EL_DOMAINNAME"'/g' >/var/www/stream/feedback/gettmpstats.cgi
chmod +x /var/www/stream/feedback/gettmpstats.cgi
fi
if [ ! -f /var/www/stream/currentlylive/index.html ]; then
cat currentlylive_index.html | sed 's/\$DOMAINNAME/'"$EL_DOMAINNAME"'/g' >/var/www/stream/currentlylive/index.html
fi
if [ ! -f /var/www/stream/currentlylive/collecttmp.js ]; then
cat currentlylive_collecttmp.js | sed 's/\$DOMAINNAME/'"$EL_DOMAINNAME"'/g' >/var/www/stream/currentlylive/collecttmp.js
fi
if [ ! -f /var/www/stream/currentlylive/listoftmps.cgi ]; then
cat listoftmps.cgi | sed 's/\$DOMAINNAME/'"$EL_DOMAINNAME"'/g' >/var/www/stream/currentlylive/listoftmps.cgi
chmod +x /var/www/stream/currentlylive/listoftmps.cgi
fi
if [ ! -f /var/www/stream/paststats/index.html ]; then
cat paststats_index.html | sed 's/\$DOMAINNAME/'"$EL_DOMAINNAME"'/g' >/var/www/stream/paststats/index.html
fi
if [ ! -f /var/www/stream/paststats/datesetter.js ]; then
cat paststats_datesetter.js | sed 's/\$DOMAINNAME/'"$EL_DOMAINNAME"'/g' >/var/www/stream/paststats/datesetter.js
fi
if [ ! -f /var/www/stream/paststats/paststats.html ]; then
cat paststats_paststats.html | sed 's/\$DOMAINNAME/'"$EL_DOMAINNAME"'/g' >/var/www/stream/paststats/paststats.html
fi
if [ ! -f /var/www/stream/paststats/paststats.js ]; then
cat paststats_paststats.js | sed 's/\$DOMAINNAME/'"$EL_DOMAINNAME"'/g' >/var/www/stream/paststats/paststats.js
fi
if [ ! -f /var/www/stream/paststats/getviewers.cgi ]; then
cat getviewers.cgi | sed 's/\$DOMAINNAME/'"$EL_DOMAINNAME"'/g' >/var/www/stream/paststats/getviewers.cgi
chmod +x /var/www/stream/paststats/getviewers.cgi
fi
mkdir -p /var/log/nginx
mkdir -p /var/log/rtmp

@ -0,0 +1,76 @@
function init(){
refresh();
}
function refresh()
{
var myvar = setInterval(readlog, 5000)
}
function readlog() {
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
//document.getElementById("temptable").innerHTML=xmlhttp.responseText;
var str = xmlhttp.responseText;
var streams = str.split('\n')
streams.splice(0,5)
streams.splice(-3,3)
if (streams[0] === "*-tmp.log" && streams.length === 1)
{
document.getElementById("temptable").innerHTML="No streams are online at the moment."
document.getElementById("listofstreams").innerHTML = ""
}
else
{
for (i = 0; i < streams.length; i++)
{
if (streams[i].includes("-lq-tmp"))
{
streams.splice(i,1);
i--;
}
}
var table = document.getElementById("listofstreams")
table.innerHTML = ""
var row = table.insertRow(-1)
var c1 = row.insertCell(0)
var c2 = row.insertCell(1)
c1.innerHTML = "Stream name"
c2.innerHTML = "Track statistics"
for (i = 0; i < streams.length; i++)
{
var processTheName = streams[i].split("-")
var eacode = processTheName[1]
//console.log(eacode)
var table = document.getElementById("listofstreams")
var row = table.insertRow(-1)
var c1 = row.insertCell(0)
var c2 = row.insertCell(1)
c1.innerHTML = eacode
refLink = "../feedback/streamstats.html?code=" + eacode;
c2.innerHTML = "<a href=\"" + refLink + "\" target=\"blank\" rel=\"noopener noreferrer\">Link</a>"
}
document.getElementById("temptable").innerHTML=streams
}
//console.log(streams)
} else if (xmlhttp.readyState==4)
{
document.getElementById("temptable").innerHTML=(xmlhttp.status + xmlhttp.statusText);
}
}
xmlhttp.open("POST","listoftmps.cgi", true);
xmlhttp.send();
}
window.onload = init;

11
tmpl/currentlylive_index.html Executable file

@ -0,0 +1,11 @@
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script type="text/javascript" src="collecttmp.js"></script>
</head>
<body>
<div id="temptable">Loading...</div>
<table id="listofstreams">
</table>
</body>

58
tmpl/feedback_gettmp.js Executable file

@ -0,0 +1,58 @@
function init()
{
refresh();
}
function getEaCode()
{
var parameters = location.search.substring(1).split("&")
var temp = parameters[0].split("=");
lecturename = unescape(temp[1]);
//console.log(lecturename);
//var myvar = setInterval(readlog(lecturename), 1000)
readlog(lecturename);
}
function readlog(e) {
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var resp = xmlhttp.responseText;
resp = resp.substring(resp.indexOf("frame="))
if (resp.startsWith("frame="))
{
document.getElementById("testdiv").innerHTML = resp;
}
else
{
resp = resp.substring(resp.indexOf("The requested"))
if (resp.startsWith("The requested"))
{
document.getElementById("testdiv").innerHTML = resp;
}
else
{
document.getElementById("testdiv").innerHTML = "Stream is currently starting...";
}
}
//console.log(xmlhttp.responseText);
} else if (xmlhttp.readyState==4)
{
document.getElementById("testdiv").innerHTML=(xmlhttp.status + xmlhttp.statusText);
}
}
xmlhttp.open("POST","gettmpstats.cgi", true);
xmlhttp.setRequestHeader("eacode", e);
xmlhttp.send();
}
function refresh()
{
var myvar = setInterval(getEaCode, 1000)
}
window.onload = init;

16
tmpl/feedback_index.html Executable file

@ -0,0 +1,16 @@
<!DOCTYPE html>
<head>
<meta charset="utf-8">
</head>
<body>
<form action="streamstats.html" method="GET">
<input type="text" name="code" placeholder="eacode">
<input type="submit" value="Track">
</form>
<!--<input type="text" id="eakod">
<div id="testdiv"></div>
<button id="button1"></button>-->
</body>

8
tmpl/feedback_streamstats.html Executable file

@ -0,0 +1,8 @@
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script type="text/javascript" src="gettmp.js"></script>
</head>
<body>
<div id="testdiv">Loading...</div>
</body>

40
tmpl/gettmpstats.cgi Executable file

@ -0,0 +1,40 @@
#!/bin/sh
LOG_DIR="../../../log/"
EACODE="$HTTP_EACODE"
FILE=""$LOG_DIR"/ffmpeg/ffmpeg-"$EACODE"-tmp.log"
if test -f "$FILE" ; then
#lastline=$( tail -n 1 "$FILE" | head -n 1)
#https://stackoverflow.com/questions/22727107/how-to-find-the-last-field-using-cut
lastline=$( tail -n 1 "$FILE" | rev | cut -d'x' -f 2 | rev )
echo "HTTP/1.1 200 OK"
echo "Content-Type: text/html; charset=UTF-8"
echo "
<!DOCTYPE html>
<html>
<head>
</head>
<body>"
echo "$lastline"
echo "<br>"
#set $QUERY_STRING #(this prints all the headers)
echo "</body>
</html>"
else
echo "HTTP/1.1 200 OK"
echo "Content-Type: text/html; charset=UTF-8"
echo "
<!DOCTYPE html>
<html>
<head>
</head>
<body>"
echo "The requested stream is offline or does not exist."
echo "<br>"
echo "</body>
</html>"
fi
exit 0

32
tmpl/getviewers.cgi Executable file

@ -0,0 +1,32 @@
#!/bin/sh
LOG_DIR="../../../log/"
EACODE="$HTTP_EACODE"
DATE="$HTTP_DATESTRING"
FILE=""$LOG_DIR"/nginx/access.log"
if test -f "$FILE" ; then
accessforthiscode=$( grep "PLAY \"live.*\"" "$FILE" | grep "$EACODE" | cut -d':' -f 1 | grep "$DATE" | cut -d' ' -f 1)
browserplays=$( grep "GET /livehls.*/$EACODE.m3u8" "$FILE" | cut -d' ' -f 1,4 | grep "$DATE" | cut -d' ' -f 1)

Here, we should also take the LQ (low quality) streams into the count.

Here, we should also take the LQ (low quality) streams into the count.
echo "HTTP/1.1 200 OK"
echo "Content-Type: text/html; charset=UTF-8"
echo "
<!DOCTYPE html>
<html>
<head>
</head>
<body>"
echo "$accessforthiscode"
echo "$browserplays"
echo "</body>
</html>"
else
echo "HTTP/1.1 503 Service Unavailable"
fi
exit 0

39
tmpl/listoftmps.cgi Executable file

@ -0,0 +1,39 @@
#!/bin/sh
LOG_DIR="../../../log/"
#stackoverflow.com/questions/18884992/how-do-i-assign-ls-to-an-array-in-linux-bash
cd $LOG_DIR/ffmpeg
#TMPSTREAMS=$(ls -d *-tmp.log)
#shopt -s nullglob
#TMPSTREAMS=(*-tmp.log)
#shopt -u nullglob
#TMPSTREAMS=$(ls -d *-tmp.log)
##TMPSTREAMS=$(ls *nummod* )
##ARRAY=($TMPSTREAMS)
#MPSTREAMS=$(echo $TMPSTREAMS | cut -d'-' -f 2)
#stackoverflow.com/questions/12623064/listing-files-using-sh
set -- *-tmp.log
#set -- *analizis*
echo "HTTP/1.1 200 OK"
echo "Content-Type: text/html; charset=UTF-8"
echo "
<!DOCTYPE html>
<html>
<head>
</head>
<body>"
for filename; do
echo "${filename}"
done
##echo "${ARRAY[*]}"
#echo "$ARRAY"
#echo "$TMPSTREAMS"
echo "</body>
</html>"
exit 0

@ -0,0 +1,46 @@
function init()
{
document.getElementById("formsubmitter").onclick = checkAndSubmit;
}
function checkAndSubmit()
{
var eacode = document.getElementById("code").value;
var year = document.getElementById("year").value;
var month = document.getElementById("month").value;
var day = document.getElementById("day").value;
var isCorrect = 1;
document.getElementById("errorlog").innerHTML = ""
if (eacode == "")
{
document.getElementById("errorlog").innerHTML += "Code cannot be empty! "
isCorrect = 0;
}
if (isNaN(year) || year < 0 || year == "")
{
document.getElementById("errorlog").innerHTML += "Incorrect year format! "
isCorrect = 0;
}
if (isNaN(month) || month < 0 || month > 12 || month == "")
{
document.getElementById("errorlog").innerHTML += "Incorrect month format! "
isCorrect = 0;
}
if (isNaN(day) || day < 0 || day > 31 || month == "")
{
document.getElementById("errorlog").innerHTML += "Incorrect day format! "
isCorrect = 0;
}
if (isCorrect == 1)
{
document.getElementById("yearform").submit();
}
}
window.onload = init;

15
tmpl/paststats_index.html Normal file

@ -0,0 +1,15 @@
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script type="text/javascript" src="datesetter.js"></script>
</head>
<body>
<form action="paststats.html" method="GET" id="yearform">
Code: <br> <input type="text" name="code" id="code" placeholder="eacode"> <br>
Year: <br> <input type="text" name="year" id="year" placeholder="2020"> <br>
Month: <br> <input type="text" name="month" id="month" placeholder="09"> <br>
Day: <br> <input type="text" name="day" id="day" placeholder="21"> <br>
<button type="button" id="formsubmitter">Submit</button>
</form>
<div id="errorlog"></div>
</body>

@ -0,0 +1,8 @@
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script type="text/javascript" src="paststats.js"></script>
</head>
<body>
<div id="testdiv">Loading...</div>
</body>

110
tmpl/paststats_paststats.js Normal file

@ -0,0 +1,110 @@
function init()
{
loadStats()
}
function loadStats()
{
var parameters = location.search.substring(1).split("&")
var temp = parameters[0].split("=");
var lecturename = unescape(temp[1]);
var t2 = parameters[1].split("=");
var year = unescape(t2[1]);
var t3 = parameters[2].split("=");
var month = unescape(t3[1]);
var t4 = parameters[3].split("=");
var day = unescape(t4[1]);
var transformedDate = day
transformedDate += "/"
var b = 0;
switch(parseInt(month)) {
case 1:
transformedDate += "Jan/"
break;
case 2:
transformedDate += "Feb/"
break;
case 3:
transformedDate += "Mar/"
break;
case 4:
transformedDate += "Apr/"
break;
case 5:
transformedDate += "May/"
break;
case 6:
transformedDate += "Jun/"
break;
case 7:
transformedDate += "Jul/"
break;
case 8:
transformedDate += "Aug/"
break;
case 9:
transformedDate += "Sep/"
break;
case 10:
transformedDate += "Oct/"
break;
case 11:
transformedDate += "Nov/"
break;
case 12:
transformedDate += "Dec/"
break;
default:
b = 1;
document.getElementById("testdiv").innerHTML = "Error during processing month!"
}
transformedDate+= year;
if (b == 0)
{
lookForCode(lecturename, transformedDate);
}
}
function lookForCode(e, str) {
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var resp = xmlhttp.responseText;
var ip_raw_string = resp.split('\n')
ip_raw_string.splice(0,5)
ip_raw_string.splice(-3,3)
var ip_array = [];
var l = ip_raw_string.length;
if (l == 2 && ip_raw_string[0] == "" && ip_raw_string[1] == "")
{
document.getElementById("testdiv").innerHTML="No visits found for the specified code on the specified date!"
}
else
{
for (var i = 0; i < l; i++)
{
var ip = ip_raw_string[i];
//console.log(ip)
if ( !(ip_array.includes(ip)) )
{
ip_array.push(ip);
}
}
document.getElementById("testdiv").innerHTML=ip_array;
}
} else if (xmlhttp.readyState==4)
{
document.getElementById("testdiv").innerHTML=(xmlhttp.status + xmlhttp.statusText);
}
}
xmlhttp.open("POST","getviewers.cgi", true);
xmlhttp.setRequestHeader("eacode", e);
xmlhttp.setRequestHeader("datestring", str);
xmlhttp.send();
}
window.onload = init;

@ -9,6 +9,21 @@ server {
fastcgi_pass unix:/var/run/fcgiwrap.socket;
}
location = /feedback/gettmpstats.cgi {
include /etc/nginx/fastcgi.conf;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
}
location = /currentlylive/listoftmps.cgi {
include /etc/nginx/fastcgi.conf;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
}
location = /paststats/getviewers.cgi {
include /etc/nginx/fastcgi.conf;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
}
location / {
return 301 https://$host$request_uri;
}
@ -73,6 +88,45 @@ server {
$PUBLISHERAUTHSERVICE
}
location /feedback {
$PUBLISHERAUTHMESSA
$PUBLISHERAUTHSERVICE
}
location /currentlylive {
$PUBLISHERAUTHMESSA
$PUBLISHERAUTHSERVICE
}
location /paststats {
$PUBLISHERAUTHMESSA
$PUBLISHERAUTHSERVICE
}
location = /paststats/getviewers.cgi {
include /etc/nginx/fastcgi.conf;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include /etc/nginx/fastcgi_params;
$PUBLISHERAUTHMESSA
$PUBLISHERAUTHSERVICE
}
location = /feedback/gettmpstats.cgi {
include /etc/nginx/fastcgi.conf;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include /etc/nginx/fastcgi_params;
$PUBLISHERAUTHMESSA
$PUBLISHERAUTHSERVICE
}
location = /currentlylive/listoftmps.cgi {
include /etc/nginx/fastcgi.conf;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include /etc/nginx/fastcgi_params;
$PUBLISHERAUTHMESSA
$PUBLISHERAUTHSERVICE
}
location /publish/token {
deny all;
return 404;