void XMLSuiteStarted(const char *suiteName, time_t eventTime) { // log suite name char *output = XMLOpenElement(suiteElementName); XMLOutputter(indentLevel++, YES, output); output = XMLOpenElement(nameElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(suiteName); XMLOutputter(indentLevel, NO, output); // log test name output = XMLCloseElement(nameElementName); XMLOutputter(--indentLevel, YES, output); output = XMLOpenElement(startTimeElementName); XMLOutputter(indentLevel++, NO, output); // log beginning time output = XMLAddContent(TimestampToString(eventTime)); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(startTimeElementName); XMLOutputter(--indentLevel, YES, output); }
void XMLSuiteEnded(int testsPassed, int testsFailed, int testsSkipped, time_t endTime, double totalRuntime) { // log tests passed char *output = XMLOpenElement(testsPassedElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(IntToString(testsPassed)); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(testsPassedElementName); XMLOutputter(--indentLevel, YES, output); // log tests failed output = XMLOpenElement(testsFailedElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(IntToString(testsFailed)); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(testsFailedElementName); XMLOutputter(--indentLevel, YES, output); // log tests skipped output = XMLOpenElement(testsSkippedElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(IntToString(testsSkipped)); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(testsSkippedElementName); XMLOutputter(--indentLevel, YES, output); // log tests skipped output = XMLOpenElement(endTimeElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(TimestampToString(endTime)); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(endTimeElementName); XMLOutputter(--indentLevel, YES, output); // log total runtime output = XMLOpenElement(totalRuntimeElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(DoubleToString(totalRuntime)); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(totalRuntimeElementName); XMLOutputter(--indentLevel, YES, output); output = XMLCloseElement(suiteElementName); XMLOutputter(--indentLevel, YES, output); }
void XMLAssertWithValues(const char *assertName, int assertResult, const char *assertMessage, int actualValue, int excpected, time_t eventTime) { // Log passed asserts only on VERBOSE level if(level <= LOGGER_TERSE && assertResult == ASSERT_PASS) { return ; } char *output = XMLOpenElement(assertElementName); XMLOutputter(indentLevel++, YES, output); // log assert name output = XMLOpenElement(nameElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(assertName); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(nameElementName); XMLOutputter(--indentLevel, YES, output); // log assert result output = XMLOpenElement(resultElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent((assertResult) ? "pass" : "failure"); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(resultElementName); XMLOutputter(--indentLevel, YES, output); // log assert message output = XMLOpenElement(messageElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(assertMessage); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(messageElementName); XMLOutputter(--indentLevel, YES, output); // log event time output = XMLOpenElement(timeElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(TimestampToString(eventTime)); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(timeElementName); XMLOutputter(--indentLevel, YES, output); output = XMLCloseElement(assertElementName); XMLOutputter(--indentLevel, YES, output); }
void XMLTestStarted(const char *testName, const char *suiteName, const char *testDescription, Uint64 execKey, time_t startTime) { char * output = XMLOpenElement(testElementName); XMLOutputter(indentLevel++, YES, output); // log test name output = XMLOpenElement(nameElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(testName); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(nameElementName); XMLOutputter(--indentLevel, YES, output); // log test description output = XMLOpenElement(descriptionElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(testDescription); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(descriptionElementName); XMLOutputter(--indentLevel, YES, output); // log execution key output = XMLOpenElement(execKeyElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(IntToHexString(execKey)); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(execKeyElementName); XMLOutputter(--indentLevel, YES, output); // log start time output = XMLOpenElement(startTimeElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(TimestampToString(startTime)); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(startTimeElementName); XMLOutputter(--indentLevel, YES, output); }
void XMLLog(time_t eventTime, char *fmt, ...) { // create the log message va_list args; char logMessage[1024]; memset(logMessage, 0, sizeof(logMessage)); va_start( args, fmt ); SDL_vsnprintf( logMessage, sizeof(logMessage), fmt, args ); va_end( args ); char *output = XMLOpenElement(logElementName); XMLOutputter(indentLevel++, YES, output); // log message output = XMLOpenElement(messageElementName); XMLOutputter(indentLevel++, NO, output); // fix this here! output = XMLAddContent(logMessage); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(messageElementName); XMLOutputter(--indentLevel, YES, output); // log eventTime output = XMLOpenElement(timeElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(TimestampToString(eventTime)); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(timeElementName); XMLOutputter(--indentLevel, YES, output); output = XMLCloseElement(logElementName); XMLOutputter(--indentLevel, YES, output); }
void ObjectUpdater::Update() { /* // Get pos updates periodically. // TODO Only get objects whose position has changed since last check ? m_posElapsed += TheTimer::Instance()->GetDt(); // TODO These poll periods should depend on network latency/bandwidth static const float POS_UPDATE_PERIOD = 1.0f; // TODO CONFIG if (m_posElapsed > POS_UPDATE_PERIOD) //// && IsOnline()) { //std::cout << "Creating new pos update req...\n"; m_posElapsed = 0; std::string url = TheVe1ReqManager::Instance()->MakeUrl(GET_POSITION_UPDATES); url += "&time=" + TimestampToString(m_timestampPos); //std::cout << "URL: " << url << "\n"; TheVe1ReqManager::Instance()->AddReq(new PosUpdateReq(url)); } */ float dt = TheTimer::Instance()->GetDt(); m_updateElapsed += dt; m_fastUpdateElapsed += dt; static const float UPDATE_PERIOD = 20.0f; // TODO CONFIG static const float FAST_UPDATE_PERIOD = 0.5f; // TODO CONFIG if (m_updateElapsed > UPDATE_PERIOD) { m_updateElapsed = 0; std::string url = TheVe1ReqManager::Instance()->MakeUrl(GET_STATE_UPDATES); url += "&time=" + TimestampToString(m_timestampUpdate); TheVe1ReqManager::Instance()->AddReq(new GetStateUpdatesReq(url)); } else if (m_fastUpdateElapsed > FAST_UPDATE_PERIOD) { //std::cout << "FAST UPDATE CHECK\n"; // Check for updates by checking document - avoid hitting DB so much m_fastUpdateElapsed = 0; std::string url = TheVe1ReqManager::Instance()->MakeUrl(GET_FAST_STATE_UPDATES); TheVe1ReqManager::Instance()->AddReq(new GetFastStateUpdatesReq(url)); } for (PosMap::iterator it = m_posMap.begin(); it != m_posMap.end(); ) { int id = it->first; // The object may exist in ObjectManager but not in Game, as it may not be in local player // location! GameObject* go = TheObjectManager::Instance()->GetGameObject(id); // check if local only -- is this a good idea ?? if (!go) { go = TheGame::Instance()->GetGameObject(id).GetPtr(); } if (go) { const Vec3f& pos = it->second.pos; int location = it->second.location; #ifdef POS_DEBUG std::cout << "Object Updater: updating object " << id << " to pos: " << pos << " loc: " << location << "\n"; #endif Ve1Object* ve1Obj = dynamic_cast<Ve1Object*>(go); if (ve1Obj) { int vloc = ve1Obj->GetLocation(); // If this msg is for local player and we are in a different location, discard this msg. if (ve1Obj->GetId() == GetLocalPlayerId() && vloc != -1) { // Ignore all pos updates for local player ???!? } else if (location == vloc) { #ifdef POS_DEBUG std::cout << "Moving object " << ve1Obj->GetId() << ", within same location " << location << "\n"; #endif ve1Obj->MoveTo(pos); } else { #ifdef POS_DEBUG std::cout << "Moving object " << ve1Obj->GetId() << " to NEW location " << location << "\n"; #endif // TODO We want other players who leave the current location to go to the last place in the // current location before disappearing - so they will appear to go through a portal, not // just vanish. So don't set this pos/location until they have reached their previous // destination in the current location - just continue, so we will check again. // TODO // E.g. if (ve1Obj->IsMoving()) { ++it; continue; } // TODO But watch out, make sure there is a safety net so all objects are correctly located // eventually! ve1Obj->SetPos(pos); ve1Obj->SetLocation(location); } } else { // TODO what to do, can't set location Assert(0); std::cout << "..using SetPos, not a Ve1Object\n"; go->SetPos(pos); } #ifdef WIN32 it = m_posMap.erase(it); #else m_posMap.erase(it); ++it; #endif } else { //std::cout << "No GameObject with ID " << id << "\n"; ++it; } } for (KeyValMap::iterator it = m_keyvalMap.begin(); it != m_keyvalMap.end(); ) { int id = it->first.first; GameObject* go = TheGame::Instance()->GetGameObject(id); Ve1Object* ve1Obj = dynamic_cast<Ve1Object*>(go); Assert(!go || (go && ve1Obj)); if (ve1Obj) { const std::string& key = it->first.second; const std::string& val = it->second; //std::cout << "Object Updater: updating object " << id << " key: " << key << " val: " << val << "\n"; ve1Obj->SetKeyVal(key, val); #ifdef WIN32 it = m_keyvalMap.erase(it); #else m_keyvalMap.erase(it); ++it; #endif } else { ++it; } } }
void CreateAndWriteRecordForSession() { FGuid SessionId; if (FGuid::Parse(FEngineAnalytics::GetProvider().GetSessionID(), SessionId)) { // convert session guid to one without braces or other chars that might not be suitable for storage CurrentSession.SessionId = SessionId.ToString(EGuidFormats::DigitsWithHyphens); } else { CurrentSession.SessionId = FEngineAnalytics::GetProvider().GetSessionID(); } CurrentSession.EngineVersion = FEngineVersion::Current().ToString(EVersionComponent::Changelist); CurrentSession.Timestamp = FDateTime::UtcNow(); CurrentSession.bCrashed = false; CurrentSession.bIsDebugger = FPlatformMisc::IsDebuggerPresent(); CurrentSessionSectionName = GetStoreSectionString(CurrentSession.SessionId); FString IsDebuggerString = CurrentSession.bIsDebugger ? EditorAnalyticsDefs::TrueValueString : EditorAnalyticsDefs::FalseValueString; FPlatformMisc::SetStoredValue(EditorAnalyticsDefs::StoreId, CurrentSessionSectionName, EditorAnalyticsDefs::CrashStoreKey, EditorAnalyticsDefs::FalseValueString); FPlatformMisc::SetStoredValue(EditorAnalyticsDefs::StoreId, CurrentSessionSectionName, EditorAnalyticsDefs::EngineVersionStoreKey, CurrentSession.EngineVersion); FPlatformMisc::SetStoredValue(EditorAnalyticsDefs::StoreId, CurrentSessionSectionName, EditorAnalyticsDefs::TimestampStoreKey, TimestampToString(CurrentSession.Timestamp)); FPlatformMisc::SetStoredValue(EditorAnalyticsDefs::StoreId, CurrentSessionSectionName, EditorAnalyticsDefs::DebuggerStoreKey, IsDebuggerString); SessionRecords.Add(CurrentSession); }
void Heartbeat() { if (!FEngineAnalytics::IsAvailable()) { return; } if (!bInitialized) { // Try late initialization const bool bWaitForLock = false; Initialize(bWaitForLock); } // Update timestamp in the session record for this session if (bInitialized) { CurrentSession.Timestamp = FDateTime::UtcNow(); FPlatformMisc::SetStoredValue(EditorAnalyticsDefs::StoreId, CurrentSessionSectionName, EditorAnalyticsDefs::TimestampStoreKey, TimestampToString(CurrentSession.Timestamp)); } }
void XMLTestEnded(const char *testName, const char *suiteName, int testResult, time_t endTime, double totalRuntime) { // Log test result char *output = XMLOpenElement(resultElementName); XMLOutputter(indentLevel++, NO, output); switch(testResult) { case TEST_RESULT_PASS: output = XMLAddContent("passed"); break; case TEST_RESULT_FAILURE: output = XMLAddContent("failed"); break; case TEST_RESULT_NO_ASSERT: output = XMLAddContent("failed"); break; case TEST_RESULT_SKIPPED: output = XMLAddContent("skipped"); break; case TEST_RESULT_KILLED: output = XMLAddContent("failed"); break; case TEST_RESULT_SETUP_FAILURE: output = XMLAddContent("failed"); break; } XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(resultElementName); XMLOutputter(--indentLevel, YES, output); // Log description of test result. Why the test failed, // if there's some specific reason output = XMLOpenElement(resultDescriptionElementName); XMLOutputter(indentLevel++, NO, output); switch(testResult) { case TEST_RESULT_PASS: case TEST_RESULT_FAILURE: case TEST_RESULT_SKIPPED: output = XMLAddContent(""); break; case TEST_RESULT_NO_ASSERT: output = XMLAddContent("No assert"); break; case TEST_RESULT_KILLED: output = XMLAddContent("Timeout exceeded"); break; case TEST_RESULT_SETUP_FAILURE: output = XMLAddContent("Setup failure, couldn't be executed"); break; } XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(resultDescriptionElementName); XMLOutputter(--indentLevel, YES, output); // log total runtime output = XMLOpenElement(endTimeElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(TimestampToString(endTime)); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(endTimeElementName); XMLOutputter(--indentLevel, YES, output); // log total runtime output = XMLOpenElement(totalRuntimeElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(DoubleToString(totalRuntime)); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(totalRuntimeElementName); XMLOutputter(--indentLevel, YES, output); output = XMLCloseElement(testElementName); XMLOutputter(--indentLevel, YES, output); }
void XMLRunEnded(int testCount, int suiteCount, int testPassCount, int testFailCount, int testSkippedCount, time_t endTime, double totalRuntime) { // log suite count char *output = XMLOpenElement(numSuitesElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(IntToString(suiteCount)); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(numSuitesElementName); XMLOutputter(--indentLevel, YES, output); // log test count output = XMLOpenElement(numTestElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(IntToString(testCount)); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(numTestElementName); XMLOutputter(--indentLevel, YES, output); // log passed test count output = XMLOpenElement(numPassedTestsElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(IntToString(testPassCount)); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(numPassedTestsElementName); XMLOutputter(--indentLevel, YES, output); // log failed test count output = XMLOpenElement(numFailedTestsElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(IntToString(testFailCount)); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(numFailedTestsElementName); XMLOutputter(--indentLevel, YES, output); // log skipped test count output = XMLOpenElement(numSkippedTestsElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(IntToString(testSkippedCount)); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(numSkippedTestsElementName); XMLOutputter(--indentLevel, YES, output); // log end tite output = XMLOpenElement(endTimeElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(TimestampToString(endTime)); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(endTimeElementName); XMLOutputter(--indentLevel, YES, output); // log total runtime output = XMLOpenElement(totalRuntimeElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(DoubleToString(totalRuntime)); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(totalRuntimeElementName); XMLOutputter(--indentLevel, YES, output); output = XMLCloseDocument(documentRoot); XMLOutputter(--indentLevel, YES, output); // close the log file fclose(logFile); }
void XMLRunStarted(int parameterCount, char *runnerParameters[], char *runSeed, time_t eventTime, LoggerData *data) { // Set up the logging destination if(data->stdoutEnabled) { logFile = stdout; } else { logFile = fopen(data->filename, "w"); if(logFile == NULL) { fprintf(stderr, "Log file %s couldn't opened\n", data->filename); exit(3); } } // Set up the style sheet char *xslStylesheet = (char *)data->custom; level = data->level; //printf("Debug: %d == %d\n", level, data->level); char *output = XMLOpenDocument(documentRoot, xslStylesheet); XMLOutputter(indentLevel++, YES, output); // log harness parameters output = XMLOpenElement(parametersElementName); XMLOutputter(indentLevel++, YES, output); int counter = 0; for(counter = 0; counter < parameterCount; counter++) { char *parameter = runnerParameters[counter]; output = XMLOpenElement(parameterElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(parameter); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(parameterElementName); XMLOutputter(--indentLevel, YES, output); } output = XMLCloseElement(parametersElementName); XMLOutputter(--indentLevel, YES, output); // log seed output = XMLOpenElement(seedElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(runSeed); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(seedElementName); XMLOutputter(--indentLevel, YES, output); // log start time output = XMLOpenElement(startTimeElementName); XMLOutputter(indentLevel++, NO, output); output = XMLAddContent(TimestampToString(eventTime)); XMLOutputter(indentLevel, NO, output); output = XMLCloseElement(startTimeElementName); XMLOutputter(--indentLevel, YES, output); }