Пример #1
0
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);
}
Пример #2
0
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);
}
Пример #3
0
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);
}
Пример #4
0
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);
}
Пример #5
0
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);
}
Пример #6
0
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));
		}
	}
Пример #9
0
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);
}
Пример #10
0
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);
}
Пример #11
0
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);
}