Changeset 437

Show
Ignore:
Timestamp:
05/07/08 09:37:06 (8 months ago)
Author:
mgoldman
Message:

manager.py refacator cmd line handling so it is less ugly.

agent_log.py note that shrinking log files was intentionally not considered

fix bug for shrinking log file.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/trunk-pmd-intproto/agent/agent_log.py

    r432 r437  
    2525        def update(self): 
    2626                f = open(self.log_path) 
    27                 if(self.offset < eof(f)): 
     27                if(self.offset > eof(f)): 
     28                        # Note: This can happen if logfiles get rotated.  We 
     29                        # specifically do not handle this case at the moment. 
    2830                        print "Log file shrank" 
    2931                        print "raise error, strangeness happened and we may have missed" 
  • branches/trunk-pmd-intproto/mgmt/manager.py

    r436 r437  
    6464                return msg 
    6565 
    66         def logdelta(self): 
     66        def requestlogdelta(self): 
    6767                print "getting log deltas" 
    6868                msg= protocol.Message() 
     
    8888                return msg 
    8989 
     90<<<<<<< .mine 
     91        def query_server(self, msg, targets=None):  
     92                # targets is a pair, (group|IP, [t-list]) 
     93======= 
    9094        def add_message(self, group=''): 
    9195                msg = protocol.Message() 
     
    103107 
    104108        def query_server(self, msg): 
     109>>>>>>> .r436 
    105110                if msg is None: 
    106111                        return None 
     112                if targets is not None: 
     113                        if (targets[0] == "group" or targets[0] == "IP"): 
     114                                pass 
     115                        else: 
     116                                print "target must specify group or ip" 
     117                                print targets[0] 
     118                                return None 
     119                        msg.targets = targets 
    107120                print "Sending msg: " + msg.msg 
    108121                self.server.send_message(msg) 
     
    113126                return resp 
    114127 
     128### The following functions handle the command line options. 
     129### Each function takes a manager as the first argument and 
     130### the remainder of the argument list as the second argument. 
     131### returns the response from the server. 
     132def handlestorage(mgr, cmd, argv): 
     133        useage = 'useage:\n   ' + cmd + " FILE GROUP" 
     134        if(len(argv) < 2): 
     135                print useage 
     136                sys.exit(1) 
     137        if cmd == 'add': 
     138                if not os.path.exists(argv[0]): 
     139                        print 'File \'' + argv[0] + '\' does not exist' 
     140                print 'moduole addition not yet implemented' 
     141        elif cmd == 'remove': 
     142                print 'module removal not yet implemented' 
     143        return None 
     144 
     145def handleupdate(mgr, argv): 
     146        useage = 'useage:\n   update (group GROUPNAME | all | client [clientlist])' 
     147        if argv[0] == 'client': 
     148                msg = self.update() 
     149                msg.body = sys.argv[3:] 
     150        elif argv[0] == 'group': 
     151                if argv[1] == '': 
     152                        print 'missing group to update' 
     153                        sys.exit(1) 
     154                msg = m.update_group(argv[1]) 
     155        elif argv[0] == 'all' or argv[0] == '': 
     156                msg = m.update() 
     157        else: 
     158                print 'unknown update request' 
     159                print useage 
     160                sys.exit(1) 
     161        return mgr.query_server(msg)  
     162 
     163def handlelist(mgr, argv): 
     164        if argv[0] == 'groups': 
     165                msg = m.list_groups() 
     166        elif argv[0] == 'clients': 
     167                if argv[1] == 'reachable': 
     168                        msg = m.list_clients() 
     169                        msg.body = 'reachable' 
     170                elif argv[1] == 'update': 
     171                        msg = m.update_query() 
     172                elif argv[1] == 'in': 
     173                        if len(sys.argv) < 5: 
     174                                print 'missing group name' 
     175                                sys.exit(1) 
     176                        msg = self.list_clients() 
     177                        msg.body = sys.argv[4] 
     178                elif argv[1] == 'all' or argv[1] == '': 
     179                        msg = m.list_clients() 
     180                else: 
     181                        print 'unknown client list request' 
     182                        sys.exit(1) 
     183        else: 
     184                print 'list what?' 
     185                sys.exit(1) 
     186        return mgr.query_server(msg)  
     187 
     188def handlelog(manager, arglist): 
     189        ''' Takes a manager object and the remainder of the command 
     190                line arguments and processes the log command 
     191                Current commands: all, delta ''' 
     192        useage = 'usage: log (all|delta) [ (group|IP) [IP list] ]' 
     193        if(len(arglist) == 0): 
     194                print useage 
     195                return 
     196        cmd = arglist[0] 
     197        targets = None 
     198        if arglist[1:] != []: 
     199                targets = (arglist[1], arglist[2:]) 
     200        if cmd == "all": 
     201                resp = manager.query_server(manager.requestlog(), targets) 
     202        elif cmd == "delta": 
     203                resp = manager.query_server(manager.requestlog(), targets) 
     204        else: 
     205                print useage 
     206                return 
     207        return resp 
     208 
    115209if __name__ == '__main__': 
    116210        m = Manager('localhost') 
     
    119213                sys.exit(1) 
    120214        cmd = sys.argv[1] 
    121         arg1 = '' 
    122         arg2 = '' 
    123215        msg = None 
    124         if len(sys.argv) >= 3: 
    125                 arg1 = sys.argv[2] 
    126         if len(sys.argv) >= 4: 
    127                 arg2 = sys.argv[3] 
    128         if cmd == 'add': 
    129                 if arg1 == '' or arg2 == '': 
    130                         print 'usage:' 
    131                         print '   add GROUP FILE...' 
    132                         sys.exit(1) 
    133                 resp = m.query_server(m.list_groups()) 
    134                 if arg1 not in resp.body: 
    135                         print 'Group \'' + arg1 + '\' does not exist' 
    136                         sys.exit(1) 
    137                 files = [] 
    138                 for arg in sys.argv[3:]: 
    139                         if not os.path.exists(arg): 
    140                                 print 'File \'' + arg + '\' does not exist' 
    141                         else: 
    142                                 files.append((os.path.realpath(os.path.expanduser(arg))), file_util.checksum(arg)) 
    143                 if len(files) != len(sys.argv[3:]): 
    144                         sys.exit(1) 
    145                 msg = m.add_message(arg1) 
    146                 msg.body[1] += files 
    147         elif cmd == 'remove': 
    148                 if arg1 == '' or arg2 == '': 
    149                         print 'usage:' 
    150                         print '   remove GROUP FILE...' 
    151                         sys.exit(1) 
    152                 resp = m.query_server(m.list_groups()) 
    153                 if arg1 not in resp.body: 
    154                         print 'Group \'' + arg1 + '\' does not exist' 
    155                         sys.exit(1) 
    156                 files = [os.path.basename(x) for x in sys.argv[3:]] 
    157                 msg = m.remove_message(arg1) 
    158                 msg.body[1] += files 
     216        if cmd == 'add' or cmd == 'remove': 
     217                res = handlestorage(m, cmd, sys.argv[2:]) 
     218        #if cmd == 'add': 
     219        #       if arg1 == '' or arg2 == '': 
     220        #               print 'usage:' 
     221        #               print '   add GROUP FILE...' 
     222        #               sys.exit(1) 
     223        #       resp = m.query_server(m.list_groups()) 
     224        #       if arg1 not in resp.body: 
     225        #               print 'Group \'' + arg1 + '\' does not exist' 
     226        #               sys.exit(1) 
     227        #       files = [] 
     228        #       for arg in sys.argv[3:]: 
     229        #               if not os.path.exists(arg): 
     230        #                       print 'File \'' + arg + '\' does not exist' 
     231        #               else: 
     232        #                       files.append((os.path.realpath(os.path.expanduser(arg))), file_util.checksum(arg)) 
     233        #       if len(files) != len(sys.argv[3:]): 
     234        #               sys.exit(1) 
     235        #       msg = m.add_message(arg1) 
     236        #       msg.body[1] += files 
     237        #elif cmd == 'remove': 
     238        #       if arg1 == '' or arg2 == '': 
     239        #               print 'usage:' 
     240        #               print '   remove GROUP FILE...' 
     241        #               sys.exit(1) 
     242        #       resp = m.query_server(m.list_groups()) 
     243        #       if arg1 not in resp.body: 
     244        #               print 'Group \'' + arg1 + '\' does not exist' 
     245        #               sys.exit(1) 
     246        #       files = [os.path.basename(x) for x in sys.argv[3:]] 
     247        #       msg = m.remove_message(arg1) 
     248        #       msg.body[1] += files 
    159249        elif cmd == 'update': 
    160                 if arg1 == 'client': 
    161                         msg = self.update() 
    162                         msg.body = sys.argv[3:] 
    163                 elif arg1 == 'group': 
    164                         if arg2 == '': 
    165                                 print 'missing group to update' 
    166                                 sys.exit(1) 
    167                         msg = m.update_group(arg2) 
    168                 elif arg1 == 'all' or arg1 == '': 
    169                         msg = m.update() 
    170                 else: 
    171                         print 'unknown update request' 
    172                         sys.exit(1) 
     250                res = handleupdate(m, sys.argv[2:]) 
    173251        elif cmd == 'status': 
    174252                print 'status requests not yet implemented' 
    175253        elif cmd == 'list': 
    176                 if arg1 == 'groups': 
    177                         msg = m.list_groups() 
    178                 elif arg1 == 'clients': 
    179                         if arg2 == 'reachable': 
    180                                 msg = m.list_clients() 
    181                                 msg.body = 'reachable' 
    182                         elif arg2 == 'update': 
    183                                 msg = m.update_query() 
    184                         elif arg2 == 'in': 
    185                                 if len(sys.argv) < 5: 
    186                                         print 'missing group name' 
    187                                         sys.exit(1) 
    188                                 msg = self.list_clients() 
    189                                 msg.body = sys.argv[4] 
    190                         elif arg2 == 'all' or arg2 == '': 
    191                                 msg = m.list_clients() 
    192                         else: 
    193                                 print 'unknown client list request' 
    194                                 sys.exit(1) 
    195                 else: 
    196                         print 'list what?' 
    197                         sys.exit(1) 
    198         elif cmd == 'logs': 
    199                 print 'log fetch not yet implemented' 
     254                res = handlelist(m, sys.argv[2:]) 
     255        elif cmd == 'log': 
     256                res = handlelog(m, sys.argv[2:]) 
    200257        else: 
    201258                print 'unknow command' 
    202259                sys.exit(1) 
    203         res = m.query_server(msg) 
    204260        pprint.pprint(repr(res)) 
    205261#m = Manager('localhost')