ZNC in a container
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
2.9 KiB

#!/usr/bin/env python3
import subprocess
from os import listdir,unlink,chdir,mkdir
from os.path import exists
from os.path import join as pj
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 = "/srv/znc/users/%s/moddata/log/%s_%s" % (self.username, self.network, self.channel)
self.pisg_pub = "/srv/znc/caches/pisg-web"
self.pisg_cache = "/srv/znc/caches/pisg"
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="1">
<set ShowWpl="1">
<set ShowWords="1">
<set ShowLineTime="1">
<set ShowSmileys="1">
<set ShowKarma="1">
<set KarmaHistory="15">
<set TopicHistory="25">
<set PicLocation="/gfx">
<set UserPics="1">
<set ActiveNicks="50">
<set CacheDir="%(pisgcache)s">
<set UrlHistory="25">
Logfile = "%(logdir)s_*.log"
Format = "energymech"
Network = "%(network)s"
OutputFile = "%(pisgpub)s/%(username)s/%(network)s/%(channel)s.html"
</channel>""" % {"logdir":self.path, "network":self.network, "channel":self.channel, "username":self.username, "pisgpub":self.pisg_pub, "pisgcache": self.pisg_cache}
def run_pisg(self):
if not exists(pj(self.pisg_pub, self.username)):
mkdir(pj(self.pisg_pub, self.username))
if not exists(pj(self.pisg_pub, self.username, self.network)):
mkdir(pj(self.pisg_pub, self.username, self.network))
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()))
if __name__ == "__main__":
logs = []
for user in listdir("/srv/znc/users/"):
if not exists("/srv/znc/users/%s/moddata/log/" % user):
networks = {}
for fname in listdir("/srv/znc/users/%s/moddata/log/" % user):
network, parts = fname.split("_", 1)
if not network in networks:
channel, parts = parts.rsplit("_", 1)
if "#" in channel and not channel in networks[network]:
for network in networks:
for channel in networks[network]:
logs.append(logfile(user, network, channel))
for log in logs: