Beispiel #1
0
inline StringBuffer &endpointXML(IConstRoxieControlEndpointInfo &ep, StringBuffer &xml)
{
    appendXMLOpenTag(xml, "EndPoint", NULL, false);
    appendXMLAttr(xml, "address", ep.getAddress());
    if (!ep.getAttached_isNull())
        appendXMLAttr(xml, "attached", ep.getAttached() ? "true" : "false");
    appendXMLAttr(xml, "hash", ep.getStateHash());
    xml.append("/>");
    return xml;
}
unsigned CLoggingManager::serializeLogRequestContent(IEspUpdateLogRequestWrap* request, const char* GUID, StringBuffer& logData)
{
    appendXMLTag(logData, LOGREQUEST_GUID, GUID);

    const char* option = request->getOption();
    if (!isEmptyString(option))
        appendXMLTag(logData, LOGREQUEST_OPTION, option);

    appendXMLOpenTag(logData, LOGREQUEST);

    const char* logRequest = request->getUpdateLogRequest();
    MemoryBuffer memBuf;
    LZWCompress(logRequest, strlen(logRequest), memBuf, 0x100);
    JBASE64_Encode(memBuf.toByteArray(), memBuf.length(), logData);

    appendXMLCloseTag(logData, LOGREQUEST);

    return logData.length();
}
bool CLoggingManager::updateLog(IEspContext* espContext, IEspUpdateLogRequestWrap& req, IEspUpdateLogResponse& resp)
{
    if (!initialized)
        throw MakeStringException(-1,"LoggingManager not initialized");

    try
    {
        if (espContext)
            espContext->addTraceSummaryTimeStamp(LogMin, "LMgr:startQLog");

        if (oneTankFile)
        {
            Owned<CLogRequestInFile> reqInFile = new CLogRequestInFile();
            if (!saveToTankFile(req, reqInFile))
                throw MakeStringException(-1, "LoggingManager: failed in saveToTankFile().");

            //Build new log request for logging agents
            StringBuffer logContent, v;
            appendXMLOpenTag(logContent, LOGCONTENTINFILE);
            appendXMLTag(logContent, LOGCONTENTINFILE_FILENAME, reqInFile->getFileName());
            appendXMLTag(logContent, LOGCONTENTINFILE_FILEPOS, v.append(reqInFile->getPos()));
            appendXMLTag(logContent, LOGCONTENTINFILE_FILESIZE, v.clear().append(reqInFile->getSize()));
            appendXMLTag(logContent, LOGREQUEST_GUID, reqInFile->getGUID());
            appendXMLCloseTag(logContent, LOGCONTENTINFILE);

            Owned<IEspUpdateLogRequest> logRequest = new CUpdateLogRequest("", "");
            logRequest->setOption(reqInFile->getOption());
            logRequest->setLogContent(logContent);
            for (unsigned int x = 0; x < loggingAgentThreads.size(); x++)
            {
                IUpdateLogThread* loggingThread = loggingAgentThreads[x];
                if (loggingThread->hasService(LGSTUpdateLOG))
                {
                    loggingThread->queueLog(logRequest);
                }
            }
        }
        else
        {
            for (unsigned int x = 0; x < loggingAgentThreads.size(); x++)
            {
                IUpdateLogThread* loggingThread = loggingAgentThreads[x];
                if (loggingThread->hasService(LGSTUpdateLOG))
                {
                    loggingThread->queueLog(&req);
                }
            }
        }
        if (espContext)
            espContext->addTraceSummaryTimeStamp(LogMin, "LMgr:endQLog");
    }
    catch (IException* e)
    {
        StringBuffer errorStr;
        e->errorMessage(errorStr);
        ERRLOG("Failed to update log: %s",errorStr.str());
        resp.setStatusCode(-1);
        resp.setStatusMessage(errorStr.str());
        e->Release();
    }
    return true;
}