• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

LogConfig.h

Go to the documentation of this file.
00001 /** @file
00002 
00003   A brief file description
00004 
00005   @section license License
00006 
00007   Licensed to the Apache Software Foundation (ASF) under one
00008   or more contributor license agreements.  See the NOTICE file
00009   distributed with this work for additional information
00010   regarding copyright ownership.  The ASF licenses this file
00011   to you under the Apache License, Version 2.0 (the
00012   "License"); you may not use this file except in compliance
00013   with the License.  You may obtain a copy of the License at
00014 
00015       http://www.apache.org/licenses/LICENSE-2.0
00016 
00017   Unless required by applicable law or agreed to in writing, software
00018   distributed under the License is distributed on an "AS IS" BASIS,
00019   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00020   See the License for the specific language governing permissions and
00021   limitations under the License.
00022  */
00023 
00024 
00025 
00026 #ifndef LOG_CONFIG_H
00027 #define LOG_CONFIG_H
00028 
00029 #include "libts.h"
00030 #include "P_RecProcess.h"
00031 #include "ProxyConfig.h"
00032 
00033 /* Instead of enumerating the stats in DynamicStats.h, each module needs
00034    to enumerate its stats separately and register them with librecords
00035    */
00036 enum
00037 {
00038   // Logging Events
00039   log_stat_event_log_error_ok_stat,
00040   log_stat_event_log_error_skip_stat,
00041   log_stat_event_log_error_aggr_stat,
00042   log_stat_event_log_error_full_stat,
00043   log_stat_event_log_error_fail_stat,
00044 
00045   log_stat_event_log_access_ok_stat,
00046   log_stat_event_log_access_skip_stat,
00047   log_stat_event_log_access_aggr_stat,
00048   log_stat_event_log_access_full_stat,
00049   log_stat_event_log_access_fail_stat,
00050 
00051   // Logging Data
00052   log_stat_num_sent_to_network_stat,
00053   log_stat_num_lost_before_sent_to_network_stat,
00054   log_stat_num_received_from_network_stat,
00055   log_stat_num_flush_to_disk_stat,
00056   log_stat_num_lost_before_flush_to_disk_stat,
00057 
00058   log_stat_bytes_lost_before_preproc_stat,
00059   log_stat_bytes_sent_to_network_stat,
00060   log_stat_bytes_lost_before_sent_to_network_stat,
00061   log_stat_bytes_received_from_network_stat,
00062 
00063   log_stat_bytes_flush_to_disk_stat,
00064   log_stat_bytes_lost_before_flush_to_disk_stat,
00065   log_stat_bytes_written_to_disk_stat,
00066   log_stat_bytes_lost_before_written_to_disk_stat,
00067 
00068   // Logging I/O
00069   log_stat_log_files_open_stat,
00070   log_stat_log_files_space_used_stat,
00071 
00072   log_stat_count
00073 };
00074 
00075 extern RecRawStatBlock *log_rsb;
00076 
00077 struct dirent;
00078 struct LogCollationAccept;
00079 struct PreDefinedFormatList;
00080 struct PreDefinedFormatInfo;
00081 
00082 /*-------------------------------------------------------------------------
00083   LogConfig
00084 
00085   This object keeps the state of the logging configuraion variables.  Upon
00086   construction, the log configuration file is read and the logging
00087   variables are initialized.
00088 
00089   The "global" LogConfig object is kept as a static pointer in the Log
00090   class, called "config", and changed whenever the configuration variables
00091   are changed in the config file, using Log::change_configuration().
00092 
00093   To add a new config variable:
00094      1. Add a line in records.config for the new config variable.
00095         The name in records.config should be "proxy.config.log.xxx".
00096      2. Create a member variable to store the current value.
00097         The name of the member variable should be "xxx".
00098      3. If the member variable is a string, add a delete for it in the
00099         destructor, LogConfig::~LogConfig.
00100      4. Initialize the member variable in LogConfig::setup_default_values
00101      5. Update the member variable from the records.config file
00102         in LogConfig::read_configuration_variables() using a call to
00103         ConfigReadInteger or ConfigReadString.
00104      6. Add a line in the LogConfig::register_config_callbacks() function
00105         for this new variable if it is exposed in the GUI
00106   -------------------------------------------------------------------------*/
00107 
00108 class LogConfig : public ConfigInfo
00109 {
00110 
00111 public:
00112 
00113   LogConfig();
00114   ~LogConfig();
00115 
00116   void init(LogConfig * previous_config = 0);
00117   void display(FILE * fd = stdout);
00118   void setup_log_objects();
00119 
00120   static void register_configs();
00121   static int reconfigure(const char *name, RecDataT data_type, RecData data, void *cookie);
00122 
00123   static void register_config_callbacks();
00124   static void register_stat_callbacks();
00125   static void register_mgmt_callbacks();
00126 
00127   bool space_to_write(int64_t bytes_to_write);
00128 
00129   bool am_collation_host() const { return collation_mode == Log::COLLATION_HOST; }
00130   bool space_is_short() { return !space_to_write(max_space_mb_headroom * LOG_MEGABYTE); };
00131 
00132   void increment_space_used(int bytes) {
00133     m_space_used += bytes;
00134     m_partition_space_left -= bytes;
00135   }
00136 
00137   void update_space_used();
00138   void read_configuration_variables();
00139 
00140 // CVR This is the mgmt callback function, hence all the strange arguments
00141   static void *reconfigure_mgmt_variables(void *token, char *data_raw, int data_len);
00142 
00143   int get_max_space_mb() {
00144     return (use_orphan_log_space_value ? max_space_mb_for_orphan_logs : max_space_mb_for_logs);
00145   }
00146 
00147   void transfer_objects(LogConfig * old_config) {
00148     log_object_manager.transfer_objects(old_config->log_object_manager);
00149   }
00150 
00151   bool has_api_objects() const { return log_object_manager.has_api_objects(); }
00152 
00153 public:
00154   bool initialized;
00155   bool reconfiguration_needed;
00156   bool logging_space_exhausted;
00157   int64_t m_space_used;
00158   int64_t m_partition_space_left;
00159   bool roll_log_files_now;      // signal that files must be rolled
00160 
00161   LogObjectManager log_object_manager;
00162   LogFilterList global_filter_list;
00163   LogFormatList global_format_list;
00164 
00165   int log_buffer_size;
00166   int max_secs_per_buffer;
00167   int max_space_mb_for_logs;
00168   int max_space_mb_for_orphan_logs;
00169   int max_space_mb_headroom;
00170   int logfile_perm;
00171   bool squid_log_enabled;
00172   bool squid_log_is_ascii;
00173   bool common_log_enabled;
00174   bool common_log_is_ascii;
00175   bool extended_log_enabled;
00176   bool extended_log_is_ascii;
00177   bool extended2_log_enabled;
00178   bool extended2_log_is_ascii;
00179   bool separate_icp_logs;
00180   bool separate_host_logs;
00181   int collation_mode;
00182   int collation_port;
00183   bool collation_host_tagged;
00184   int collation_preproc_threads;
00185   int collation_retry_sec;
00186   int collation_max_send_buffers;
00187   Log::RollingEnabledValues rolling_enabled;
00188   int rolling_interval_sec;
00189   int rolling_offset_hr;
00190   int rolling_size_mb;
00191   bool auto_delete_rolled_files;
00192   bool custom_logs_enabled;
00193 
00194   bool search_log_enabled;
00195   int search_rolling_interval_sec;
00196   unsigned int search_server_ip_addr;
00197   int search_server_port;
00198   int search_top_sites;
00199   char *search_log_filters;
00200   char *search_url_filter;
00201   char *search_log_file_one;
00202   char *search_log_file_two;
00203 
00204   int sampling_frequency;
00205   int file_stat_frequency;
00206   int space_used_frequency;
00207 
00208   int ascii_buffer_size;
00209   int max_line_size;
00210 
00211   char *hostname;
00212   char *logfile_dir;
00213   char *squid_log_name;
00214   char *squid_log_header;
00215   char *common_log_name;
00216   char *common_log_header;
00217   char *extended_log_name;
00218   char *extended_log_header;
00219   char *extended2_log_name;
00220   char *extended2_log_header;
00221   char *collation_host;
00222   char *collation_secret;
00223   char *xml_config_file;
00224   char *hosts_config_file;
00225 
00226 private:
00227 
00228   void read_xml_log_config(int from_memory);
00229   char **read_log_hosts_file(size_t * nhosts);
00230 
00231   void setup_default_values();
00232   void setup_collation(LogConfig * prev_config);
00233   LogFilter *split_by_protocol(const PreDefinedFormatList & pre_def_info_list);
00234   size_t split_by_hostname(const PreDefinedFormatList & pre_def_info_list, LogFilter * reject_protocol);
00235   LogObject * create_predefined_object(const PreDefinedFormatInfo * pdi, size_t nfilters,
00236         LogFilter ** filters, const char *filt_name = 0, bool force_extension = false);
00237   void create_predefined_objects_with_filter(const PreDefinedFormatList &pre_def_info_list, size_t nfilters,
00238         LogFilter ** filters, const char *filt_name = 0, bool force_extension = false);
00239 
00240   void add_filters_to_search_log_object(const char *format_name);
00241 
00242 private:
00243   // if true, use max_space_mb_for_orphan_logs to determine the amount
00244   // of space that logging can use, otherwise use max_space_mb_for_logs
00245   //
00246   bool use_orphan_log_space_value;
00247 
00248   LogCollationAccept *m_log_collation_accept;
00249 
00250   struct dirent *m_dir_entry;
00251   char *m_pDir;
00252   bool m_disk_full;
00253   bool m_disk_low;
00254   bool m_partition_full;
00255   bool m_partition_low;
00256   bool m_log_directory_inaccessible;
00257 
00258 private:
00259   // -- member functions not allowed --
00260   LogConfig(const LogConfig &);
00261   LogConfig & operator=(const LogConfig &);
00262 };
00263 
00264 /*-------------------------------------------------------------------------
00265   LogDeleteCandidate
00266   -------------------------------------------------------------------------*/
00267 
00268 struct LogDeleteCandidate
00269 {
00270   time_t mtime;
00271   char *name;
00272   int64_t size;
00273 };
00274 
00275 #endif

Generated by  doxygen 1.7.1