Merge branch 'master' of 89.22.98.13:2012/brathuhn

master
fbr 14 years ago
commit a10cf3dad3
  1. 15
      main.py
  2. 63
      modules/active/logger.py
  3. 25
      sys/brathuhn.py
  4. 73
      sys/demonize.py
  5. 2
      sys/s5b.py

@ -2,16 +2,19 @@
# -*- coding: utf-8 -*-
import sys, os
cwd = os.getcwd()
sys.path.append(os.path.join(cwd,"sys"))
sys.path.append(os.path.join(cwd,"modules","active"))
import brathuhn
import demonize, brathuhn
#Demonize
if not demonize.demonize('./pid',False,'log.txt'):
sys.stderr.write("Daemon already running")
sys.exit(1)
#Inport modules
modules = []
files = os.listdir( os.path.join(cwd,"modules","active") )
for f in files:
if f.endswith(".py"):
mod = f[:-3]
@ -19,10 +22,14 @@ for f in files:
mod = f[:-4]
if not mod in modules:
modules.append(mod)
for mod in modules:
__import__(mod)
print "PID:", os.getpid()
#Start Brathuhn
brathuhn.connect_and_join()
brathuhn.loop()

@ -1,11 +1,18 @@
import brathuhn, tempfile
import brathuhn, tempfile, datetime, time
from StringIO import StringIO
user_logs = dict()
def get_log(msg,args):
if msg.getFrom() in user_logs:
user_logs[msg.getFrom()].seek(0)
log = user_logs[msg.getFrom()].read()
fd = StringIO(log)
brathuhn.sendFileStream(msg.getFrom(),len(log),"log.txt",fd)
else:
brathuhn.sendMsg(msg.getFrom(),"I'm currently not logging for you")
def show_log(msg,args):
if len(args)!=1:
brathuhn.sendMsg(msg.getFrom(),"Usage: !"+args[0])
return
if msg.getFrom() in user_logs:
user_logs[msg.getFrom()].seek(0)
log = user_logs[msg.getFrom()].read()
@ -13,10 +20,7 @@ def show_log(msg,args):
else:
brathuhn.sendMsg(msg.getFrom(),"I'm currently not logging for you")
def del_log(msg,args):
if len(args)!=1:
brathuhn.sendMsg(msg.getFrom(),"Usage: !"+args[0])
return
def delete_log(msg,args):
if msg.getFrom() in user_logs:
user_logs[msg.getFrom()].seek(0)
user_logs[msg.getFrom()].truncate(0)
@ -25,28 +29,31 @@ def del_log(msg,args):
brathuhn.sendMsg(msg.getFrom(),"I'm currently not logging for you")
def stop_log(msg,args):
if len(args)!=1:
brathuhn.sendMsg(brathuhn.ROOM,"Usage: !"+args[0],'groupchat')
return
brathuhn.sendMsg(brathuhn.ROOM,"/me stopped logging for "+unicode(msg.getFrom()),'groupchat')
if msg.getFrom() in user_logs:
brathuhn.sendMsg(brathuhn.ROOM,"/me stopped logging for "+unicode(msg.getFrom()),'groupchat')
del user_logs[msg.getFrom()]
else:
brathuhn.sendMsg(msg.getFrom(),"I'm currently not logging for you")
def start_log(msg,args):
if len(args)!=1:
brathuhn.sendMsg(brathuhn.ROOM,"Usage: !"+args[0],'groupchat')
return
brathuhn.sendMsg(brathuhn.ROOM,"/me started logging for "+unicode(msg.getFrom()),'groupchat')
user_logs[msg.getFrom()]=open(tempfile.mkstemp(brathuhn.NAME)[1],"w+")
if not msg.getFrom() in user_logs:
brathuhn.sendMsg(brathuhn.ROOM,"/me started logging for "+unicode(msg.getFrom()),'groupchat')
user_logs[msg.getFrom()]=open(tempfile.mkstemp(brathuhn.NAME)[1],"w+")
else:
brathuhn.sendMsg(msg.getFrom(),"I'm already logging for you")
def message_logger(mfrom,msg):
body = unicode(msg.getBody())
for key in user_logs:
date=datetime.datetime.fromtimestamp(time.time())
user_logs[key].write(date.strftime("(%H:%M:%S) "))
user_logs[key].write(unicode(mfrom)+": "+body+"\n")
def status_logger(mfrom,msg,status):
for key in user_logs:
date=datetime.datetime.fromtimestamp(time.time())
user_logs[key].write(date.strftime("(%H:%M:%S) "))
if status==brathuhn.STATUS_JOIN:
user_logs[key].write(unicode(mfrom)+" joined\n")
if status==brathuhn.STATUS_ONLINE:
@ -62,9 +69,23 @@ def status_logger(mfrom,msg,status):
if status==brathuhn.STATUS_UNKNOWN:
user_logs[key].write(unicode(mfrom)+" is now ???\n")
brathuhn.addPrivateCommand("show_log","Usage: !show_log",show_log)
brathuhn.addPrivateCommand("start_log","Usage: !start_log",start_log)
brathuhn.addPrivateCommand("stop_log","Usage: !stop_log",stop_log)
brathuhn.addPrivateCommand("delete_log","Usage: !delete_log",del_log)
def log(msg,args):
if len(args)!=2:
brathuhn.sendMsg(msg.getFrom(),"Usage: !log (start|stop|delete|show|get)")
return
if args[1]=='start':
start_log(msg,args)
elif args[1]=='stop':
stop_log(msg,args)
elif args[1]=='delete':
delete_log(msg,args)
elif args[1]=='show':
show_log(msg,args)
elif args[1]=='get':
get_log(msg,args)
else:
brathuhn.sendMsg(msg.getFrom(),"Usage: !log (start|stop|delete|show|get)")
brathuhn.addPrivateCommand("log","Usage: !log (start|stop|delete|show|get)",log)
brathuhn.addGroupListener(message_logger)
brathuhn.addStatusListener(status_logger)

@ -1,5 +1,5 @@
import xmpp, os, sys, time, traceback, stream_ft
import threading
import threading, errno, select
from config import *
@ -281,16 +281,21 @@ def loop():
except KeyboardInterrupt:
print "keyboard interrupt, quitting..."
sys.exit(0)
except select.error as e:
if not (e.args and e.args[0] == errno.EINTR):
print_error()
except:
print "-------ERROR OCCURED-------"
exc_type, exc_value, exc_traceback = sys.exc_info()
traceback.print_exc(file=sys.stdout)
if not cl.connected:
s=MIN_CONNECT_INTERVAL-(time.time()-last_connect)
if s>0:
time.sleep(s)
connect_and_join()
print "---------------------------"
print_error()
def print_error():
print "-------ERROR OCCURED-------"
traceback.print_exc(file=sys.stdout)
if not cl.connected:
s=MIN_CONNECT_INTERVAL-(time.time()-last_connect)
if s>0:
time.sleep(s)
connect_and_join()
print "---------------------------"
def callAt(func,_time,*args):
"""Call a function at given time; The call is not very exact but it is

@ -0,0 +1,73 @@
import os, sys, signal
log_file = None
log_path = None
def demonize(pid_file, force=False, logfile=None):
global log_file
global log_path
# check if pid file exists and return if not a forced start
if os.path.exists(pid_file) and not force:
return False
## Demonize
if os.fork():
exit(0)
os.umask(0)
os.setsid()
if os.fork():
exit(0)
pid = open(pid_file,'w')
pid.write(str(os.getpid()))
pid.close()
# The fileno is accessable after the first write
sys.stdout.write('\0')
sys.stderr.write('\0')
sys.stdout.flush()
sys.stderr.flush()
ignore = open('/dev/null', 'r+')
os.dup2(ignore.fileno(), sys.stdin.fileno())
if type(logfile)==file:
log_file = logfile
elif logfile!=None:
log_file = open(logfile,'w')
log_path = logfile
else:
log_file = ignore
os.dup2(log_file.fileno(), sys.stdout.fileno())
os.dup2(log_file.fileno(), sys.stderr.fileno())
signal.signal(signal.SIGHUP, __sys_call(__sighup_handler) )
return True
# decorator to make system call methods safe from EINTR
def __sys_call(func):
def __func(*args, **kwargs):
try:
rv = func(*args, **kwargs)
except exception as e:
if e.args and e.args[0] == EINTR:
pass
return rv
return __func
def __sighup_handler(sig,dontcare):
global log_path
global log_file
import traceback
try:
if log_path != None:
log_file.seek(0)
log_file.close()
log_file = open(log_path,'w')
os.dup2(log_file.fileno(), sys.stdout.fileno())
os.dup2(log_file.fileno(), sys.stderr.fileno())
except:
traceback.print_exc(file=sys.stdout)
sys.exit(1)

@ -16,7 +16,7 @@ def s5b_prepare():
return (s,port)
def s5b_write_file(s,fd,size):
s.settimeout(20)
s.settimeout(60)
conn, addr = s.accept()
data = conn.recv(3)

Loading…
Cancel
Save