Changeset 9
- Timestamp:
- 03/22/05 12:48:19 (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/daemon/togad.py
r8 r9 5 5 import socket 6 6 import sys 7 import rrdtool 8 import string 7 9 8 10 # Specify debugging level here; … … 10 12 # >10 = metric XML 11 13 # >9 = host,cluster,grid,ganglia XML 14 # >8 = RRD activity,gmetad config parsing 12 15 # 13 16 DEBUG_LEVEL = 9 17 18 # Where is the gmetad.conf located 19 # 20 GMETAD_CONF = '/etc/gmetad.conf' 21 22 # Where to store the archived rrd's 23 # 24 ARCHIVE_PATH = '/data/toga/rrds' 25 26 # List of data_source names to archive for 27 # 28 ARCHIVE_SOURCES = [ "LISA Cluster" ] 29 30 # 31 # Configuration ends 32 # 14 33 15 34 """ … … 36 55 elif name == 'CLUSTER': 37 56 self.clusterName = attrs.get('NAME',"") 57 self.rrd = RRDHandler( self.clusterName ) 38 58 if (DEBUG_LEVEL>9): print ' |-Cluster found: %s' %( self.clusterName ) 39 59 … … 42 62 self.hostIp = attrs.get('IP',"") 43 63 self.hostReported = attrs.get('REPORTED',"") 64 # Reset the metrics list for each host 65 self.metrics = [ ] 44 66 if (DEBUG_LEVEL>9): print ' | |-Host found: %s - ip %s reported %s' %( self.hostName, self.hostIp, self.hostReported ) 45 67 … … 54 76 return 55 77 56 #def endElement( self, name ):78 def endElement( self, name ): 57 79 #if name == 'ganglia_xml': 58 80 … … 61 83 #if name == 'cluster': 62 84 63 #if name == 'host': 85 if name == 'host': 86 self.storeMetrics( self.hostName ) 64 87 65 88 #if name == 'metric': 89 90 def storeMetrics( self, hostname ): 91 92 for metric in self.metrics: 93 self.rrd.checkCreate( hostname, metric['name'] ) 94 self.rrd.update( hostname, metric['name'], metric['val'] ) 95 if (DEBUG_LEVEL>8): print 'stored metric %s for %s: %s' %( hostname, metric['name'], metric['val'] ) 96 sys.exit(1) 97 66 98 67 99 class GangliaXMLGatherer: … … 107 139 class GangliaXMLProcessor: 108 140 109 def daemon( self):141 def daemon( self ): 110 142 "Run as daemon forever" 111 143 … … 143 175 self.run() 144 176 145 def run( self):177 def run( self ): 146 178 "Main thread" 147 179 … … 161 193 myParser.parse( myXMLGatherer.getFileObject() ) 162 194 195 class GangliaConfigParser: 196 197 sources = [ ] 198 199 def __init__( self, config ): 200 self.config = config 201 self.parseValues() 202 203 def parseValues(self): 204 "Parse certain values from gmetad.conf" 205 206 readcfg = open( self.config, 'r' ) 207 208 for line in readcfg.readlines(): 209 210 if line.count( '"' ) > 1: 211 212 source = { } 213 source['name'] = line.split( '"' )[1] 214 215 if line.find( 'data_source' ) and line[0] != '#': 216 217 source_words = line.split( '"' )[2].split( ' ' ) 218 print line.split( '"' ) 219 print source_words 220 221 for word in source_words: 222 223 print 'word %s' %word 224 valid_interval = 1 225 226 for letter in word: 227 print 'letter %s' %letter 228 if letter not in string.digits: 229 valid_interval = 0 230 231 if valid_interval: 232 source['interval'] = word 233 if (DEBUG_LEVEL>8): print 'polling interval for %s = %s' %(source['name'], source['interval'] ) 234 235 # No interval found, use Ganglia's default 236 if not source.has_key( 'interval' ): 237 source['interval'] = 15 238 239 self.sources.append( source ) 240 241 def getInterval( self, source_name ): 242 for source in self.sources: 243 if source['name'] == name: 244 return source['interval'] 245 return None 246 247 class RRDHandler: 248 249 def __init__( self, cluster ): 250 self.cluster = cluster 251 252 self.gmetad_conf = GangliaConfigParser( GMETAD_CONF ) 253 254 def createCheck( self, host, metric ): 255 "Check if an .rrd allready exists for this metric, create if not" 256 257 rrd_dir = '%s/%s/%s' %( check_dir(ARCHIVE_PATH), self.cluster, host ) 258 259 if not os.path.exists( rrd_dir ): 260 os.makedirs( rrd_dir ) 261 262 rrd_file = '%s/%s.rrd' %( rrd_dir, metric ) 263 264 interval = self.gmetad_conf.getInterval( self.cluster ) 265 266 def update( self, metric, timestamp, val ): 267 268 pass 269 270 #rrd.update( bla ) 271 272 163 273 def main(): 164 274 "Program startup" … … 167 277 myProcessor.processXML() 168 278 279 def check_dir( directory ): 280 "Check if directory is a proper directory. I.e.: Does _not_ end with a '/'" 281 282 if directory[-1] == '/': 283 directory = directory[:-1] 284 285 return directory 286 169 287 # Let's go 170 main() 288 if __name__ == '__main__': 289 main()
Note: See TracChangeset
for help on using the changeset viewer.