⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 staftraceservice.cpp

📁 Software Testing Automation Framework (STAF)的开发代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*****************************************************************************//* Software Testing Automation Framework (STAF)                              *//* (C) Copyright IBM Corp. 2004, 2005                                        *//*                                                                           *//* This software is licensed under the Common Public License (CPL) V1.0.     *//*****************************************************************************/#include "STAF.h"#include "STAFProc.h"#include "STAFProcUtil.h"#include "STAFUtil.h"#include "STAFTrace.h"#include "STAFServiceManager.h"#include "STAFTraceService.h"#include "STAFThreadManager.h"static const int kColonColumn = 21;static const STAFString kEnabledString = "Enabled";static const STAFString kDisabledString = "Disabled";STAFTraceService::STAFTracepointMap        STAFTraceService::kSTAFTracepointMap =        STAFTraceService::fillSTAFTracepointMap();STAFTraceService::STAFTracepointNameMap        STAFTraceService::kSTAFTracepointNameMap =        STAFTraceService::fillSTAFTracepointNameMap();STAFTraceService::STAFTraceService() : STAFService("Trace"){    // enable|disable options    fEnableDisableParser.addOption("ENABLE", 1,        STAFCommandParser::kValueNotAllowed);    fEnableDisableParser.addOption("DISABLE", 1,        STAFCommandParser::kValueNotAllowed);    fEnableDisableParser.addOption("ALL", 1,        STAFCommandParser::kValueNotAllowed);    fEnableDisableParser.addOption("TRACEPOINTS", 1,        STAFCommandParser::kValueAllowed);    fEnableDisableParser.addOption("TRACEPOINT", 0,        STAFCommandParser::kValueRequired);    fEnableDisableParser.addOption("SERVICES", 1,        STAFCommandParser::kValueAllowed);    fEnableDisableParser.addOption("SERVICE", 0,        STAFCommandParser::kValueRequired);    // enable|disable groups    fEnableDisableParser.addOptionGroup("ENABLE DISABLE", 1, 1);    // enable|disable needs    fEnableDisableParser.addOptionNeed("ENABLE DISABLE",        "ALL TRACEPOINT SERVICE TRACEPOINTS SERVICES");    //SET options    fSetParser.addOption("SET", 1,        STAFCommandParser::kValueNotAllowed);    fSetParser.addOption("DESTINATION", 1,        STAFCommandParser::kValueNotAllowed);    fSetParser.addOption("TO", 1,        STAFCommandParser::kValueNotAllowed);    fSetParser.addOption("STDOUT", 1,        STAFCommandParser::kValueNotAllowed);    fSetParser.addOption("STDERR", 1,        STAFCommandParser::kValueNotAllowed);    fSetParser.addOption("FILE", 1,        STAFCommandParser::kValueRequired);    fSetParser.addOption("DEFAULTSERVICESTATE", 1,        STAFCommandParser::kValueRequired);    //SET groups    fSetParser.addOptionGroup("STDOUT STDERR FILE", 0, 1);    fSetParser.addOptionGroup("DEFAULTSERVICESTATE DESTINATION", 1, 1);    //SET needs    fSetParser.addOptionNeed("SET", "TO DEFAULTSERVICESTATE");    fSetParser.addOptionNeed("DESTINATION", "SET");    fSetParser.addOptionNeed("TO", "DESTINATION");    fSetParser.addOptionNeed("TO", "STDOUT STDERR FILE");    fSetParser.addOptionNeed("STDOUT STDERR FILE DEFAULTSERVICESTATE", "SET");    //LIST options    fListParser.addOption("LIST", 1,        STAFCommandParser::kValueNotAllowed);    fListParser.addOption("SETTINGS", 1,        STAFCommandParser::kValueNotAllowed);    //LIST groups    fListParser.addOptionGroup("LIST", 1, 1);    fListParser.addOptionGroup("SETTINGS", 0, 1);    //LIST needs    fListParser.addOptionNeed("SETTINGS", "LIST");    // Construct map class for a trace info    fTraceInfoClass = STAFMapClassDefinition::create(        "STAF/Service/Trace/TraceInfo");    fTraceInfoClass->addKey("tracingTo", "Tracing To");    fTraceInfoClass->addKey("defaultServiceState", "Default Service State");    fTraceInfoClass->addKey("tracePoints", "Trace Points");    fTraceInfoClass->addKey("services", "Services");    // Construct map class for a tracepoint states    fTracepointClass = STAFMapClassDefinition::create(        "STAF/Service/Trace/Tracepoint");    fTracepointClass->addKey("INFO", STAFString("Info"));    fTracepointClass->addKey("WARNING", STAFString("Warning"));    fTracepointClass->addKey("ERROR", STAFString("Error"));    fTracepointClass->addKey("SERVICEREQUEST", STAFString("ServiceRequest"));    fTracepointClass->addKey("SERVICERESULT", STAFString("ServiceResult"));    fTracepointClass->addKey("SERVICEERROR", STAFString("ServiceError"));    fTracepointClass->addKey("SERVICEACCESSDENIED",                             STAFString("ServiceAccessDenied"));    //fTracepointClass->addKey("serviceManagement",    //                         STAFString("ServiceManagement"));    fTracepointClass->addKey("REMOTEREQUESTS", STAFString("RemoteRequests"));    fTracepointClass->addKey("REGISTRATION", STAFString("Registration"));    fTracepointClass->addKey("DEPRECATED", STAFString("Deprecated"));    fTracepointClass->addKey("DEBUG", STAFString("Debug"));    fTracepointClass->addKey("SERVICECOMPLETE", STAFString("ServiceComplete"));}STAFServiceResult STAFTraceService::acceptRequest(    const STAFServiceRequest &requestInfo){    STAFString action = requestInfo.fRequest.subWord(0, 1).lowerCase();    if ((action == "enable") | (action == "disable"))            return handleEnableDisable(requestInfo);    else if (action == "set")   return handleSet(requestInfo);    else if (action == "list")  return handleList(requestInfo);    else if (action == "purge") return handlePurge(requestInfo);    else if (action == "help")    return handleHelp(requestInfo);    else return kSTAFInvalidRequestString;}STAFServiceResult STAFTraceService::handleList(    const STAFServiceRequest &requestInfo){    // Verify that the requesting machine/user has at least trust level 2    IVALIDATE_TRUST(2, "LIST");    // Parse the request    STAFCommandParseResultPtr parsedResult = fListParser.parse(        requestInfo.fRequest);    if (parsedResult->rc != kSTAFOk)    {        return STAFServiceResult(kSTAFInvalidRequestString,                                 parsedResult->errorBuffer, 0);    }    STAFString errorBuffer;    STAFString traceFilename;    STAFTraceDestination_t traceDestination =         STAFTrace::getTraceDestination(traceFilename);        // Create a marshalled map containing the trace information.    // It will contain a map of the tracepoints and their trace states and    // a map of the services and their trace states.    STAFObjectPtr mc = STAFObject::createMarshallingContext();    mc->setMapClassDefinition(fTraceInfoClass->reference());    mc->setMapClassDefinition(fTracepointClass->reference());        STAFObjectPtr traceInfoMap = fTraceInfoClass->createInstance();    if (traceDestination == kSTAFTraceToStdout)        traceInfoMap->put("tracingTo", STAFString("Stdout"));    else if (traceDestination == kSTAFTraceToStderr)        traceInfoMap->put("tracingTo", STAFString("Stderr"));    else if (traceDestination == kSTAFTraceToFile)        traceInfoMap->put("tracingTo", traceFilename);        if (STAFServiceManager::getDefaultTraceState() ==         STAFServiceManager::kTraceEnabled)        traceInfoMap->put("defaultServiceState", STAFString("Enabled"));    else        traceInfoMap->put("defaultServiceState", STAFString("Disabled"));    STAFObjectPtr tracepointMap = fTracepointClass->createInstance();    STAFTraceService::STAFTracepointMap::iterator tracepointMapIter;    for (tracepointMapIter = kSTAFTracepointMap.begin();         tracepointMapIter != kSTAFTracepointMap.end(); tracepointMapIter++)    {        if (STAFTrace::doTrace(tracepointMapIter->first))            tracepointMap->put(tracepointMapIter->second, kEnabledString);        else            tracepointMap->put(tracepointMapIter->second, kDisabledString);    }    traceInfoMap->put("tracePoints", tracepointMap);       // Construct map class for the service states.  Note that this map    // class definition is dynamically generated based on the services in    // the serviceTraceStatusList at the time of this request.    fServiceClass = STAFMapClassDefinition::create(        "STAF/Service/Trace/Service");    mc->setMapClassDefinition(fServiceClass->reference());    STAFObjectPtr serviceMap = fServiceClass->createInstance();    STAFServiceManager::ServiceTraceStatusList serviceTraceStatusList =        STAFServiceManager::getServiceTraceStatusList();    STAFServiceManager::OrderedServiceList allServiceList =         gServiceManagerPtr->getOrderedServiceListCopy();    STAFServiceManager::ServiceTraceStatusList::iterator traceStatusIter;    for (traceStatusIter = serviceTraceStatusList.begin();         traceStatusIter != serviceTraceStatusList.end(); traceStatusIter++)    {        fServiceClass->addKey(STAFString(traceStatusIter->first),                              STAFString(traceStatusIter->first));        if (traceStatusIter->second == STAFServiceManager::kTraceEnabled)        {            if (allServiceList.find(traceStatusIter->first) ==                allServiceList.end())            {                serviceMap->put(                    STAFString(traceStatusIter->first),                    kEnabledString + STAFString(" (Not registered)"));            }            else            {                serviceMap->put(                    STAFString(traceStatusIter->first), kEnabledString);            }        }        else if (allServiceList.find(traceStatusIter->first) ==                 allServiceList.end())        {            serviceMap->put(                STAFString(traceStatusIter->first),                kDisabledString + STAFString(" (Not registered)"));        }        else        {            serviceMap->put(                STAFString(traceStatusIter->first), kDisabledString);        }    }    traceInfoMap->put("services", serviceMap);    mc->setRootObject(traceInfoMap);    return STAFServiceResult(kSTAFOk, mc->marshall());} STAFServiceResult STAFTraceService::handleSet(    const STAFServiceRequest &requestInfo){    // Verify that the requesting machine/user has at least trust level 5    IVALIDATE_TRUST(5, "SET");    // Parse the request    STAFCommandParseResultPtr parsedResult = fSetParser.parse(        requestInfo.fRequest);    if (parsedResult->rc != kSTAFOk)    {        return STAFServiceResult(kSTAFInvalidRequestString,                                 parsedResult->errorBuffer, 0);    }    STAFString errorBuffer;    DEFINE_VAR_POOL_LIST(varPoolList, varPoolListSize, requestInfo);    STAFString filename;    STAFString result;    STAFRC_t rc = RESOLVE_OPTIONAL_STRING_OPTION("FILE", filename);    if (rc) return STAFServiceResult(kSTAFInvalidRequestString, errorBuffer);    if (parsedResult->optionTimes("DESTINATION") != 0)    {        // Set the trace destination        if (parsedResult->optionTimes("STDOUT"))            STAFTrace::setTraceDestination(kSTAFTraceToStdout);        else if (parsedResult->optionTimes("STDERR"))            STAFTrace::setTraceDestination(kSTAFTraceToStderr);        else if (parsedResult->optionTimes("FILE"))            STAFTrace::setTraceDestination(kSTAFTraceToFile, filename);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -