searcher/searchserver/src/clogplayerrecorder.cpp
changeset 0 671dee74050a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/searcher/searchserver/src/clogplayerrecorder.cpp	Mon Apr 19 14:40:16 2010 +0300
@@ -0,0 +1,385 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <S32MEM.h>
+
+#include "CLogPlayerRecorder.h"
+
+TBool CLogPlayerRecorder::iLogOpen = EFalse;
+RFs CLogPlayerRecorder::iRfs;
+RFile CLogPlayerRecorder::iFile;
+RArray<TUint> CLogPlayerRecorder::iHandleArray;
+TInt64 CLogPlayerRecorder::iStartTimeStamp = KErrNotFound;
+
+const TUint digitsIn64BitNumber = 20;
+
+//_LIT(KCPixLogPlayerLogFolder, "CPix\\LogPlayer");
+//_LIT(KCPixLogPlayerLogFile, "LogPlayer.txt");
+_LIT8(KFlush, "FLUSH");
+_LIT8(KSpace, " ");
+_LIT8(KNewLine, "\n");
+_LIT8( KDefineVolume, "DEFINEVOLUME" );
+_LIT8( KHouseKeep, "HOUSEKEEP" );
+_LIT8( KOpenDb, "OPENDB" );
+_LIT8( KAdd, "ADD" );
+_LIT8( KUpdate, "UPDATE" );
+_LIT8( KDelete, "DELETE" );
+_LIT8( KSearch, "SEARCH" );
+_LIT8( KGetDocument, "GET" );
+_LIT8( KReset, "RESET" );
+_LIT8( KCancel, "CANCEL" );
+_LIT8( KDefineVolumeSeparator, "/" );
+
+void CLogPlayerRecorder::LogHouseKeepL()
+    {
+    OpenL();
+    
+    RBuf8 buffer;
+    buffer.CleanupClosePushL();
+    
+    AppendTimeStampToMsgBuffer( buffer );
+    AppendToMsgBuffer( buffer, KHouseKeep );
+    AppendToMsgBuffer( buffer, KSpace ); // TODO: Fix. Ugly hack to make log execution work.
+    AppendToMsgBuffer( buffer, KNewLine );
+    iFile.Write( buffer );
+    iFile.Flush();
+    
+    CleanupStack::PopAndDestroy( &buffer );
+    }
+
+void CLogPlayerRecorder::LogDefineVolumeL(const TDesC& aQualifiedBaseAppClass, 
+        const TDesC& aIndexDbPath)
+    {
+    OpenL();
+    
+    RBuf8 buffer;
+    buffer.CleanupClosePushL();
+    AppendTimeStampToMsgBuffer( buffer );
+    AppendToMsgBuffer( buffer, KDefineVolume );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, aQualifiedBaseAppClass );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, KDefineVolumeSeparator );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, aIndexDbPath );
+    AppendToMsgBuffer( buffer, KNewLine );
+    iFile.Write( buffer );
+    iFile.Flush();
+    
+    CleanupStack::PopAndDestroy( &buffer );
+    }
+
+void CLogPlayerRecorder::LogFlushL(TUint aId)
+    {
+    OpenL();
+    
+    RBuf8 buffer;
+    buffer.CleanupClosePushL();
+    AppendTimeStampToMsgBuffer( buffer );
+    AppendToMsgBuffer( buffer, KFlush );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, GetHandleId(aId) );
+    AppendToMsgBuffer( buffer, KNewLine );
+    iFile.Write( buffer );
+    iFile.Flush();
+    
+    CleanupStack::PopAndDestroy(&buffer);
+    }
+
+void CLogPlayerRecorder::LogDatabaseOpenL(TUint aId, TBool aSearcher, const TDesC& aBaseAppClass)
+    {
+    OpenL();
+ 
+    TPtrC typePtr = KNullDesC();
+    if ( aSearcher )
+        {
+        typePtr.Set( _L( "SEARCHER" ) );
+        }
+    else
+        {
+        typePtr.Set( _L( "INDEXER" ) );
+        }
+    
+    RBuf8 buffer;
+    buffer.CleanupClosePushL();
+    AppendTimeStampToMsgBuffer( buffer );
+    AppendToMsgBuffer( buffer, KOpenDb );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, GetHandleId(aId) );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, typePtr );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, aBaseAppClass );
+    AppendToMsgBuffer( buffer, KNewLine );
+    iFile.Write( buffer );
+    iFile.Flush();
+    
+    CleanupStack::PopAndDestroy( &buffer );
+    }
+
+void CLogPlayerRecorder::LogAddL( TUint aId, const CSearchDocument& aSearchDocument )
+    {
+    OpenL();
+    
+    HBufC8* data = SerializeDocumentL( aSearchDocument );
+    CleanupStack::PushL( data );
+    
+    RBuf8 buffer;
+    buffer.CleanupClosePushL();
+    AppendTimeStampToMsgBuffer( buffer );
+    AppendToMsgBuffer( buffer, KAdd );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, GetHandleId(aId) );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, data->Length() );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, *data );
+    AppendToMsgBuffer( buffer, KNewLine );
+    iFile.Write( buffer );
+    iFile.Flush();
+    
+    CleanupStack::PopAndDestroy(&buffer);
+    CleanupStack::PopAndDestroy(data);
+    }
+
+void CLogPlayerRecorder::LogUpdateL( TUint aId, const CSearchDocument& aSearchDocument )
+    {
+    OpenL();
+    
+    HBufC8* data = SerializeDocumentL( aSearchDocument );
+    CleanupStack::PushL( data );
+    
+    RBuf8 buffer;
+    buffer.CleanupClosePushL();
+    AppendTimeStampToMsgBuffer( buffer );
+    AppendToMsgBuffer( buffer, KUpdate );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, GetHandleId(aId) );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, data->Length() );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, *data );
+    AppendToMsgBuffer( buffer, KNewLine );
+    iFile.Write( buffer );
+    iFile.Flush();
+    
+    CleanupStack::PopAndDestroy(&buffer);
+    CleanupStack::PopAndDestroy(data);
+    }
+
+void CLogPlayerRecorder::LogDeleteL( TUint aId, const TDesC& aDocUid )
+    {
+    OpenL();
+    
+    RBuf8 buffer;
+    buffer.CleanupClosePushL();
+    AppendTimeStampToMsgBuffer( buffer );
+    AppendToMsgBuffer( buffer, KDelete );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, GetHandleId(aId) );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, aDocUid );
+    AppendToMsgBuffer( buffer, KNewLine );
+    iFile.Write( buffer );
+    iFile.Flush();
+    
+    CleanupStack::PopAndDestroy(&buffer);
+    }
+
+void CLogPlayerRecorder::LogSearchL( TUint aId, const TDesC& searchTerms )
+    {
+    OpenL();
+    
+    RBuf8 buffer;
+    buffer.CleanupClosePushL();
+    AppendTimeStampToMsgBuffer( buffer );
+    AppendToMsgBuffer( buffer, KSearch );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, GetHandleId(aId) );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, searchTerms );
+    AppendToMsgBuffer( buffer, KNewLine );
+    iFile.Write( buffer );
+    iFile.Flush();
+    
+    CleanupStack::PopAndDestroy(&buffer);
+    }
+
+void CLogPlayerRecorder::LogGetDocumentL( TUint aId, TUint aIndex )
+    {
+    OpenL();
+    
+    RBuf8 buffer;
+    buffer.CleanupClosePushL();
+    AppendTimeStampToMsgBuffer( buffer );
+    AppendToMsgBuffer( buffer, KGetDocument );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, GetHandleId(aId) );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, aIndex );
+    AppendToMsgBuffer( buffer, KNewLine );
+    iFile.Write( buffer );
+    iFile.Flush();
+    
+    CleanupStack::PopAndDestroy(&buffer);
+    }
+
+void CLogPlayerRecorder::LogResetL( TUint aId )
+    {
+    OpenL();
+    
+    RBuf8 buffer;
+    buffer.CleanupClosePushL();
+    AppendTimeStampToMsgBuffer( buffer );
+    AppendToMsgBuffer( buffer, KReset );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, GetHandleId(aId) );
+    AppendToMsgBuffer( buffer, KNewLine );
+    iFile.Write( buffer );
+    iFile.Flush();
+    
+    CleanupStack::PopAndDestroy(&buffer);
+    }
+
+void CLogPlayerRecorder::LogCancelL( TUint aId )
+    {
+    OpenL();
+    
+    RBuf8 buffer;
+    buffer.CleanupClosePushL();
+    AppendTimeStampToMsgBuffer( buffer );
+    AppendToMsgBuffer( buffer, KCancel );
+    AppendToMsgBuffer( buffer, KSpace );
+    AppendToMsgBuffer( buffer, GetHandleId(aId) );
+    AppendToMsgBuffer( buffer, KNewLine );
+    iFile.Write( buffer );
+    iFile.Flush();
+    
+    CleanupStack::PopAndDestroy(&buffer);
+    }
+
+void CLogPlayerRecorder::OpenL()
+    {
+    _LIT( KLogName, "C:\\logs\\CPix\\LogPlayer\\LogPlayer.txt");
+    
+    if ( !iLogOpen )
+        {
+        User::LeaveIfError( iRfs.Connect() );
+        TInt err = iFile.Open( iRfs, KLogName(), EFileWrite | EFileStream );
+        if ( err != KErrNone )
+            {
+            err = iFile.Create( iRfs, KLogName(), EFileWrite );
+            User::LeaveIfError(err);
+            }
+        
+        iLogOpen = ETrue;
+        }
+    }
+
+HBufC8* CLogPlayerRecorder::SerializeDocumentL( const CSearchDocument& aSearchDocument )
+    {
+    HBufC8* serializedDocument = HBufC8::NewLC( aSearchDocument.Size() );
+    TPtr8 serializedDocumentPtr = serializedDocument->Des();
+    
+    // Initialize a new stream
+    RDesWriteStream stream;
+    stream.Open(serializedDocumentPtr);
+    stream.PushL();
+
+    // Externalize hits to the stream
+    aSearchDocument.ExternalizeL(stream);
+
+    // Commit and destroy the stream
+    stream.CommitL();
+    CleanupStack::PopAndDestroy(&stream);   
+
+    CleanupStack::Pop(serializedDocument);
+    return serializedDocument;
+    }
+
+
+TUint CLogPlayerRecorder::GetHandleId( TUint aId )
+    {
+    TInt index = iHandleArray.Find( aId );
+    if ( index == KErrNotFound )
+        {
+        iHandleArray.Append(aId);
+        index = iHandleArray.Count() - 1;
+        }
+    
+    return index;
+    }
+
+void CLogPlayerRecorder::AppendTimeStampToMsgBuffer( RBuf8& aBuffer )
+    {
+    TTime time;
+    time.HomeTime();
+    
+    TInt64 timeDiff = 0;
+    
+    if  ( iStartTimeStamp == KErrNotFound )
+        {
+        iStartTimeStamp = time.Int64();
+        }
+    else
+        {
+        timeDiff = time.Int64() - iStartTimeStamp;
+        }
+    
+    TBuf8<digitsIn64BitNumber> timeBuffer;
+    timeBuffer.AppendNum( timeDiff );
+    AppendToMsgBuffer( aBuffer, timeBuffer );
+    AppendToMsgBuffer( aBuffer, KSpace );
+    }
+
+void CLogPlayerRecorder::AppendToMsgBuffer( RBuf8& aBuffer, const TDesC8& aData )
+    {
+    TUint requiredLength = aBuffer.Length() + aData.Length();
+    if ( aBuffer.MaxLength() < requiredLength )
+        {
+        aBuffer.ReAlloc(requiredLength);
+        }
+    
+    aBuffer.Append( aData );
+    }
+
+void CLogPlayerRecorder::AppendToMsgBuffer( RBuf8& aBuffer, const TDesC16& aData )
+    {
+    HBufC8* data = HBufC8::New( aData.Length() );
+    if ( !data )
+        {
+        return;
+        }
+    
+    data->Des().Copy( aData );
+    
+    AppendToMsgBuffer(aBuffer, *data);
+    
+    delete data;
+    }
+
+void CLogPlayerRecorder::AppendToMsgBuffer( RBuf8& aBuffer, TInt64 aData )
+    {
+    TUint requiredLength = aBuffer.Length() + digitsIn64BitNumber;
+    if ( aBuffer.MaxLength() < requiredLength )
+        {
+        aBuffer.ReAlloc(requiredLength);
+        }
+    
+    aBuffer.AppendNum( aData );
+    }