Changeset 458

Show
Ignore:
Timestamp:
05/14/08 11:02:21 (8 months ago)
Author:
mgoldman
Message:

Tie log queries together

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/trunk-pmd-intproto/mgmt/manager.py

    r451 r458  
    1111import pprint 
    1212import os 
     13from locale import atoi 
     14from protocol import Message 
    1315 
    1416class Manager: 
     
    6264                msg.type = 'query' 
    6365                msg.body = 'all' 
    64                 return msg 
    65  
    66         def requestlog(self): 
    67                 print "Getting logs" 
    68                 msg = protocol.Message() 
    69                 msg.msg = "log" 
    70                 msg.type = "query" 
    71                 msg.body = "ALL" 
    72                 return msg 
    73  
    74         def requestlogdelta(self): 
    75                 print "getting log deltas" 
    76                 msg= protocol.Message() 
    77                 msg.msg = "log" 
    78                 msg.type = "query" 
    79                 msg.body = "UPDATE" 
    8066                return msg 
    8167 
     
    212198        return mgr.query_server(msg) 
    213199 
     200def parsequery(qlist): 
     201        res = [] 
     202        ips = [] 
     203        groups = [] 
     204        while(qlist != []): 
     205                tok = qlist.pop(0) 
     206                if tok == "time": 
     207                        try: 
     208                                res.append(("time",(atoi(qlist.pop(0)), atoi(qlist.pop(0))))) 
     209                        except ValueError: 
     210                                print "Error parsing values." 
     211                                raise ValueError 
     212                elif tok == "IP": 
     213                        ips.append(qlist.pop(0)) 
     214                elif tok == "group": 
     215                        groups.append(qlist.pop(0)) 
     216                else: 
     217                        print "Unknown token: " + tok 
     218                        raise ValueError 
     219        if ips != []: 
     220                res.append(("IP", ips)) 
     221        if groups != []: 
     222                res.append(("group", groups)) 
     223        return res 
     224 
    214225def handlelog(manager, arglist): 
    215226        ''' Takes a manager object and the remainder of the command 
    216227                line arguments and processes the log command 
    217228                Current commands: all, delta ''' 
    218         useage = 'usage: log (all|delta) [ (group|IP) [IP list] ]' 
     229        useage = 'usage: log (query [restrictions]) | ((all|delta) '\ 
     230                        + '[ (group|IP) [IP list] ])\n'\ 
     231                        + 'restrictions must be in the form:\n'\ 
     232                        + '\ttime <int> <int> # min max in seconds past epoch\n'\ 
     233                        + '\tIP <IP> # dotted quad notation\n'\ 
     234                        + '\tgroup <groupname>\n'\ 
     235                        + 'Note: you can have multiple of each, although multiple'\ 
     236                        + 'times does not make sense.' 
    219237        if(len(arglist) == 0): 
    220238                print useage 
     
    225243                targets = (arglist[1], arglist[2:]) 
    226244        if cmd == "all": 
    227                 resp = manager.query_server(manager.requestlog(), targets) 
     245                resp = manager.query_server(Message("log","query","ALL", targets) 
    228246        elif cmd == "delta": 
    229                 resp = manager.query_server(manager.requestlog(), targets) 
     247                resp = manager.query_server(Message("log","query","UPDATE", targets) 
     248        elif cmd == "query": 
     249                try: 
     250                        query = parsequery(arglist[1:]) 
     251                        resp = manager.query_server(Message("log query", "request", query)) 
     252                except ValueError: 
     253                        print useage 
     254                        return 
    230255        else: 
    231256                print useage