Esempio n. 1
0
void GameCore::FlushTestResults()
{
    if(!dbClient) return;

    MongodbObject *oldPlatformObject = dbClient->FindObjectByKey(PLATFORM_NAME);
    MongodbObject *newPlatformObject = new MongodbObject();
    
    int64 globalIndex = 0;
    if(oldPlatformObject)
    {
        globalIndex = oldPlatformObject->GetInt64(String("globalIndex"));
        ++globalIndex;
    }
    
    if(newPlatformObject)
    {
        newPlatformObject->SetObjectName(PLATFORM_NAME);
        newPlatformObject->AddInt64(String("globalIndex"), globalIndex);
        
        String testTimeString = Format("%016d", globalIndex);
        
        
        time_t logStartTime = time(0);
        tm* utcTime = localtime(&logStartTime);
        
        
        String runTime = Format("%04d.%02d.%02d:%02d:%02d:%02d",   
                                                utcTime->tm_year + 1900, utcTime->tm_mon + 1, utcTime->tm_mday, 
                                                utcTime->tm_hour, utcTime->tm_min, utcTime->tm_sec);

        for(int32 iScr = 0; iScr < screens.size(); ++iScr)
        {
            int32 count = screens[iScr]->GetTestCount();
            
#if defined (SINGLE_MODE)
            if(screens[iScr]->GetName() == SINGLE_TEST_NAME)
#endif //#if defined (SINGLE_MODE)                    
            {
                MongodbObject *oldScreenObject = CreateSubObject(screens[iScr]->GetName(), oldPlatformObject, true);
                MongodbObject *newScreenObject = new MongodbObject();
                if(newScreenObject)
                {
                    newScreenObject->SetObjectName(screens[iScr]->GetName());
                    
                    for(int32 iTest = 0; iTest < count; ++iTest)
                    {
                        TestData *td = screens[iScr]->GetTestData(iTest);
                        
                        MongodbObject *testObject = CreateSubObject(td->name, oldScreenObject, false);
                        if(testObject)
                        {
                            MongodbObject *testDataObject = CreateTestDataObject(testTimeString, runTime, td);
                            if(testDataObject)
                            {
                                testObject->AddObject(testTimeString, testDataObject);
                                testObject->Finish();
                                
                                SafeRelease(testDataObject);
                            }
                            newScreenObject->AddObject(td->name, testObject);
                            SafeRelease(testObject);
                        }
                    }
                    
                    newScreenObject->Finish();
                    newPlatformObject->AddObject(screens[iScr]->GetName(), newScreenObject);
                    SafeRelease(newScreenObject);
                }
                
                SafeRelease(oldScreenObject);
            }
        }

        newPlatformObject->Finish();
        dbClient->SaveObject(newPlatformObject, oldPlatformObject);    
        SafeRelease(newPlatformObject);
    }
    
    SafeRelease(oldPlatformObject);
}
Esempio n. 2
0
bool GameCore::FlushToDB(const String & levelName, const Map<String, String> &results, const String &imagePath)
{
	if(!dbClient)
		return false;

    Logger::Debug("Sending results to DB...");
    
    MongodbObject *testResultObject = new MongodbObject();
    if(testResultObject)
    {
        testResultObject->SetObjectName(levelName);
        
        Map<String, String>::const_iterator it = results.begin();
        for(; it != results.end(); it++)
        {
            testResultObject->AddString((*it).first, (*it).second);
        }
        
        File * imageFile = File::Create(imagePath, File::READ | File::OPEN);
        if(imageFile)
        {
            uint32 fileSize = imageFile->GetSize();
            uint8 * data = new uint8[fileSize];
            imageFile->Read(data, fileSize);
            testResultObject->AddData("ResultImagePNG", data, fileSize);
            
            SafeDelete(data);
            SafeRelease(imageFile);
        }
        else
        {
            Logger::Debug("Can't read result level sprite!");
        }
        
        testResultObject->Finish();
        
		MongodbObject * currentRunObject = dbClient->FindObjectByKey(Format("%d", currentRunId));
		MongodbObject * newRunObject = new MongodbObject();
		if(newRunObject)
		{
			if(currentRunObject)
			{
				newRunObject->Copy(currentRunObject);
			}
			else
			{
				newRunObject->SetObjectName(Format("%d", currentRunId));
				newRunObject->AddString("DeviceDescription", DeviceInfo::Instance()->GetDeviceDescription());
			}

			newRunObject->AddObject(levelName, testResultObject);
			newRunObject->Finish();
			dbClient->SaveObject(newRunObject, currentRunObject);
			SafeRelease(newRunObject);
		}
		else
		{
			Logger::Debug("Can't create test result object in DB");
			return false;
		}

		SafeRelease(currentRunObject);
		SafeRelease(testResultObject);
    }
    else
    {
        Logger::Debug("Can't create tests results object");
        return false;
    }
    
    Logger::Debug("Results successful sent to DB");
    
    return true;
}