source: trunk/daemon/togad.py @ 7

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

daemon/togad.py:

Appearantly XML handling is case sensitive

File size: 2.7 KB
Line 
1#!/usr/bin/env python
2
3from xml.sax import make_parser
4from xml.sax.handler import ContentHandler
5import socket
6import sys
7
8DEBUG = 1
9
10class GangliaXMLHandler( ContentHandler ):
11        """
12        Parse/Handle XML
13        """
14
15        metrics = [ ]
16
17        #def __init__ ( self ):
18                #self.isHostElement, self.isMetricElement, self.isGridElement, self.isClusterElement = 0, 0, 0, 0
19                #self.isGangliaXMLElement = 0
20   
21        def startElement( self, name, attrs ):
22
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 )
27
28                elif name == 'GRID':
29                        self.gridName = attrs.get('NAME',"")
30                        if DEBUG: print '`-Grid found: %s' %( self.gridName )
31
32                elif name == 'CLUSTER':
33                        self.clusterName = attrs.get('NAME',"")
34                        if DEBUG: print ' |-Cluster found: %s' %( self.clusterName )
35
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 )
41
42                elif name == 'METRIC':
43                        myMetric = { }
44                        myMetric['name'] = attrs.get('NAME',"")
45                        myMetric['val'] = attrs.get('VAL',"")
46
47                        self.metrics.append( myMetric ) 
48                        if DEBUG: print ' | | |-metric: %s:%s' %( myMetric['name'], myMetric['val'] )
49
50                return
51
52        #def endElement( self, name ):
53                #if name == 'ganglia_xml':
54
55                #if name == 'grid':
56
57                #if name == 'cluster':
58
59                #if name == 'host':     
60
61                #if name == 'metric':
62
63class GangliaXMLGatherer:
64        """
65        Connect to a gmetad and return fd
66        """
67
68        def __init__(self, host, port):
69                self.host = host
70                self.port = port
71
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:
79                                print socket.error
80                                print msg
81                                s = None
82                                continue
83                        try:
84                                print 'connected'
85                                s.connect(sa)
86                                #s.setblocking(1)
87                        except socket.error, msg:
88                                s.close()
89                                print socket.error
90                                print msg
91                                s = None
92                                continue
93                        break
94
95                if s is None:
96                        print 'could not open socket'
97                        sys.exit(1)
98
99                return s.makefile( 'r' )
100                #return s
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
112        myXMLGatherer = GangliaXMLGatherer( 'localhost', 8651 ) 
113
114        myParser = make_parser()   
115        myHandler = GangliaXMLHandler()
116        myParser.setContentHandler( myHandler )
117
118        #for line in myXMLGatherer.getFileDescriptor().readlines():
119        #       print line
120
121        myParser.parse( myXMLGatherer.getFileDescriptor() )
122
123# Let's go
124main()
Note: See TracBrowser for help on using the repository browser.