Page Speed Optimization Libraries  1.9.32.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
log_record.h
Go to the documentation of this file.
1 /*
2  * Copyright 2012 Google Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http:///www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
18 
19 #ifndef NET_INSTAWEB_HTTP_PUBLIC_LOG_RECORD_H_
20 #define NET_INSTAWEB_HTTP_PUBLIC_LOG_RECORD_H_
21 
22 #include <map>
24 #include "net/instaweb/util/enums.pb.h"
29 #include "net/instaweb/rewriter/image_types.pb.h"
31 #include "net/instaweb/util/public/gtest_prod.h"
35 
39 
40 
41 namespace net_instaweb {
42 
43 class AbstractMutex;
44 
58 
62  public:
65  explicit AbstractLogRecord(AbstractMutex* mutex);
66  virtual ~AbstractLogRecord();
67 
72  GoogleString AppliedRewritersString();
73 
78  RewriterInfo* NewRewriterInfo(const char* rewriter_id);
79 
83  const char* rewriter_id, RewriterApplication::Status status);
84 
88  const char* rewriter_id, const GoogleString& url,
89  RewriterApplication::Status status) {
90  SetRewriterLoggingStatusHelper(rewriter_id, url, status);
91  }
92 
96  void LogRewriterHtmlStatus(const char* rewriter_id,
97  RewriterHtmlApplication::Status status);
98 
102  const char* rewriter_id, RewriterApplication::Status status);
103 
107  virtual LoggingInfo* logging_info() = 0;
108 
111 
116  RewriterApplication::Status status,
117  const GoogleString& url,
118  const char* id,
119  int original_size,
120  int optimized_size,
121  bool is_recompressed,
122  ImageType original_image_type,
123  ImageType optimized_image_type,
124  bool is_resized,
125  int original_width,
126  int original_height,
127  bool is_resized_using_rendered_dimensions,
128  int resized_width,
129  int resized_height);
130 
132  void SetIsHtml(bool is_html);
133 
136  virtual void AddFoundPropertyToCohortInfo(
137  int page_type, const GoogleString& cohort,
138  const GoogleString& property) = 0;
139 
143  int page_type, const GoogleString& cohort,
144  const GoogleString& property) = 0;
145 
147  virtual void SetCacheStatusForCohortInfo(
148  int page_type, const GoogleString& cohort,
149  bool found, int key_state) = 0;
150 
154  void SetBlinkRequestFlow(int flow);
155  void SetCacheHtmlRequestFlow(int flow);
156  void SetIsOriginalResourceCacheable(bool cacheable);
157 
159  void SetBlinkInfo(const GoogleString& user_agent);
160 
162  void SetCacheHtmlLoggingInfo(const GoogleString& user_agent);
163 
166  const char* id,
167  const GoogleString& url,
168  RewriterApplication::Status status,
169  FlushEarlyResourceInfo::ContentType content_type,
170  FlushEarlyResourceInfo::ResourceType resource_type,
171  bool is_bandwidth_affected,
172  bool in_head);
173 
175  virtual void LogImageRewriteActivity(
176  const char* id,
177  const GoogleString& url,
178  RewriterApplication::Status status,
179  bool is_image_inlined,
180  bool is_critical_image,
181  bool is_url_rewritten,
182  int size,
183  bool try_low_res_src_insertion,
184  bool low_res_src_inserted,
185  ImageType low_res_image_type,
186  int low_res_data_size) = 0;
187 
189  void LogJsDisableFilter(const char* id, bool has_pagespeed_no_defer);
190 
191  void LogLazyloadFilter(const char* id,
192  RewriterApplication::Status status,
193  bool is_blacklisted, bool is_critical);
194 
197  bool WriteLog();
198 
201  AbstractMutex* mutex() { return mutex_.get(); }
202 
205  void SetRewriterInfoMaxSize(int x);
206 
209  void SetAllowLoggingUrls(bool allow_logging_urls);
210 
213  void SetLogUrlIndices(bool log_url_indices);
214 
216  void SetNumHtmlCriticalImages(int num_html_critical_images);
217 
219  void SetNumCssCriticalImages(int num_css_critical_images);
220 
222  virtual void SetImageStats(int num_img_tags, int num_inlined_img_tags,
223  int num_critical_images_used) = 0;
224 
226  virtual void SetResourceCounts(int num_external_css, int num_scripts) = 0;
227 
229  void SetCriticalCssInfo(int critical_inlined_bytes,
230  int original_external_bytes,
231  int overhead_bytes);
232 
234  virtual void LogDeviceInfo(
235  int device_type,
236  bool supports_image_inlining,
237  bool supports_lazyload_images,
238  bool supports_critical_images_beacon,
239  bool supports_deferjs,
240  bool supports_webp_in_place,
241  bool supports_webp_rewritten_urls,
242  bool supports_webplossless_alpha,
243  bool is_bot,
244  bool supports_split_html,
245  bool can_preload_resources) = 0;
246 
248  void LogIsXhr(bool is_xhr);
249 
251  virtual void SetBackgroundRewriteInfo(
252  bool log_urls,
253  bool log_url_indices,
254  int max_rewrite_info_log_size);
255 
257  virtual void SetTimingInfo(const RequestContext::TimingInfo& timing_info) {}
258 
259  protected:
261  virtual void SetBlinkInfoImpl(const GoogleString& user_agent) {}
262 
264  virtual void SetCacheHtmlLoggingInfoImpl(const GoogleString& user_agent) {}
267  virtual bool WriteLogImpl() = 0;
268 
272  RewriterInfo* SetRewriterLoggingStatusHelper(
273  const char* rewriter_id, const GoogleString& url,
274  RewriterApplication::Status status);
275 
276  private:
278  void InitLogging();
279 
280  void PopulateUrl(
281  const GoogleString& url, RewriteResourceInfo* rewrite_resource_info);
282 
285  void PopulateRewriterStatusCounts();
286 
289  scoped_ptr<AbstractMutex> mutex_;
290 
292  int rewriter_info_max_size_;
293 
295  bool allow_logging_urls_;
296 
298  bool log_url_indices_;
299 
301  StringIntMap url_index_map_;
302 
304  typedef std::map<RewriterApplication::Status, int> RewriteStatusCountMap;
305  struct RewriterStatsInternal {
306  RewriterHtmlApplication::Status html_status;
307 
309  RewriteStatusCountMap status_counts;
310 
311  RewriterStatsInternal()
312  : html_status(RewriterHtmlApplication::UNKNOWN_STATUS) {}
313  };
314  typedef std::map<GoogleString, RewriterStatsInternal> RewriterStatsMap;
315  RewriterStatsMap rewriter_stats_;
316 
317  DISALLOW_COPY_AND_ASSIGN(AbstractLogRecord);
318 };
319 
321 class LogRecord : public AbstractLogRecord {
322  public:
323  explicit LogRecord(AbstractMutex* mutex);
324 
325  virtual ~LogRecord();
326 
327  LoggingInfo* logging_info() { return logging_info_.get(); }
328 
329  virtual void SetImageStats(int num_img_tags, int num_inlined_img_tags,
330  int num_critical_images_used) {}
331 
332  virtual void SetResourceCounts(int num_external_css, int num_scripts) {}
333 
335  int page_type, const GoogleString& cohort,
336  const GoogleString& property) {}
337 
339  int page_type, const GoogleString& cohort,
340  const GoogleString& property) {}
341 
343  int page_type, const GoogleString& cohort, bool found, int key_state) {}
344 
346  const char* id,
347  const GoogleString& url,
348  RewriterApplication::Status status,
349  bool is_image_inlined,
350  bool is_critical_image,
351  bool is_url_rewritten,
352  int size,
353  bool try_low_res_src_insertion,
354  bool low_res_src_inserted,
355  ImageType low_res_image_type,
356  int low_res_data_size) {}
357 
358  virtual void LogDeviceInfo(
359  int device_type,
360  bool supports_image_inlining,
361  bool supports_lazyload_images,
362  bool supports_critical_images_beacon,
363  bool supports_deferjs,
364  bool supports_webp_in_place,
365  bool supports_webp_rewritten_urls,
366  bool supports_webplossless_alpha,
367  bool is_bot,
368  bool supports_split_html,
369  bool can_preload_resources) {}
370 
371  bool WriteLogImpl() { return true; }
372 
373  private:
374  scoped_ptr<LoggingInfo> logging_info_;
375 };
376 
384  public:
385  CopyOnWriteLogRecord(AbstractMutex* logging_mutex, LoggingInfo* logging_info)
386  : LogRecord(logging_mutex), logging_info_copy_(logging_info) {}
387 
388  protected:
389  virtual bool WriteLogImpl() {
390  logging_info_copy_->CopyFrom(*logging_info());
391  return true;
392  }
393 
394  private:
395  LoggingInfo* logging_info_copy_;
396 
397  DISALLOW_COPY_AND_ASSIGN(CopyOnWriteLogRecord);
398 };
399 
400 }
401 
402 #endif
void SetRewriterLoggingStatus(const char *rewriter_id, RewriterApplication::Status status)
Definition: request_context.h:221
void SetCacheHtmlLoggingInfo(const GoogleString &user_agent)
Override SetCacheHtmlInfoImpl if necessary.
void LogImageBackgroundRewriteActivity(RewriterApplication::Status status, const GoogleString &url, const char *id, int original_size, int optimized_size, bool is_recompressed, ImageType original_image_type, ImageType optimized_image_type, bool is_resized, int original_width, int original_height, bool is_resized_using_rendered_dimensions, int resized_width, int resized_height)
void LogRewriterHtmlStatus(const char *rewriter_id, RewriterHtmlApplication::Status status)
virtual void LogDeviceInfo(int device_type, bool supports_image_inlining, bool supports_lazyload_images, bool supports_critical_images_beacon, bool supports_deferjs, bool supports_webp_in_place, bool supports_webp_rewritten_urls, bool supports_webplossless_alpha, bool is_bot, bool supports_split_html, bool can_preload_resources)=0
Log information related to the user agent and device making the request.
Simple AbstractLogRecord implementation which owns a LoggingInfo protobuf.
Definition: log_record.h:321
virtual void AddFoundPropertyToCohortInfo(int page_type, const GoogleString &cohort, const GoogleString &property)=0
RewriterInfo * NewRewriterInfo(const char *rewriter_id)
void SetAllowLoggingUrls(bool allow_logging_urls)
void SetIsHtml(bool is_html)
Atomically sets is_html_response in the logging proto.
virtual void SetCacheHtmlLoggingInfoImpl(const GoogleString &user_agent)
Implements setting Cache Html specific log information.
Definition: log_record.h:264
void LogJsDisableFilter(const char *id, bool has_pagespeed_no_defer)
Definition: log_record.h:61
void SetLogUrlIndices(bool log_url_indices)
void SetRewriterLoggingStatus(const char *rewriter_id, const GoogleString &url, RewriterApplication::Status status)
Definition: log_record.h:87
virtual void SetResourceCounts(int num_external_css, int num_scripts)
Sets the number of external resources on an HTML page.
Definition: log_record.h:332
virtual void AddRetrievedPropertyToCohortInfo(int page_type, const GoogleString &cohort, const GoogleString &property)
Definition: log_record.h:338
virtual bool WriteLogImpl()
Definition: log_record.h:389
void SetBlinkInfo(const GoogleString &user_agent)
Override SetBlinkInfoImpl if necessary.
virtual void SetBlinkInfoImpl(const GoogleString &user_agent)
Implements setting Blink specific log information; base impl is a no-op.
Definition: log_record.h:261
virtual void LogImageRewriteActivity(const char *id, const GoogleString &url, RewriterApplication::Status status, bool is_image_inlined, bool is_critical_image, bool is_url_rewritten, int size, bool try_low_res_src_insertion, bool low_res_src_inserted, ImageType low_res_image_type, int low_res_data_size)=0
Log a RewriterInfo for the image rewrite filter.
virtual void SetResourceCounts(int num_external_css, int num_scripts)=0
Sets the number of external resources on an HTML page.
virtual void SetCacheStatusForCohortInfo(int page_type, const GoogleString &cohort, bool found, int key_state)=0
Updates the cohort info to update the cache key state.
GoogleString AppliedRewritersString()
void SetCriticalCssInfo(int critical_inlined_bytes, int original_external_bytes, int overhead_bytes)
Sets critical CSS related byte counts (all uncompressed).
AbstractMutex * mutex()
Definition: log_record.h:201
virtual void AddFoundPropertyToCohortInfo(int page_type, const GoogleString &cohort, const GoogleString &property)
Definition: log_record.h:334
virtual LoggingInfo * logging_info()=0
void SetNumCssCriticalImages(int num_css_critical_images)
Sets the number of critical images in CSS.
virtual void SetImageStats(int num_img_tags, int num_inlined_img_tags, int num_critical_images_used)=0
Sets image related statistics.
virtual void SetTimingInfo(const RequestContext::TimingInfo &timing_info)
Set timing information in the logging implementation.
Definition: log_record.h:257
virtual void LogDeviceInfo(int device_type, bool supports_image_inlining, bool supports_lazyload_images, bool supports_critical_images_beacon, bool supports_deferjs, bool supports_webp_in_place, bool supports_webp_rewritten_urls, bool supports_webplossless_alpha, bool is_bot, bool supports_split_html, bool can_preload_resources)
Log information related to the user agent and device making the request.
Definition: log_record.h:358
virtual void SetImageStats(int num_img_tags, int num_inlined_img_tags, int num_critical_images_used)
Sets image related statistics.
Definition: log_record.h:329
bool WriteLogImpl()
Definition: log_record.h:371
void LogIsXhr(bool is_xhr)
Log whether the request is an XmlHttpRequest.
void SetNumHtmlCriticalImages(int num_html_critical_images)
Sets the number of critical images in HTML.
void LogFlushEarlyActivity(const char *id, const GoogleString &url, RewriterApplication::Status status, FlushEarlyResourceInfo::ContentType content_type, FlushEarlyResourceInfo::ResourceType resource_type, bool is_bandwidth_affected, bool in_head)
Log a RewriterInfo for the flush early filter.
void LogRewriterApplicationStatus(const char *rewriter_id, RewriterApplication::Status status)
virtual void AddRetrievedPropertyToCohortInfo(int page_type, const GoogleString &cohort, const GoogleString &property)=0
LoggingInfo * logging_info()
Definition: log_record.h:327
AbstractLogRecord(AbstractMutex *mutex)
Definition: log_record.h:383
virtual void LogImageRewriteActivity(const char *id, const GoogleString &url, RewriterApplication::Status status, bool is_image_inlined, bool is_critical_image, bool is_url_rewritten, int size, bool try_low_res_src_insertion, bool low_res_src_inserted, ImageType low_res_image_type, int low_res_data_size)
Log a RewriterInfo for the image rewrite filter.
Definition: log_record.h:345
RewriterInfo * SetRewriterLoggingStatusHelper(const char *rewriter_id, const GoogleString &url, RewriterApplication::Status status)
void SetCacheStatusForCohortInfo(int page_type, const GoogleString &cohort, bool found, int key_state)
Updates the cohort info to update the cache key state.
Definition: log_record.h:342
virtual void SetBackgroundRewriteInfo(bool log_urls, bool log_url_indices, int max_rewrite_info_log_size)
Sets initial information for background rewrite log.