diff options
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Metrics/Metrics_Logger.cpp')
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Metrics/Metrics_Logger.cpp | 861 |
1 files changed, 0 insertions, 861 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Metrics/Metrics_Logger.cpp b/TAO/orbsvcs/orbsvcs/Metrics/Metrics_Logger.cpp deleted file mode 100644 index fa88db9070a..00000000000 --- a/TAO/orbsvcs/orbsvcs/Metrics/Metrics_Logger.cpp +++ /dev/null @@ -1,861 +0,0 @@ -// $Id$ - -#include "orbsvcs/Metrics/Metrics_Logger.h" -#include "ace/Auto_Ptr.h" -#include "ace/ace_wchar.h" - -ACE_RCSID(Metrics_Logger, Metrics_Logger, "$Id$") - -#if defined (ACE_METRICS_COLLECTION) - -#if defined (ACE_ENABLE_TIMEPROBES) && defined (ACE_COMPILE_TIMEPROBES) - -static const int OPEN_CLOSE_BANNER_CYCLE = 4; - -TAO_BEGIN_VERSIONED_NAMESPACE_DECL - -////////////////////////////// -// class TAO_Metrics_Logger // -////////////////////////////// - -// Default constructor. - -TAO_Metrics_Logger::TAO_Metrics_Logger (int generate_events, - int generate_log, - int generate_export_file, - const char *log_filename) - : generate_events_ (generate_events), -#ifdef VXWORKS - generate_log_ (1), - log_filename_ ("logger.txt"), -#else - generate_log_ (generate_log), - log_filename_ (log_filename), -#endif - generate_totals_(0), - generate_export_file_(generate_export_file), - log_started_ (0), - log_file_ (stdout), - export_file_(stdout), - saveFileCnt_(0) -{ -#ifdef VXWORKS - taskPrioritySet( taskIdSelf(), 145 ); -#endif - -#if defined (METRICS_LOGGER_SENDS_EVENTS) - if (this->generate_events_) - { - // Connect the underlying DOVE event supplier. - if (this->dove_supplier_.connect () < 0) - { -#if defined (METRICS_LOGGER_ERROR_OUTPUT_ENABLED) - ACE_ERROR ((LM_ERROR, "failed to connect DOVE event supplier\n")); -#endif - this->generate_events_ = 0; - } - } -#endif /* METRICS_LOGGER_SENDS_EVENTS */ - - if (generate_log_) - { - if (log_filename_) - { - log_file_ = ACE_OS::fopen (log_filename_, "w+"); - if (log_file_ == NULL) - { - generate_log_ = 0; -#if defined (METRICS_LOGGER_ERROR_OUTPUT_ENABLED) - ACE_ERROR ((LM_ERROR, - "Logger failed to open log file %s\n", - log_filename_)); -#endif - return; - } - - if (generate_export_file_) - { - export_file_ = ACE_OS::fopen ("remote_logger_export.excel", "w+"); - if (export_file_ == NULL) - { -#if defined (METRICS_LOGGER_ERROR_OUTPUT_ENABLED) - ACE_ERROR ((LM_ERROR, "Logger failed to open log file %s\n", log_filename_)); -#endif - return; - } - } - log_started_ = 1; - } - - // Write a start of logging session message. - time_t current_time = ACE_OS::time (); - ACE_OS::fprintf (log_file_, - "\n\nTAO_Metrics Metrics Logging Session: %s\n\n", - ACE_OS::ctime (& current_time)); - - ACE_OS::fprintf (export_file_, - "\n\nTAO_Metrics Metrics Logging Session: %s\n\n", - ACE_OS::ctime (& current_time)); - if (log_filename_) - { - ACE_OS::fflush (log_file_); - ACE_OS::fflush (export_file_); -// ACE_OS::fclose (log_file_); - } - } -} - - -// Destructor. - -TAO_Metrics_Logger::~TAO_Metrics_Logger () -{ - if (generate_log_) - { - if (log_filename_) - { -// log_file_ = ACE_OS::fopen (log_filename_, "a+"); - } - - ACE_OS::fprintf (log_file_, "\n\n"); - - ACE_OS::fflush (log_file_); - - ACE_OS::fprintf (export_file_, "\n\n"); - ACE_OS::fflush (export_file_); - - if (log_filename_) - { -// ACE_OS::fclose (log_file_); - } - } - -#if defined (METRICS_LOGGER_SENDS_EVENTS) - if (this->generate_events_) - { - this->dove_supplier_.disconnect (); - } -#endif /* METRICS_LOGGER_SENDS_EVENTS */ -} - - -// Active object loop for processing logged data. - -int -TAO_Metrics_Logger::svc (void) -{ - ACE_Message_Block *mb; - - // Loop forever. - while (1) - if (this->getq (mb) < 0) - { -#if defined (METRICS_LOGGER_ERROR_OUTPUT_ENABLED) - ACE_ERROR ((LM_ERROR, - "(%P|%t) getq failed in TAO_Metrics_Logger::svc")); -#endif - return -1; - } - else if (! mb) - { -#if defined (METRICS_LOGGER_ERROR_OUTPUT_ENABLED) - ACE_ERROR ((LM_ERROR, - "(%P|%t) null message block pointer in TAO_Metrics_Logger::svc")); -#endif - return -1; - } - else if (! mb->rd_ptr ()) - { -#if defined (METRICS_LOGGER_ERROR_OUTPUT_ENABLED) - ACE_ERROR ((LM_ERROR, - "(%P|%t) null message block pointer in TAO_Metrics_Logger::svc")); -#endif - return -1; - } - else - { - // Process message. - - TAO_Metrics_Logger_Data *data = (TAO_Metrics_Logger_Data *) mb->rd_ptr (); - switch (data->data_type_) - { - case TAO_Metrics_Logger_Data::QOS_TYPE: - this->process_aggregate_QoS (*data->qos_params_, data->interval_); - delete data; - delete mb; - break; - - case TAO_Metrics_Logger_Data::TIMEPROBE_TYPE: - this->process_timeprobe_data (*data->timeprobe_params_, data->interval_); - delete data; - delete mb; - break; - - case TAO_Metrics_Logger_Data::BANNER_TYPE: - this->process_banner (data->banner_); - delete data; - delete mb; - break; - - default: -#if defined (METRICS_LOGGER_ERROR_OUTPUT_ENABLED) - ACE_ERROR ((LM_ERROR, - "(%P|%t) unrecognized data type in TAO_Metrics_Logger::svc")); -#endif - return -1; - } - } - -// Modified by BAP. Remove unreachable code. -// return 0; -} - - -// Sends a banner to be written to the log file and to the visualization browser. - -void -TAO_Metrics_Logger::send_banner (const char *banner) - throw (CORBA::SystemException) -{ - // Package up the data and put it on the task queue. - - TAO_Metrics_Logger_Data *data; - ACE_NEW (data, - TAO_Metrics_Logger_Data (TAO_Metrics_Logger_Data::BANNER_TYPE)); - ACE_NEW (data->banner_, char [ACE_OS::strlen (banner) + 1]); - ACE_OS::strcpy (data->banner_, banner); - - ACE_Message_Block *mb; - ACE_NEW (mb, - ACE_Message_Block ((char *) data, - sizeof (TAO_Metrics_Logger_Data))); - - if (this->putq (mb) < 0) - { -#if defined (METRICS_LOGGER_ERROR_OUTPUT_ENABLED) - ACE_ERROR ((LM_ERROR, - "TAO_Metrics_Logger::send_banner putq failed")); -#endif - } -} - -void -TAO_Metrics_Logger::process_banner (const char *banner) -{ - if (this->generate_log_) - { - if (log_filename_) - { -// log_file_ = ACE_OS::fopen (log_filename_, "a+"); - } - - ACE_OS::fprintf (log_file_, - "%s\n", banner); - ACE_OS::fprintf (export_file_, - "%s\n", banner); - if (log_filename_) - { - ACE_OS::fflush (log_file_); - ACE_OS::fflush (export_file_); - - // Close and then reopen the file. We can't afford to open & close all of the time. - if (( saveFileCnt_++ % OPEN_CLOSE_BANNER_CYCLE) == 0 ) - { - ACE_OS::fclose (log_file_); - log_file_ = ACE_OS::fopen (log_filename_, "a+"); - - ACE_OS::fclose (export_file_); - export_file_ = ACE_OS::fopen ("remote_logger_export.excel", "a+"); - } - } - } -} - - -// Reports the aggregate QoS information for all operations -// to the passed QoS logger. - -void -TAO_Metrics_Logger::log_aggregate_QoS (const Metrics::QoSParameter_Set & qos_params, - Metrics::Time interval) - throw (CORBA::SystemException) -{ -// This is a temporary patch to eliminate this data from the log. It was -// done to bypass a long rebuild that would have been required otherwise. -// Remove this patch later. Brian Mendel - - //Added to remove Linux warning (Boeing Extension) - ACE_UNUSED_ARG(qos_params); - ACE_UNUSED_ARG(interval); - - // Package up the data and put it on the task queue. -#if 0 - TAO_Metrics_Logger_Data *data; - ACE_NEW (data, - TAO_Metrics_Logger_Data (TAO_Metrics_Logger_Data::QOS_TYPE, - interval)); - ACE_NEW (data->qos_params_, - Metrics::QoSParameter_Set (qos_params)); - - ACE_Message_Block *mb; - ACE_NEW (mb, - ACE_Message_Block ((char *) data, - sizeof (TAO_Metrics_Logger_Data))); - - if (this->putq (mb) < 0) - { -#if defined (METRICS_LOGGER_ERROR_OUTPUT_ENABLED) - ACE_ERROR ((LM_ERROR, - "TAO_Metrics_Logger::log_aggregate_QoS putq failed")); -#endif - } -#endif -} - - -// Processes the aggregate QoS information for all operations -// to the passed QoS logger. - -void -TAO_Metrics_Logger::process_aggregate_QoS (const Metrics::QoSParameter_Set & qos_params, - Metrics::Time interval) -{ - //Added to remove Linux warning (Boeing Extension) - ACE_UNUSED_ARG(interval); - - if (this->generate_log_) - { - if (log_filename_) - { -// log_file_ = ACE_OS::fopen (log_filename_, "a+"); - } - - ACE_OS::fprintf (log_file_, - "\nName missed made cancelled\n"); - - ACE_OS::fprintf (export_file_, - "\n\n Name \t missed \t made \t cancelled\n"); - } - -#if defined (METRICS_LOGGER_SENDS_EVENTS) - if (this->generate_events_) - { - this->qos_data_.hrt_deadlines_missed = 0; - this->qos_data_.hrt_deadlines_made = 0; - this->qos_data_.hrt_operations_cancelled = 0; - this->qos_data_.srt_deadlines_missed = 0; - this->qos_data_.srt_deadlines_made = 0; - this->qos_data_.srt_operations_cancelled = 0; - } -#endif /* METRICS_LOGGER_SENDS_EVENTS */ - - for (u_long i = 0; i < qos_params.length (); ++i) - { -#if defined (METRICS_LOGGER_SENDS_EVENTS) - if (this->generate_events_) - { - if (qos_params [i].is_hrt) - { - this->qos_data_.hrt_deadlines_missed += - qos_params [i].deadlines_missed; - this->qos_data_.hrt_deadlines_made += - qos_params [i].deadlines_made; - this->qos_data_.hrt_operations_cancelled += - qos_params [i].operations_cancelled; - } - else - { - this->qos_data_.srt_deadlines_missed += - qos_params [i].deadlines_missed; - this->qos_data_.srt_deadlines_made += - qos_params [i].deadlines_made; - this->qos_data_.srt_operations_cancelled += - qos_params [i].operations_cancelled; - } - } -#endif /* METRICS_LOGGER_SENDS_EVENTS */ - - if (this->generate_log_) - { - ACE_OS::fprintf (log_file_, - "%-50s %8lu %8lu %8lu\n", - (const char *)qos_params [i].entry_point, - qos_params [i].deadlines_missed, - qos_params [i].deadlines_made, - qos_params [i].operations_cancelled); - ACE_OS::fprintf (export_file_, - " %s \t %lu \t %lu \t %lu\n", - (const char *)qos_params [i].entry_point, - qos_params [i].deadlines_missed, - qos_params [i].deadlines_made, - qos_params [i].operations_cancelled); - } - } - -#if defined (METRICS_LOGGER_SENDS_EVENTS) - if (this->generate_events_) - { - // Push an event to the visualization browser. - CORBA::Any any; - - try - { - any.replace (Metrics::_tc_QoSData, &qos_data_, 0, ACE_TRY_ENV); - } - catch (const CORBA::Exception& ex) - { -#if defined (METRICS_LOGGER_ERROR_OUTPUT_ENABLED) - ex._tao_print_exception ( - "TAO_Metrics_Logger::process_aggregate_QoS"); -#endif - return; - } - - this->dove_supplier_.notify (any); - } -#endif /* METRICS_LOGGER_SENDS_EVENTS */ - - if (this->generate_log_) - { - if (log_filename_) - { - ACE_OS::fflush (log_file_); -// ACE_OS::fclose (log_file_); - } - } -} - - -// Binds the names of various timeprobes to their identifiers so -// that ids alone can be used (for efficiency) in passing data. - -void -TAO_Metrics_Logger::set_identities (const Metrics::ProbeIdentity_Set & - probe_identities) - throw (CORBA::SystemException) -{ - for (u_long i = 0; i < probe_identities.length (); ++i) - { - this->set_identity (probe_identities [i]); - } -} - -void -TAO_Metrics_Logger::set_identity (const Metrics::ProbeIdentity_t & probe_identity) - throw (CORBA::SystemException) -{ - // Look up the existing name that is bound, creating one if there is - // not one there already. - CORBA::String_var *name = 0; - if (probe_name_map_.find (probe_identity.probe_id, name) != 0 - || name == 0) - { - ACE_NEW_THROW_EX (name, - CORBA::String_var (probe_identity.probe_name), - CORBA::NO_MEMORY ()); - - // What is this used for? BRM - auto_ptr<CORBA::String_var> name_ptr (name); - - if (probe_name_map_.rebind (probe_identity.probe_id, name) < 0) - { -#if defined (METRICS_LOGGER_ERROR_OUTPUT_ENABLED) - ACE_ERROR ((LM_ERROR, "TAO_Metrics_Logger::set_identity bind failed.\n")); -#endif - return; - } - - // DEBUG - const char * name_cstr = name->in (); - ACE_DEBUG ((LM_DEBUG, - "Logger registered name [%s] with id [%u]\n", - name_cstr, probe_identity.probe_id)); - - name_ptr.release (); - } - else - { - // DEBUG - const char * old_name_cstr = name->in (); - - // Unconditionally set the name to the new name. - *name = probe_identity.probe_name; - - // DEBUG - const char * new_name_cstr = name->in (); - ACE_DEBUG ((LM_DEBUG, - "Logger CHANGED name from [%s] to [%s] for id [%u]\n", - old_name_cstr, new_name_cstr, probe_identity.probe_id)); - } -} - - -// Reports timeprobe data collected since last run. - -void -TAO_Metrics_Logger::log_timeprobe_data (const Metrics::TimeprobeParameter_Set & - timeprobe_params, - Metrics::Time interval) - throw (CORBA::SystemException) -{ - // Package up the data and put it on the task queue. - - TAO_Metrics_Logger_Data *data; - ACE_NEW (data, - TAO_Metrics_Logger_Data (TAO_Metrics_Logger_Data::TIMEPROBE_TYPE, - interval)); - ACE_NEW (data->timeprobe_params_, - Metrics::TimeprobeParameter_Set (timeprobe_params)); - - ACE_Message_Block *mb; - ACE_NEW (mb, - ACE_Message_Block ((char *) data, - sizeof (TAO_Metrics_Logger_Data))); - - if (this->putq (mb) < 0) - { -#if defined (METRICS_LOGGER_ERROR_OUTPUT_ENABLED) - ACE_ERROR ((LM_ERROR, - "TAO_Metrics_Logger::log_timeprobe_data putq failed")); -#endif - } -} - - -// Processes timeprobe data collected since last run. -void -TAO_Metrics_Logger::process_timeprobe_data (const Metrics::TimeprobeParameter_Set & timeprobe_params, - Metrics::Time interval) -{ - if (this->generate_log_) - { - if (log_filename_) - { - // log_file_ = ACE_OS::fopen (log_filename_, "a+"); - } - - ACE_OS::fprintf (log_file_, - "\n\n\n" - "Interval (usec): %9lu \n\n" - "Probe elapsed_time(usec) Start Time (usecs) Stop Time (usec)\n\n", - // Modified by BAP. This really should be corrected since we are truncating the interval here. - // We can get away with it here for now since the intervals are small enough to not roll over. - (u_long) ACE_U64_TO_U32(interval)/10 ); - - ACE_OS::fprintf (export_file_, - "\n\n\n" - "Interval (usec): \t %9lu \t \n\n" - "Probe \t elapsed_time(usec) \tStart Time (usecs) \t Stop Time (usec)\n\n", - // Modified by BAP. This really should be corrected since we are truncating the interval here. - // We can get away with it here for now since the intervals are small enough to not roll over. - (u_long) ACE_U64_TO_U32(interval)/10 ); - } - -#if defined (METRICS_LOGGER_SENDS_EVENTS) - Metrics::Time queue_time = 0; - Metrics::Time hrt_op_time = 0; - Metrics::Time srt_op_time = 0; -#endif /* METRICS_LOGGER_SENDS_EVENTS */ - - for (u_long i = 0; i < timeprobe_params.length (); ++i) - { -#if defined (METRICS_LOGGER_SENDS_EVENTS) - if (! timeprobe_params [i].is_full_interval) - { - if (timeprobe_params [i].is_operation) - { - if (timeprobe_params [i].is_hrt) - { - hrt_op_time += timeprobe_params [i].interval; - } - else - { - srt_op_time += timeprobe_params [i].interval; - } - } - else - { - queue_time += timeprobe_params [i].interval; - } - } -#endif /* METRICS_LOGGER_SENDS_EVENTS */ - - if (this->generate_log_) - { - // Look up the name of the probe in the hash map. - // If successful, use the name, and if not just use the probe id. - CORBA::String_var *probe_name = 0; - char format_spec[255]; - char export_spec[255]; - - if (probe_name_map_.find (timeprobe_params [i].probe_id, probe_name) == 0 - && probe_name != 0) - { - if (timeprobe_params [i].cross_thread_probe && - timeprobe_params [i].is_full_interval) - { - if (generate_totals_) - { -#if defined (ACE_LACKS_LONGLONG_T) - // This needs to be fixed for platforms that do not have 64 bit support. This will result - // in overruns as currently written - ACE_OS::fprintf (log_file_, - " %-40s (total) %20lu %20lu %20lu *** Cross Thread Event ***\n", - (const char *) *probe_name, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].interval)/10, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].start_event_time)/10, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].stop_event_time)/10); - ACE_OS::fprintf (export_file_, - " %s (total) \t %lu \t %lu \t %lu \t ***Cross Thread Event***\n", - (const char *) *probe_name, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].interval)/10, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].start_event_time)/10, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].stop_event_time)/10); -#else - // Build up the format specifiers since the specifier or not portable - ACE_OS::strcpy(format_spec, " %-40s (total) "); - ACE_OS::strcat(format_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(format_spec, " "); - ACE_OS::strcat(format_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(format_spec, " "); - ACE_OS::strcat(format_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(format_spec, " *** Cross Thread Event ***\n"); - - ACE_OS::strcpy(export_spec, " %-40s (total) \t "); - ACE_OS::strcat(export_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(export_spec, " \t "); - ACE_OS::strcat(export_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(export_spec, " \t "); - ACE_OS::strcat(export_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(export_spec, " \t*** Cross Thread Event ***\n"); - - ACE_OS::fprintf (log_file_, - format_spec, - (const char *) *probe_name, - timeprobe_params [i].interval / 10, - timeprobe_params [i].start_event_time / 10, - timeprobe_params [i].stop_event_time / 10); - ACE_OS::fprintf (export_file_, - export_spec, - (const char *) *probe_name, - timeprobe_params [i].interval / 10, - timeprobe_params [i].start_event_time / 10, - timeprobe_params [i].stop_event_time / 10); -#endif - } - } - else - { -#if defined (ACE_LACKS_LONGLONG_T) - // This needs to be fixed for platforms that do not have 64 bit support. This will result - // in overruns as currently written - ACE_OS::fprintf (log_file_, - " %-40s %20lu %20lu %20lu *** Cross Thread Event ***\n", - (const char *) *probe_name, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].interval)/10, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].start_event_time)/10, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].stop_event_time)/10); - ACE_OS::fprintf (export_file_, - " %s \t %lu \t %lu \t %lu \t ***Cross Thread Event***\n", - (const char *) *probe_name, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].interval)/10, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].start_event_time)/10, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].stop_event_time)/10); -#else - // Build up the format specifiers since the specifier or not portable - ACE_OS::strcpy(format_spec, " %-40s "); - ACE_OS::strcat(format_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(format_spec, " "); - ACE_OS::strcat(format_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(format_spec, " "); - ACE_OS::strcat(format_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(format_spec, " *** Cross Thread Event ***\n"); - - ACE_OS::strcpy(export_spec, " %-40s \t "); - ACE_OS::strcat(export_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(export_spec, " \t "); - ACE_OS::strcat(export_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(export_spec, " \t "); - ACE_OS::strcat(export_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(export_spec, " \t *** Cross Thread Event ***\n"); - - ACE_OS::fprintf (log_file_, - format_spec, - (const char *) *probe_name, - timeprobe_params [i].interval / 10, - timeprobe_params [i].start_event_time / 10, - timeprobe_params [i].stop_event_time / 10); - ACE_OS::fprintf (export_file_, - export_spec, - (const char *) *probe_name, - timeprobe_params [i].interval / 10, - timeprobe_params [i].start_event_time / 10, - timeprobe_params [i].stop_event_time / 10); -#endif - } - - } - else - { - if (timeprobe_params [i].cross_thread_probe && - timeprobe_params [i].is_full_interval) - { - if (generate_totals_) -#if defined (ACE_LACKS_LONGLONG_T) - ACE_OS::fprintf (log_file_, - " [id (total): %8lu] %9lu %9lu %9lu *** Cross Thread Event ***\n", - timeprobe_params [i].probe_id, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].interval)/10, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].start_event_time)/10, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].stop_event_time)/10); - ACE_OS::fprintf (export_file_, - " [id (total): %lu] \t %lu \t %lu \t %lu \t ***Cross Thread Event***\n", - timeprobe_params [i].probe_id, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].interval)/10, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].start_event_time)/10, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].stop_event_time)/10); -#else - // Build up the format specifiers since the specifier or not portable - ACE_OS::strcpy(format_spec, " [id (total): %8lu] "); - ACE_OS::strcat(format_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(format_spec, " "); - ACE_OS::strcat(format_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(format_spec, " "); - ACE_OS::strcat(format_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(format_spec, " *** Cross Thread Event ***\n"); - - ACE_OS::strcpy(export_spec, " [id (total): %8lu] \t "); - ACE_OS::strcat(export_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(export_spec, " \t "); - ACE_OS::strcat(export_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(export_spec, " \t "); - ACE_OS::strcat(export_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(export_spec, " \t*** Cross Thread Event ***\n"); - - if (probe_name == 0) - { - ACE_DEBUG((LM_DEBUG, "Found a probe with id: %d with no name\n", timeprobe_params [i].probe_id)); - } - else - { - ACE_OS::fprintf (log_file_, - format_spec, - (const char *) *probe_name, - timeprobe_params [i].interval / 10, - timeprobe_params [i].start_event_time / 10, - timeprobe_params [i].stop_event_time / 10); - ACE_OS::fprintf (export_file_, - export_spec, - (const char *) *probe_name, - timeprobe_params [i].interval / 10, - timeprobe_params [i].start_event_time / 10, - timeprobe_params [i].stop_event_time / 10); - } -#endif - } - else -#if defined (ACE_LACKS_LONGLONG_T) - ACE_OS::fprintf (log_file_, - " [id: %14lu] %9lu %9lu %9lu \n", - timeprobe_params [i].probe_id, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].interval)/10, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].start_event_time)/10, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].stop_event_time)/10); - ACE_OS::fprintf (export_file_, - " [id: %lu] \t %lu \t %lu \t %lu\n", - timeprobe_params [i].probe_id, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].interval)/10, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].start_event_time)/10, - (u_long) ACE_U64_TO_U32(timeprobe_params [i].stop_event_time)/10); -#else - // Build up the format specifiers since the specifier or not portable - ACE_OS::strcpy(format_spec, " [id: %14lu] "); - ACE_OS::strcat(format_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(format_spec, " "); - ACE_OS::strcat(format_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(format_spec, " "); - ACE_OS::strcat(format_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(format_spec, " *** Cross Thread Event ***\n"); - - ACE_OS::strcpy(export_spec, " [id: %lu] \t "); - ACE_OS::strcat(export_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(export_spec, " \t "); - ACE_OS::strcat(export_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(export_spec, " \t "); - ACE_OS::strcat(export_spec, ACE_UINT64_FORMAT_SPECIFIER); - ACE_OS::strcat(export_spec, " *** Cross Thread Event ***\n"); - - if (probe_name == 0) - { - ACE_DEBUG((LM_DEBUG, "Found a probe with id: %d with no name\n", timeprobe_params [i].probe_id)); - } - else - { - ACE_OS::fprintf (log_file_, - format_spec, - (const char *) *probe_name, - timeprobe_params [i].interval / 10, - timeprobe_params [i].start_event_time / 10, - timeprobe_params [i].stop_event_time / 10); - ACE_OS::fprintf (export_file_, - export_spec, - (const char *) *probe_name, - timeprobe_params [i].interval / 10, - timeprobe_params [i].start_event_time / 10, - timeprobe_params [i].stop_event_time / 10); - } -#endif - - } - } // End if (this->generate_log_) - } - -#if defined (METRICS_LOGGER_SENDS_EVENTS) - if (this->generate_events_) - { - CORBA::Any any; - - util_data_.hrt_op_utilization = - static_cast<CORBA::Double> (ACE_UINT64_DBLCAST_ADAPTER (hrt_op_time)) - / static_cast<CORBA::Double> (ACE_UINT64_DBLCAST_ADAPTER (interval)); - - util_data_.srt_op_utilization = - static_cast<CORBA::Double> (ACE_UINT64_DBLCAST_ADAPTER (srt_op_time)) - / static_cast<CORBA::Double> (ACE_UINT64_DBLCAST_ADAPTER (interval)); - - util_data_.queue_utilization = - static_cast<CORBA::Double> (ACE_UINT64_DBLCAST_ADAPTER (queue_time)) - / static_cast<CORBA::Double> (ACE_UINT64_DBLCAST_ADAPTER (interval)); - - try - { - any.replace (Metrics::_tc_UtilData, &util_data_, 0, ACE_TRY_ENV); - } - catch (const CORBA::Exception& ex) - { -#if defined (METRICS_LOGGER_ERROR_OUTPUT_ENABLED) - ex._tao_print_exception ( - "TAO_Metrics_Logger::process_aggregate_QoS"); -#endif - return; - } - - this->dove_supplier_.notify (any); - } -#endif /* METRICS_LOGGER_SENDS_EVENTS */ - - if (this->generate_log_) - { - if (log_filename_) - { - ACE_OS::fflush (log_file_); - ACE_OS::fflush (export_file_); -// ACE_OS::fclose (log_file_); - } - } -} - -TAO_END_VERSIONED_NAMESPACE_DECL - -#endif /* ACE_ENABLE_TIMEPROBES & ACE_COMPILE_TIMEPROBES */ -#endif /* ACE_METRICS_COLLECTION */ |