MongodbObject * GameCore::CreateTestDataObject(const String &testTimeString, const String &runTime, TestData *testData) { MongodbObject *logObject = new MongodbObject(); if(logObject) { logObject->SetObjectName(testTimeString); logObject->AddString(String("Owner"), TEST_OWNER); logObject->AddString(String("RunTime"), runTime); logObject->AddInt32(String("DeviceFamily"), (int32)Core::Instance()->GetDeviceFamily()); logObject->AddInt64(String("TotalTime"), testData->totalTime); logObject->AddInt64(String("MinTime"), testData->minTime); logObject->AddInt64(String("MaxTime"), testData->maxTime); logObject->AddInt32(String("MaxTimeIndex"), testData->maxTimeIndex); logObject->AddInt64(String("StartTime"), testData->startTime); logObject->AddInt64(String("EndTime"), testData->endTime); logObject->AddInt32(String("RunCount"), testData->runCount); if(testData->runCount) { logObject->AddDouble(String("Average"), (double)testData->totalTime / (double)testData->runCount); } else { logObject->AddDouble(String("Average"), (double)0.0f); } logObject->Finish(); } return logObject; }
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; }