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); }
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; }