source: trunk/daemon/togad.py @ 7

Last change on this file since 7 was 7, checked in by bastiaans, 19 years ago

daemon/togad.py:

Appearantly XML handling is case sensitive

File size: 2.7 KB
RevLine 
[3]1#!/usr/bin/env python
2
[5]3from xml.sax import make_parser
4from xml.sax.handler import ContentHandler
5import socket
6import sys
[3]7
[6]8DEBUG = 1
9
10class GangliaXMLHandler( ContentHandler ):
[5]11        """
12        Parse/Handle XML
13        """
[3]14
[6]15        metrics = [ ]
16
17        #def __init__ ( self ):
18                #self.isHostElement, self.isMetricElement, self.isGridElement, self.isClusterElement = 0, 0, 0, 0
19                #self.isGangliaXMLElement = 0
[5]20   
[6]21        def startElement( self, name, attrs ):
[3]22
[7]23                if name == 'GANGLIA_XML':
24                        self.XMLSource = attrs.get('SOURCE',"")
25                        self.gangliaVersion = attrs.get('VERSION',"")
26                        if DEBUG: print 'Found XML data: source %s version %s' %( self.XMLSource, self.gangliaVersion )
[6]27
[7]28                elif name == 'GRID':
29                        self.gridName = attrs.get('NAME',"")
30                        if DEBUG: print '`-Grid found: %s' %( self.gridName )
[6]31
[7]32                elif name == 'CLUSTER':
33                        self.clusterName = attrs.get('NAME',"")
34                        if DEBUG: print ' |-Cluster found: %s' %( self.clusterName )
[6]35
[7]36                elif name == 'HOST':     
37                        self.hostName = attrs.get('NAME',"")
38                        self.hostIp = attrs.get('IP',"")
39                        self.hostReported = attrs.get('REPORTED',"")
40                        if DEBUG: print ' | |-Host found: %s - ip %s reported %s' %( self.hostName, self.hostIp, self.hostReported )
[6]41
[7]42                elif name == 'METRIC':
[6]43                        myMetric = { }
[7]44                        myMetric['name'] = attrs.get('NAME',"")
45                        myMetric['val'] = attrs.get('VAL',"")
[6]46
47                        self.metrics.append( myMetric ) 
48                        if DEBUG: print ' | | |-metric: %s:%s' %( myMetric['name'], myMetric['val'] )
49
[5]50                return
[3]51
[7]52        #def endElement( self, name ):
53                #if name == 'ganglia_xml':
[3]54
[7]55                #if name == 'grid':
[3]56
[7]57                #if name == 'cluster':
[6]58
[7]59                #if name == 'host':     
[6]60
61                #if name == 'metric':
62
[5]63class GangliaXMLGatherer:
64        """
65        Connect to a gmetad and return fd
66        """
[3]67
[5]68        def __init__(self, host, port):
69                self.host = host
70                self.port = port
[3]71
[5]72        def getFileDescriptor(self):
73                s = None
74                for res in socket.getaddrinfo(self.host, self.port, socket.AF_UNSPEC, socket.SOCK_STREAM):
75                        af, socktype, proto, canonname, sa = res
76                        try:
77                                s = socket.socket(af, socktype, proto)
78                        except socket.error, msg:
[7]79                                print socket.error
80                                print msg
[5]81                                s = None
82                                continue
83                        try:
[7]84                                print 'connected'
[5]85                                s.connect(sa)
[7]86                                #s.setblocking(1)
[5]87                        except socket.error, msg:
88                                s.close()
[7]89                                print socket.error
90                                print msg
[5]91                                s = None
92                                continue
93                        break
[3]94
[5]95                if s is None:
96                        print 'could not open socket'
97                        sys.exit(1)
98
[7]99                return s.makefile( 'r' )
100                #return s
[5]101
102                #s.send('Hello, world')
103                #data = s.recv(1024)
104                #s.close()
105                #print 'Received', `data`
106
107def main():
108        """
109        My Main
110        """
111
[6]112        myXMLGatherer = GangliaXMLGatherer( 'localhost', 8651 ) 
[5]113
114        myParser = make_parser()   
115        myHandler = GangliaXMLHandler()
116        myParser.setContentHandler( myHandler )
[7]117
118        #for line in myXMLGatherer.getFileDescriptor().readlines():
119        #       print line
120
[5]121        myParser.parse( myXMLGatherer.getFileDescriptor() )
122
123# Let's go
124main()
Note: See TracBrowser for help on using the repository browser.