sbsv2/raptor/python/plugins/filter_bz2log.py
author yiluzhu
Tue, 25 May 2010 16:26:21 +0100
branchfix
changeset 571 25e377052d9f
parent 304 976aca38ffe5
permissions -rw-r--r--
edit comment
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
304
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
     1
# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
     2
# All rights reserved.
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
     3
# This component and the accompanying materials are made available
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
     4
# under the terms of the License "Eclipse Public License v1.0"
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
     5
# which accompanies this distribution, and is available
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
     6
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
     7
#
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
     8
# Initial Contributors:
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
     9
# Nokia Corporation - initial contribution.
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    10
#
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    11
# Contributors:
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    12
#
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    13
# Description:
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    14
# Compress the full Raptor log file using the BZip2 algorithm, maximum compression.
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    15
# 
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    16
#
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    17
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    18
import os
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    19
import sys
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    20
import raptor
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    21
import filter_interface
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    22
import bz2
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    23
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    24
class StringListCompressor(object):
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    25
	def __init__(self, complevel=5, filename="file.log.bz2"):
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    26
		self.compressor = bz2.BZ2Compressor(complevel)
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    27
		self.stringlist = []
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    28
		self.outputopenedok = False
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    29
		self.filename = filename
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    30
		try:
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    31
			self.fh = open(self.filename, "wb")
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    32
			self.outputopenedok = True
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    33
		except:
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    34
			self.outputopenedok = False
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    35
	
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    36
	def write(self, data):
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    37
		if self.outputopenedok:
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    38
			compresseddata = self.compressor.compress(data)
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    39
			self.fh.write(compresseddata)
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    40
	
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    41
	def __del__(self):
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    42
		if self.outputopenedok:
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    43
			compresseddata = self.compressor.flush()
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    44
			self.fh.write(compresseddata)
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    45
			self.fh.close()
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    46
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    47
class Bz2log(filter_interface.Filter):
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    48
	def __init__(self):
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    49
		self.__inRecipe = False
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    50
		self.compressor = None
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    51
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    52
	def open(self, raptor_instance):
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    53
		"""Open a log file for the various I/O methods to write to."""
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    54
		
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    55
		if raptor_instance.logFileName == None:
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    56
			self.out = sys.stdout # Default to stdout if no log file is given
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    57
		else:
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    58
			logname = str(raptor_instance.logFileName.path.replace("%TIME", raptor_instance.timestring))
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    59
			
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    60
			# Ensure that filename has the right extension; append ".bz2" if required
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    61
			if not logname.lower().endswith(".bz2"):
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    62
				logname += ".bz2"
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    63
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    64
			try:
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    65
				dirname = str(raptor_instance.logFileName.Dir())
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    66
				if dirname and not os.path.isdir(dirname):
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    67
					os.makedirs(dirname)
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    68
			except:
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    69
				self.formatError("cannot create directory %s", dirname)
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    70
				return False
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    71
			
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    72
			# Use highest compression level 9 which corresponds to a 900KB dictionary
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    73
			self.compressor = StringListCompressor(9, logname)
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    74
			if not self.compressor.outputopenedok:
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    75
				self.out = None
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    76
				self.formatError("failed to initialise compression routines." )
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    77
				return False
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    78
		return True
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    79
		
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    80
	def write(self, data):
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    81
		"""Write data compressed log"""
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    82
		if self.compressor:
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    83
			self.compressor.write(data)
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    84
		return True
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    85
	
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    86
	def close(self):
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    87
		"""Close the log file"""
976aca38ffe5 add bzip2 filter into 2.12.4-rc2
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    88
		return True