Пример #1
0
////////////////////////////////////////////////////////////////////////////////
// Set the trace facility to be used
////////////////////////////////////////////////////////////////////////////////
Uint32 Tracer::setTraceFacility(const String& traceFacility)
{
    Uint32 retCode = 0;
    Tracer* instance = _getInstance();

    if (traceFacility.size() != 0)
    {
        Uint32 index = 0;
        while (TRACE_FACILITY_LIST[index] != 0 )
        {
            if (String::equalNoCase( traceFacility,TRACE_FACILITY_LIST[index]))
            {
                if (index != instance->_traceFacility)
                {
                    instance->_setTraceHandler(index);
                }
                retCode = 1;
                break;
            }
            index++;
        }
    }

    return retCode;
}
Пример #2
0
Logger& Logger::instance(
		std::string,
		size_t level,             //! The logging threshold: every message with a level higher than this threshold will NOT be logged.
		std::string filename,     //! The logging file: If nothing or an empty string is passed, std::cout is the default target for all outputs.
		bool dual
		)
{
	boost::mutex::scoped_lock lock(getInit_mutex());

	if(!_getInstance())
	{
		if ( level > DEBUG3 ) level = DEBUG3;
		_getInstance().reset(new Logger(level, filename, dual));
	}
	return *_getInstance();
}
Пример #3
0
////////////////////////////////////////////////////////////////////////////////
//Set the trace file
////////////////////////////////////////////////////////////////////////////////
Uint32 Tracer::setTraceFile(const char* traceFile)
{
    if (*traceFile == 0)
    {
        return 1;
    }

    Tracer* instance = _getInstance();
    String newTraceFile(traceFile);

    if (instance->_runningOOP)
    {
        newTraceFile.append(".");
        newTraceFile.append(instance->_oopTraceFileExtension);
    }

    if (_isValidTraceFile(newTraceFile))
    {
        instance->_traceFile = newTraceFile;
        instance->_traceHandler->configurationUpdated();
    }
    else
    {
        return 1;
    }


    return 0;

}
Пример #4
0
int main (int argc, char** argv)
{
    String stringVal;
    verbose = (getenv("PEGASUS_TEST_VERBOSE")) ? true : false;

    CIMClient client;
    try
    {
        client.connectLocal ();
    }
    catch (Exception & e)
    {
        PEGASUS_STD (cerr) << e.getMessage () << PEGASUS_STD (endl);
        return -1;
    }

    _enumerateInstanceNames(client);
    _getInstance(client);
    _setProperty(client, 7890);
    _getProperty(client);
    // getProperty() only returns CIMValues of type String.
    value.get(stringVal);
    PEGASUS_TEST_ASSERT(atoi((const char*)stringVal.getCString())==7890);
    _setProperty(client,1234);
    _getProperty(client);
    // getProperty() only returns CIMValues of type String.
    // Verify that setProperty worked as expected.
    value.get(stringVal);
    PEGASUS_TEST_ASSERT(atoi((const char*)stringVal.getCString())==1234);

    return 0;
}
Пример #5
0
////////////////////////////////////////////////////////////////////////////////
// Notify the trare running out of process and provide the trace file extension
// for the out of process trace file.
////////////////////////////////////////////////////////////////////////////////
void Tracer::setOOPTraceFileExtension(const String& oopTraceFileExtension)
{
    Tracer* instance = _getInstance();
    instance->_oopTraceFileExtension = oopTraceFileExtension;
    instance->_runningOOP=true;
    instance->_traceMemoryBufferSize /= PEGASUS_TRC_BUFFER_OOP_SIZE_DEVISOR;

}
Пример #6
0
////////////////////////////////////////////////////////////////////////////////
//Called by all trace interfaces using a character string without format string
//to log message to trace file
////////////////////////////////////////////////////////////////////////////////
void Tracer::_traceCString(
    const TraceComponentId traceComponent,
    const char* message,
    const char* cstring)
{
    char* completeMessage;
    Uint32 msgLen;
    Uint32 usec,sec;

    // Get the current system time and prepend to message
    System::getCurrentTimeUsec(sec,usec);

    //
    // Allocate completeMessage.
    // Needs to be updated if additional info is added
    //

    // Construct the message header
    // The message header is in the following format
    // timestamp: <component name> [file name:line number]
    //
    // Format string length calculation:
    //        11(sec)+ 2('s-')+11(usec)+4('us: ')+1(' ')+1(\0) = 30
    if (*message != '\0')
    {
       completeMessage = new char [strlen(message) +
           strlen(TRACE_COMPONENT_LIST[traceComponent]) +
           strlen(cstring) + 30];

        msgLen = sprintf(completeMessage, "%us-%uus: %s %s%s", sec, usec,
            TRACE_COMPONENT_LIST[traceComponent], message, cstring);
    }
    else
    {
        //
        // Allocate messageHeader.
        // Needs to be updated if additional info is added
        //
        // Format string length calculation:
        //        11(sec)+2('s-')+11(usec)+4('us: ')+
        //        +2(' [')+1(':')+3(']: ')+1(\0) = 35
        completeMessage = new char[2 * _STRLEN_MAX_PID_TID +
            strlen(TRACE_COMPONENT_LIST[traceComponent]) +
            strlen(cstring) +35];

        msgLen = sprintf(completeMessage, "%us-%uus: %s [%u:%s] %s", sec, usec,
            TRACE_COMPONENT_LIST[traceComponent],
            System::getPID(), Threads::id().buffer,
            cstring);
    }

    // Call trace file handler to write message
    _getInstance()->_traceHandler->handleMessage(completeMessage,msgLen);

    delete [] completeMessage;
}
Пример #7
0
////////////////////////////////////////////////////////////////////////////////
//Validate the trace file
////////////////////////////////////////////////////////////////////////////////
Boolean Tracer::isValidFileName(const char* filePath)
{
    Tracer* instance = _getInstance();
    String testTraceFile(filePath);

    if (instance->_runningOOP)
    {
        testTraceFile.append(".");
        testTraceFile.append(instance->_oopTraceFileExtension);
    }

    return _isValidTraceFile(testTraceFile);
}
Пример #8
0
//set the trace file number for rolling only when the tracing is on a file
void Tracer::setMaxTraceFileNumber(const String &maxTraceFileNumber)
{
    Tracer *inst = _getInstance();

    if ( inst->getTraceFacility() == TRACE_FACILITY_FILE )
    {
        Uint32 numberOfTraceFiles = 0;
        tracePropertyToUint32(maxTraceFileNumber, numberOfTraceFiles);

        //Safe to typecast here as we know that handler is of type file
        TraceFileHandler *hdlr = (TraceFileHandler*) (inst->_traceHandler);

        hdlr->setMaxTraceFileNumber(numberOfTraceFiles);
     }
}
Пример #9
0
//set the trace file size only when the tracing is on a file
void Tracer::setMaxTraceFileSize(const String &size) 
{  
    Tracer *inst = _getInstance();
    if ( inst->getTraceFacility() == TRACE_FACILITY_FILE )
    {
        Uint32 traceFileSizeKBytes = 0;
        tracePropertyToUint32(size, traceFileSizeKBytes);

        //Safe to typecast here as we know that handler is of type file
        TraceFileHandler *hdlr = (TraceFileHandler*) (inst->_traceHandler);

        hdlr->setMaxTraceFileSize(traceFileSizeKBytes*1024);

    }
} 
Пример #10
0
/**{{{ proto Mylogs::logInit
*/
PHP_METHOD(Mylogs, logInit) {
	long level, maxNum, maxSize;
	char  *logPath, *fileName;
	int logPath_len, fileName_len;
	zval *instance = _getInstance();
	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lllss", &level, &maxNum, &maxSize, &logPath, &logPath_len, &fileName, &fileName_len) == FAILURE)
		return;

	zend_update_property_long(mylogs_ce, instance, ZEND_STRL(MYLOGS_LEVEL), level TSRMLS_CC);
	zend_update_property_long(mylogs_ce, instance, ZEND_STRL(MYLOGS_MAXFILE_NUM), maxNum TSRMLS_CC);
	zend_update_property_long(mylogs_ce, instance, ZEND_STRL(MYLOGS_MAXFILE_SIZE), maxSize TSRMLS_CC);
	zend_update_property_string(mylogs_ce, instance, ZEND_STRL(MYLOGS_PATH), logPath TSRMLS_CC);
	zend_update_property_string(mylogs_ce, instance, ZEND_STRL(MYLOGS_FILE_NAME), fileName TSRMLS_CC);

	RETURN_TRUE;
}
Пример #11
0
////////////////////////////////////////////////////////////////////////////////
// Set the size of the memory trace buffer
////////////////////////////////////////////////////////////////////////////////
Boolean Tracer::setTraceMemoryBufferSize(Uint32 bufferSize)
{
    Tracer* instance = _getInstance();
    if (instance->_runningOOP)
    {
        // in OOP we reduce the trace memory buffer by factor
        // PEGASUS_TRC_BUFFER_OOP_SIZE_DEVISOR
        instance->_traceMemoryBufferSize =
            bufferSize / PEGASUS_TRC_BUFFER_OOP_SIZE_DEVISOR;
    }
    else
    {
        instance->_traceMemoryBufferSize = bufferSize;
    }

    // If we decide to dynamically change the trace buffer size,
    // this is where it needs to be implemented.
    return true;
}
Пример #12
0
 /* assume lock is held */
 Category& HierarchyMaintainer::_getInstance(const std::string& name) {
     Category* result;
     result = _getExistingInstance(name);
     
     if (NULL == result) {            
         if (name == "") {
             result = make_category(name, NULL, Priority::INFO);
         } else {
             std::string parentName;
             size_t dotIndex = name.find_last_of('.');
             if (name.length() <= dotIndex) {
                 parentName = "";
             } else {
                 parentName = name.substr(0, dotIndex);
             }
             Category& parent = _getInstance(parentName);
             result = make_category(name, &parent, Priority::NOTSET);
         }	  
         _categoryMap[name] = result; 
     }
     return *result;
 }
Пример #13
0
////////////////////////////////////////////////////////////////////////////////
//Traces the given string - Overloaded to include the fileName and line number
//of trace origin.
////////////////////////////////////////////////////////////////////////////////
void Tracer::traceCString(
    const char* fileName,
    const Uint32 lineNum,
    const TraceComponentId traceComponent,
    const char* cstring)
{
    char* message;

    Uint32 msgLen;
    Uint32 usec,sec;

    // Get the current system time
    System::getCurrentTimeUsec(sec,usec);

    //
    // Allocate memory for the message string
    // Needs to be updated if additional info is added
    //
    message = new char [strlen(fileName) +
        _STRLEN_MAX_UNSIGNED_INT + (_STRLEN_MAX_PID_TID * 2) + 8 +
        strlen(TRACE_COMPONENT_LIST[traceComponent]) +
        strlen(cstring) + 30];

    msgLen = sprintf(message, "%us-%uus: %s [%u:%s:%s:%u]: %s",
        sec,
        usec,
        TRACE_COMPONENT_LIST[traceComponent],
        System::getPID(),
        Threads::id().buffer,
        fileName,
        lineNum,
        cstring);

    // Call trace file handler to write message
    _getInstance()->_traceHandler->handleMessage(message,msgLen);

    delete [] message;
}
Пример #14
0
/** {{{ Mylogs::err
*/
PHP_METHOD(Mylogs, err) {
	char *msg;
	int msg_len;
	zval *instance, *level, **_level;
	zend_class_entry *ce;

	if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &msg, &msg_len) == FAILURE)
		return;	

	instance = _getInstance();
	ce = Z_OBJCE_P(instance);
	level = zend_read_property(mylogs_ce, instance, ZEND_STRL(MYLOGS_LEVEL), 0 TSRMLS_CC);
	zend_hash_find(&ce->constants_table, ZEND_STRS(LOG_ERR), (void **)&_level);

	if(Z_LVAL_P(level) > Z_LVAL_PP(_level)) {
		RETURN_TRUE;
	}

	if(_log(msg) == SUCCESS) {
		RETURN_TRUE;
	}
	RETURN_FALSE;
}
Пример #15
0
 Category& HierarchyMaintainer::getInstance(const std::string& name) {
     threading::ScopedLock lock(_categoryMutex);
     return _getInstance(name);
 }
Пример #16
0
/**{{{ proto Mylogs::getInstance
* singleton pattern, to get the instance
*/
PHP_METHOD(Mylogs, getInstance) {
	zval *instance = _getInstance();
	RETURN_ZVAL(instance, 1, 0);
}
Пример #17
0
/**{{{
*/
int _log(char *str) {
	zval *logPath, *fileName, *maxSize, *maxNum, *instance;
	char *fileHandler = NULL, *fileHandlerTmp = NULL, *fileHandlerTmpNew = NULL, *format_time = NULL, *format_str = NULL;
	struct stat buf;
	FILE *fp = NULL;

	instance = _getInstance();
	maxNum = zend_read_property(mylogs_ce, instance, ZEND_STRL(MYLOGS_MAXFILE_NUM), 0 TSRMLS_CC);
	maxSize = zend_read_property(mylogs_ce, instance, ZEND_STRL(MYLOGS_MAXFILE_SIZE), 0 TSRMLS_CC);
	logPath = zend_read_property(mylogs_ce, instance, ZEND_STRL(MYLOGS_PATH), 0 TSRMLS_CC);
	fileName = zend_read_property(mylogs_ce, instance, ZEND_STRL(MYLOGS_FILE_NAME), 0 TSRMLS_CC);

	format_time = _formatTime();

	spprintf(&fileHandler, 0, "%s%s.log", Z_STRVAL_P(logPath), Z_STRVAL_P(fileName));

	spprintf(&format_str, 0, "%s %s\n", format_time, str);
	_efree_char(format_time);


	if(VCWD_ACCESS(fileHandler, 0) == F_OK)
	{
		stat(fileHandler, &buf);
		if(buf.st_size >= Z_LVAL_P(maxSize))
		{
			int index = 1;
			for(; index < Z_LVAL_P(maxNum); index++)
			{
				spprintf(&fileHandlerTmp, 0, "%s%s_%d.log", Z_STRVAL_P(logPath), Z_STRVAL_P(fileName), index);
				if(VCWD_ACCESS(fileHandlerTmp, 0) != F_OK) {
					break;
				} else {
					_efree_char(fileHandlerTmp);
				}
			}

			if(index == Z_LVAL_P(maxNum))
				index--;
			for(; index >= 1; index--)
			{
				spprintf(&fileHandlerTmpNew, 0, "%s%s_%d.log", Z_STRVAL_P(logPath), Z_STRVAL_P(fileName), index);
				spprintf(&fileHandlerTmp, 0, "%s%s_%d.log", Z_STRVAL_P(logPath), Z_STRVAL_P(fileName), (index - 1));	
				VCWD_RENAME(fileHandlerTmp, fileHandlerTmpNew);
				_efree_char(fileHandlerTmp);
				_efree_char(fileHandlerTmpNew);
			}
			spprintf(&fileHandlerTmpNew, 0, "%s%s_1.log", Z_STRVAL_P(logPath), Z_STRVAL_P(fileName));
			VCWD_RENAME(fileHandler, fileHandlerTmpNew);
			_efree_char(fileHandlerTmpNew);
		}
	}

	if(fileHandler != NULL) {
		fp = VCWD_FOPEN(fileHandler, "a+b");
		efree(fileHandler);
	}

	if(fp == NULL)
	{
		_efree_char(format_str);
		return FAILURE;
	}
	fputs(format_str, fp);
	_efree_char(format_str);
	fclose(fp);
	return SUCCESS;
}
Пример #18
0
////////////////////////////////////////////////////////////////////////////////
// Flushes the trace buffer to traceFilePath. This method will only
// have an effect when traceFacility=Memory.
////////////////////////////////////////////////////////////////////////////////
void Tracer::flushTrace()
{
    _getInstance()->_traceHandler->flushTrace();
    return;
}
Пример #19
0
////////////////////////////////////////////////////////////////////////////////
// Get the trace facility in use
////////////////////////////////////////////////////////////////////////////////
Uint32 Tracer::getTraceFacility()
{
    return _getInstance()->_traceFacility;
}
Пример #20
0
int main(const int argc, const char **argv)
{
  // error if no args
  if (argv[1] == 0)
  {
    _usage();
    return 1;
  }

  SSLContext *sslContext = 0; // initialized for unencrypted connection
  _c.setTimeout(TIMEOUT);

  // Get hostname from environment, if defined
  char *p = getenv("CIM_HOST");
  if (p) _hostName = p;

  // Get port number, if defined
  char *pn = getenv("CIM_PORT");
  if (pn) _portNumber = atol(pn);

  if (p)
  {
    // hostname was specified, we will not connect local
    // so decide whether encrypted or not
    char *s = getenv("CIM_NOSSL");
    if (s) // don't use ssl (not encrypted)
    {
      if (!pn) _portNumber = 5988; // use 5988 if no port specified
    }
    else
    {
      try
      {
        sslContext = new SSLContext(PEGASUS_SSLCLIENT_CERTIFICATEFILE,
                                    verifyServerCertificate,
                                    PEGASUS_SSLCLIENT_RANDOMFILE
                                    /* "/var/opt/wbem/ssl.rnd" */);
      }
      catch (Exception &e)
      {
        cerr << e.getMessage() << endl;
        return 1;
      }
      if (!pn) _portNumber = 5989; // use 5989 if no port specified
    }
  }

  // Get namespace from environment or use default
  p = getenv("CIM_NAMESPACE");
  _nameSpace = (p==0)? DEFAULT_NAMESPACE:p;
  
  // Get user from environment or don't specify
  p = getenv("CIM_USER");
  _userName = (p==0)? String::EMPTY : p;
  
  // Get password from environment or use empty
  p = getenv("CIM_PASSWORD");
  _passWord = (p==0)? String::EMPTY : p;

  try
  {
    if (String::equal(_hostName,String::EMPTY)) _c.connectLocal();
    else
    // hostname was specified; do remote connect
    {
      if (sslContext) _c.connect(_hostName, _portNumber, *sslContext, _userName, _passWord);
      else _c.connect(_hostName, _portNumber, _userName, _passWord);
    }
  }
  catch(Exception& e)
  {
    cerr << e.getMessage() << endl;
    return 1;
  }

  // command is first arg
  const char *cmd = argv[1];

  if (String::equalNoCase(cmd,"getClass") ||
      String::equalNoCase(cmd,"gc"))
    return _getClass(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"enumerateClasses") ||
           String::equalNoCase(cmd,"ec"))
    return _enumerateClasses(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"enumerateClassNames") ||
           String::equalNoCase(cmd,"ecn"))
    return _enumerateClassNames(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"getInstance") ||
           String::equalNoCase(cmd,"gi"))
    return _getInstance(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"enumerateInstances") ||
           String::equalNoCase(cmd,"ei"))
    return _enumerateInstances(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"enumerateInstanceNames") ||
           String::equalNoCase(cmd,"ein"))
    return _enumerateInstanceNames(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"getProperty") ||
           String::equalNoCase(cmd,"gp"))
    return _getProperty(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"setProperty") ||
           String::equalNoCase(cmd,"sp"))
    return _setProperty(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"invokeMethod") ||
           String::equalNoCase(cmd,"im"))
    return _invokeMethod(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"createClass") ||
           String::equalNoCase(cmd,"cc"))
    return _createClass(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"modifyClass") ||
           String::equalNoCase(cmd,"mc"))
    return _modifyClass(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"deleteClass") ||
           String::equalNoCase(cmd,"dc"))
    return _deleteClass(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"createInstance") ||
           String::equalNoCase(cmd,"ci"))
    return _createInstance(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"modifyInstance") ||
           String::equalNoCase(cmd,"mi"))
    return _modifyInstance(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"deleteInstance") ||
           String::equalNoCase(cmd,"di"))
    return _deleteInstance(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"associators") ||
           String::equalNoCase(cmd,"a"))
    return _associators(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"associatorNames") ||
           String::equalNoCase(cmd,"an"))
    return _associatorNames(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"references") ||
           String::equalNoCase(cmd,"r"))
    return _references(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"referenceNames") ||
           String::equalNoCase(cmd,"rn"))
    return _referenceNames(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"execQuery") ||
           String::equalNoCase(cmd,"exq"))
    return _execQuery(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"getQualifier") ||
           String::equalNoCase(cmd,"gq"))
    return _getQualifier(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"setQualifier") ||
           String::equalNoCase(cmd,"sq"))
    return _setQualifier(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"deleteQualifier") ||
           String::equalNoCase(cmd,"dq"))
    return _deleteQualifier(argc-2,&argv[2]);
  else if (String::equalNoCase(cmd,"enumerateQualifiers") ||
           String::equalNoCase(cmd,"eq"))
    return _enumerateQualifiers(argc-2,&argv[2]);
  else
  {
    cerr << cmd << ": Invalid CIM operation."<< endl;
   _usage();
    return 1;
  }
}