source: trunk/daemon/togad.py @ 6

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

daemon/togad.py:

First attempt at XML parsing

File size: 2.5 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
[6]23                if name == 'ganglia_xml':
24                        self.XMLSource = attrs.get('source',"")
25                        self.gangliaVersion = attrs.get('version',"")
26
27                elif name == 'grid':
28                        self.gridName = attrs.get('name',"")
29
30                elif name == 'cluster':
31                        self.clusterName = attrs.get('name',"")
32
33                elif name == 'host':     
34                        self.hostName = attrs.get('name',"")
35                        self.hostIp = attrs.get('ip',"")
36                        self.hostReported = attrs.get('reported',"")
37
38                elif name == 'metric':
39                        myMetric = { }
40                        myMetric['name'] = attrs.get('name',"")
41                        myMetric['val'] = attrs.get('val',"")
42
43                        self.metrics.append( myMetric ) 
44                        if DEBUG: print ' | | |-metric: %s:%s' %( myMetric['name'], myMetric['val'] )
45
[5]46                return
[3]47
[6]48        def endElement( self, name ):
49                if name == 'ganglia_xml':
50                        if DEBUG: print 'Found XML data: source %s version %s' %( self.XMLSource, self.gangliaVersion )
[3]51
[6]52                if name == 'grid':
53                        if DEBUG: print '`-Grid found: %s' %( self.gridName )
[3]54
[6]55                if name == 'cluster':
56                        if DEBUG: print ' |-Cluster found: %s' %( self.clusterName )
57
58                if name == 'host':     
59                        if DEBUG: print ' | |-Host found: %s - ip %s reported %s' %( self.hostName, self.hostIp, self.hostReported )
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:
79                                s = None
80                                continue
81                        try:
82                                s.connect(sa)
83                        except socket.error, msg:
84                                s.close()
85                                s = None
86                                continue
87                        break
[3]88
[5]89                if s is None:
90                        print 'could not open socket'
91                        sys.exit(1)
92
[6]93                return s.makefile()
[5]94
95                #s.send('Hello, world')
96                #data = s.recv(1024)
97                #s.close()
98                #print 'Received', `data`
99
100def main():
101        """
102        My Main
103        """
104
[6]105        myXMLGatherer = GangliaXMLGatherer( 'localhost', 8651 ) 
[5]106
107        myParser = make_parser()   
108        myHandler = GangliaXMLHandler()
109        myParser.setContentHandler( myHandler )
110        myParser.parse( myXMLGatherer.getFileDescriptor() )
111
112# Let's go
113main()
Note: See TracBrowser for help on using the repository browser.