Add auto-generated channel stats [beta]
This commit is contained in:
parent
2e361e2d9e
commit
f7726b1de1
23
Dockerfile
23
Dockerfile
|
@ -7,15 +7,36 @@ RUN useradd --create-home --groups sudo admin ; echo "admin:admin" | chpasswd ;
|
||||||
RUN useradd --create-home znc ; echo "znc:znc" | chpasswd
|
RUN useradd --create-home znc ; echo "znc:znc" | chpasswd
|
||||||
|
|
||||||
# Install sshd, znc, and znc extras
|
# Install sshd, znc, and znc extras
|
||||||
RUN mkdir /var/run/sshd ; apt-get update ; apt-get install -y supervisor vim openssh-server znc znc-python znc-dev dpkg-dev
|
RUN mkdir /var/run/sshd ; apt-get update ; apt-get install -y supervisor vim openssh-server znc znc-python znc-dev dpkg-dev pisg nginx-light
|
||||||
|
|
||||||
# Get ZNC source
|
# Get ZNC source
|
||||||
RUN su -c 'cd /home/znc ; apt-get source znc' znc
|
RUN su -c 'cd /home/znc ; apt-get source znc' znc
|
||||||
|
|
||||||
|
# Set nginx workers to a low number
|
||||||
|
RNN sed -i -e"s/^worker_processes\s*4/worker_processes 1/" /etc/nginx/nginx.conf
|
||||||
|
# Set nginx user to ZNC user
|
||||||
|
RUN sed -i -e"s/^user\s*www\-data/user znc/" /etc/nginx/nginx.conf
|
||||||
|
# Set nginx root
|
||||||
|
RUN sed -i -e"s/^\s*root\s*\/usr\/share\/nginx\/html/ root \/home\/znc\/pisg\/output/" /etc/nginx/sites-enabled/default
|
||||||
|
# Make pisg root
|
||||||
|
RUN su -c "mkdir /home/znc/pisg ; mkdir /home/znc/pisg/output ; mkdir /home/znc/pisg/config" znc
|
||||||
|
# Turn off nginx daemon
|
||||||
|
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
|
||||||
|
# Install crontab
|
||||||
|
COPY crontab /tmp/
|
||||||
|
RUN crontab -u znc /tmp/crontab
|
||||||
|
RUN rm /tmp/crontab
|
||||||
|
# Install stuff for log generation
|
||||||
|
RUN mkdir /home/znc/pisg /home/znc/pisg/cache /home/znc/pisg/output
|
||||||
|
COPY pisg.py /home/znc/pisg/
|
||||||
|
RUN chmod +x /home/znc/pisg/pisg.py
|
||||||
|
|
||||||
# Install startup stuff
|
# Install startup stuff
|
||||||
COPY daemons.conf /etc/supervisor/conf.d/daemons.conf
|
COPY daemons.conf /etc/supervisor/conf.d/daemons.conf
|
||||||
COPY start /start
|
COPY start /start
|
||||||
RUN chmod +x /start
|
RUN chmod +x /start
|
||||||
|
|
||||||
|
# Ports
|
||||||
|
EXPOSE 80
|
||||||
EXPOSE 22
|
EXPOSE 22
|
||||||
|
|
||||||
|
|
|
@ -9,3 +9,11 @@ autorestart=true
|
||||||
command=su -c "/usr/bin/znc --foreground" znc
|
command=su -c "/usr/bin/znc --foreground" znc
|
||||||
autorestart=true
|
autorestart=true
|
||||||
|
|
||||||
|
[program:cron]
|
||||||
|
command=/usr/sbin/cron -f
|
||||||
|
autorestart=true
|
||||||
|
|
||||||
|
[program:nginx]
|
||||||
|
command=/usr/sbin/nginx
|
||||||
|
autorestart=true
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
server {
|
||||||
|
listen 80 default_server;
|
||||||
|
listen [::]:80 default_server ipv6only=on;
|
||||||
|
root /home/znc/pisg/output;
|
||||||
|
index index.html index.htm;
|
||||||
|
server_name localhost;
|
||||||
|
location / {
|
||||||
|
autoindex on;
|
||||||
|
try_files $uri $uri/ =404;
|
||||||
|
}
|
||||||
|
location /gfx/ {
|
||||||
|
alias /usr/share/pisg/gfx/;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,77 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import subprocess
|
||||||
|
from os import listdir,unlink,chdir
|
||||||
|
from os.path import exists
|
||||||
|
from sys import exit
|
||||||
|
from random import randint
|
||||||
|
|
||||||
|
class logfile:
|
||||||
|
def __init__(self, username, network, channel):
|
||||||
|
self.username = username
|
||||||
|
self.network = network
|
||||||
|
self.channel = channel
|
||||||
|
self.path = "/home/znc/.znc/users/%s/moddata/log/%s_%s" % (self.username, self.network, self.channel)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return "<logfile username=%s network=%s channel=%s path=%s>" % (self.username, self.network, self.channel, self.path)
|
||||||
|
|
||||||
|
def generate_config(self):
|
||||||
|
return """<set ShowMostActiveByHour="1">
|
||||||
|
<set ShowMostActiveByHourGraph="1">
|
||||||
|
<set ActiveNicksByHour="15">
|
||||||
|
<set ShowTime="1">
|
||||||
|
<set ShowLines="0">
|
||||||
|
<set ShowWpl="1">
|
||||||
|
<set ShowWords="1">
|
||||||
|
<set ShowLineTime="0">
|
||||||
|
<set ShowSmileys="1">
|
||||||
|
<set ShowKarma="1">
|
||||||
|
<set KarmaHistory="15">
|
||||||
|
<set TopicHistory="25">
|
||||||
|
<set PicLocation="gfx">
|
||||||
|
<set UserPics="1">
|
||||||
|
<set ActiveNicks="50">
|
||||||
|
<set CacheDir="/home/znc/pisg/cache">
|
||||||
|
<set FoulWords="shit piss fuck cunt cocksucker motherfucker tits fag faggot nigger">
|
||||||
|
|
||||||
|
<channel="%(channel)s">
|
||||||
|
Logfile = "%(logdir)s_*.log"
|
||||||
|
Format = "energymech"
|
||||||
|
Network = "%(network)s"
|
||||||
|
OutputFile = "/home/znc/pisg/output/%(username)s_%(network)s_%(channel)s.html"
|
||||||
|
</channel>""" % {"logdir":self.path, "network":self.network, "channel":self.channel, "username":self.username}
|
||||||
|
|
||||||
|
def run_pisg(self):
|
||||||
|
configname = "config.%s" % str(randint(0,10000))
|
||||||
|
open(configname, "w").write(self.generate_config())
|
||||||
|
proc = subprocess.Popen(['pisg',"-co", configname], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
print(self.path +": "+str(proc.communicate()))
|
||||||
|
unlink(configname)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
chdir("/home/znc/pisg")
|
||||||
|
logs = []
|
||||||
|
for user in listdir("/home/znc/.znc/users/"):
|
||||||
|
if not exists("/home/znc/.znc/users/%s/moddata/log/" % user):
|
||||||
|
continue
|
||||||
|
|
||||||
|
networks = {}
|
||||||
|
|
||||||
|
for fname in listdir("/home/znc/.znc/users/%s/moddata/log/" % user):
|
||||||
|
network, parts = fname.split("_", 1)
|
||||||
|
if not network in networks:
|
||||||
|
networks[network]=[]
|
||||||
|
channel, parts = parts.rsplit("_", 1)
|
||||||
|
if "#" in channel and not channel in networks[network]:
|
||||||
|
networks[network].append(channel)
|
||||||
|
|
||||||
|
print(user)
|
||||||
|
print(networks)
|
||||||
|
for network in networks:
|
||||||
|
for channel in networks[network]:
|
||||||
|
logs.append(logfile(user, network, channel))
|
||||||
|
|
||||||
|
for log in logs:
|
||||||
|
log.run_pisg()
|
||||||
|
|
Loading…
Reference in New Issue