Changeset 2254:bacfcc1256ca

Show
Ignore:
Timestamp:
08/26/08 17:37:16 (3 months ago)
Author:
dunker@…
Branch:
default
Message:

improve logging .. gozernet backup

Files:
1 removed
4 modified

Legend:

Unmodified
Added
Removed
  • gozerbot/generic.py

    r2247 r2254  
    302302    return name 
    303303 
     304def whichmodule(): 
     305    """ return plugin from which function is called """ 
     306    try: 
     307        frame = sys._getframe(1) 
     308        plugfile = frame.f_back.f_code.co_filename[:-3].split('/') 
     309        lineno = frame.f_back.f_lineno 
     310        mod = [] 
     311        for i in plugfile[::-1]: 
     312            mod.append(i) 
     313            if i == 'gozerplugs' or i == 'gozerbot': 
     314                break 
     315        modstr = '.'.join(mod[::-1]) + ':' + str(lineno) 
     316    except AttributeError: 
     317        modstr = None 
     318    del frame 
     319    return modstr 
     320 
    304321def stripident(userhost): 
    305322    """ strip ident char from userhost """ 
     
    354371        txt = str(txt) 
    355372        t = time.time() 
    356         outtxt = "[%s %s] (%s) %s\n" % (dmy(t), uurminsec(t), descr, \ 
     373        mod = whichmodule() 
     374        if mod and descr in mod: 
     375            descr = mod 
     376        outtxt = "[%s %s] (%s) %s\n" % (dmy(t), uurminsec(t), descr, txt) 
     377        sys.stdout.write(outtxt) 
     378        sys.stdout.flush() 
     379        if not nofile and logfile: 
     380            rlogfile(level, descr, txt) 
     381        for cb in logcallbacks: 
     382            try: 
     383                cb(outtxt) 
     384            except Exception, ex: 
     385                handle_exception(log=False) 
     386 
     387def log(level, txt, nofile=False): 
     388    """ log text if level >= loglevel """ 
     389    if not logging_enabled: 
     390        return 
     391    if level >= config['loglevel']: 
     392        txt = str(txt) 
     393        t = time.time() 
     394        outtxt = "[%s %s] (%s) %s\n" % (dmy(t), uurminsec(t), whichmodule(), \ 
    357395txt) 
    358396        sys.stdout.write(outtxt) 
    359397        sys.stdout.flush() 
    360398        if not nofile and logfile: 
    361             rlogfile(level, descr, txt) 
     399            rlogfile(level, outtxt, txt) 
    362400        for cb in logcallbacks: 
    363401            try: 
  • gozerbot/net/cloud.py

    r2253 r2254  
    55__copyright__ = 'this file is in the public domain' 
    66 
    7 from gozerbot.generic import rlog 
     7from gozerbot.generic import rlog, whichmodule 
    88from gozerbot.persiststate import PersistState 
    99from gozerbot.net.client import Client 
     
    1111from gozerbot.thr import start_new_thread 
    1212from gozerbot.datadir import datadir 
    13 from gozerbot.net.server import server 
    1413from gozerbot.contrib.simplejson import dumps 
    1514import asyncore, time, os 
     
    8483        if persist: 
    8584            self.persist(name, url) 
    86         rlog(10, 'net.cloud', 'added %s node <%s>' % (name, url)) 
     85        rlog(10, whichmodule(), 'added %s node <%s>' % (name, url)) 
    8786        return self.nodes[url] 
    8887 
    89     def start(self): 
    90         self.boot() 
     88    def start(self, booturl=None): 
     89        self.boot(booturl) 
    9190        for name, url in self.startup['start'].iteritems(): 
    9291            self.add(name, url) 
    93         self.joinall() 
    94  
     92             
    9593    def persist(self, name, url): 
    9694        self.startup.set('start', name, url) 
     
    159157            client = Client("%s/gozernet/+join/" % url).addcb(cb)                 
    160158        else: 
    161             client = Client('http://213.196.7.59:10101/gozernet/+join/').addcb(cb) 
     159            client = Client('http://gozerbot.org:10101/gozernet/+join/').addcb(cb) 
    162160        client.add(name=name, port=port) 
    163  
    164     def joinall(self): 
    165         for item in self.nodes.values(): 
    166             self.join(item.url) 
    167         start_new_thread(asyncore.loop, (), {'use_poll': True }) 
    168161 
    169162    def boot(self, node=None): 
     
    186179        def cb(client, result): 
    187180            if result.error: 
    188                 rlog(10, self.url, "can't sync: %s" % result.error) 
     181                rlog(10, url, "can't sync: %s" % result.error) 
    189182                return 
    190183            for node in result.data: 
  • gozerbot/rest/server.py

    r2245 r2254  
    3434        self.state.define('whitelist', []) 
    3535        self.state.define('blacklist', []) 
     36        self.state.define('disable', []) 
    3637        self.poll = select.poll() 
    3738        self.poll.register(self) 
     
    9697        rlog(10, self.name, '%s %s handler added' % (splitted, type)) 
    9798 
     99    def enable(self, what): 
     100        try: 
     101            self.state['disable'].remove(what) 
     102            rlog(10, self.name, 'enabled %s' % what) 
     103        except ValueError: 
     104            pass 
     105 
     106    def disable(self, what): 
     107        self.state['disable'].append(what) 
     108        rlog(10, self.name, 'enabled %s' % what) 
     109 
    98110    def do(self, request): 
    99111        """ do a request """ 
     
    106118                splitted.append(i) 
    107119        splitted = tuple(splitted) 
     120        if splitted not in self.state['allow']: 
     121            request.send_error(404) 
     122            return 
    108123        request.splitted = splitted 
    109124        request.value = None 
     
    247262 
    248263except ImportError: 
    249     rlog(10, 'restserver', 'no SSL detected .. see python-openssl') 
     264    rlog(10, 'rest.server', 'no SSL detected .. see python-openssl') 
    250265   
  • gozerplugs/plugs/cloud.py

    r2253 r2254  
    1010from gozerbot.plughelp import plughelp 
    1111from gozerbot.net.cloud import cloud 
    12 from gozerbot.net.server import serverinit, servershutdown 
     12from gozerbot.rest.server import RestServerAsync, RestRequestHandler 
     13from gozerbot.contrib.simplejson import dumps 
    1314from gozerbot.persistconfig import PersistConfig 
    1415from gozerbot.plugins import plugins 
     
    2425cfg.define('name' , socket.getfqdn()) 
    2526cfg.define('port' , 10101) 
     27cfg.define('disable', []) 
     28cfg.define('booturl', 'http://gozerbot.org/') 
    2629 
    2730waitre = re.compile(' wait (\d+)', re.I) 
    28  
    2931hp = "%s:%s" % (cfg.get('host'), cfg.get('port')) 
    3032url = "http://%s" % hp 
     33server = None 
    3134 
    3235def nodes_GET(server, request): 
     
    6871def init(): 
    6972    """ init the cloud plugin """ 
     73    global server 
    7074    if not cfg.get('enable'): 
    7175        return 1 
    7276    try: 
    73         server = serverinit(cfg.get('host'), cfg.get('port')) 
    74         time.sleep(1) 
    75         server.addhandler('/gozernet/nodes/', 'GET', nodes_GET) 
    76         server.addhandler('/gozernet/+ping/', 'GET', ping_GET)  
    77         server.addhandler('/gozernet/+join/', 'POST', join_POST) 
    78         server.addhandler('/gozernet/+auth/', 'POST', auth_POST) 
    79         cloud.add(hp, url) 
    80         start_new_thread(asyncore.loop, (), {'use_poll': True }) 
    81         rlog(10, 'cloud', 'total of %s nodes' % size()) 
     77        server = RestServerAsync((cfg.get('host'), cfg.get('port')), \ 
     78RestRequestHandler) 
     79        if server: 
     80            server.start() 
     81            rlog(10, 'cloud', 'running at %s:%s' % (cfg.get('host'), cfg.get('port'))) 
     82            server.addhandler('/gozernet/+ping/', 'GET', ping_GET)  
     83            server.addhandler('/gozernet/nodes/', 'GET', nodes_GET) 
     84            server.addhandler('/gozernet/+join/', 'POST', join_POST) 
     85            server.addhandler('/gozernet/+auth/', 'POST', auth_POST) 
     86            for mount in cfg.get('disable'): 
     87                server.disable(mount) 
     88            cloud.start(cfg.get('booturl')) 
     89            start_new_thread(asyncore.loop, (), {'use_poll': True }) 
     90            rlog(10, 'cloud', 'total of %s nodes' % size()) 
    8291    except Exception, ex: 
    8392        handle_exception() 
     
    8594def shutdown(): 
    8695    """ shutdown the cloud plugin """ 
    87     try: 
    88         servershutdown() 
     96    global server 
     97    if not server: 
     98        return 1 
     99    try: 
     100        server.stop = True 
     101        server.server_close() 
     102        time.sleep(2) 
    89103    except Exception, ex: 
    90104        handle_exception() 
     
    310324cmnds.add('cloud-join', handle_cloudjoin, 'OPER') 
    311325examples.add('cloud-join', 'join node with <name>' , 'net-join gozerbot') 
     326 
     327def handle_cloudallow(bot, ievent): 
     328    """ cloud-allow .. allow a server mountpoint """ 
     329    if not cfg.get('enable'): 
     330        ievent.reply('cloud is not enabled') 
     331        return 
     332    if not ievent.rest: 
     333        ievent.missing('<server mount>') 
     334        return 
     335    server.enable(('gozernet', ievent.rest)) 
     336    ievent.reply('%s allowed' % ievent.rest) 
     337  
     338cmnds.add('cloud-allow', handle_cloudallow, 'OPER') 
     339examples.add('cloud-allow', 'allow execution of a server mountpoint', \ 
     340'cloud-allow join') 
     341 
     342def handle_clouddisallow(bot, ievent): 
     343    """ cloud-disallow .. disallow a mount point""" 
     344    if not cfg.get('enable'): 
     345        ievent.reply('cloud is not enabled') 
     346        return 
     347    if not ievent.rest: 
     348        ievent.missing('<server mount>') 
     349        return 
     350    server.disable(('gozernet', ievent.rest)) 
     351    ievent.reply('%s disallowed' % ievent.rest) 
     352  
     353cmnds.add('cloud-disallow', handle_clouddisallow, 'OPER') 
     354examples.add('cloud-disallow', 'disallow execution of a server mountpoint', \ 
     355'cloud-disallow join')