| // Copyright 2012 Google Inc. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| // Author: snagori@google.com (Shrikant Nagori) |
| // Protobufs to store all information related to logging. |
| syntax = "proto2"; |
| |
| option optimize_for = LITE_RUNTIME; |
| |
| import "pagespeed/kernel/http/image_types.proto"; |
| import "pagespeed/opt/logging/enums.proto"; |
| |
| package net_instaweb; |
| |
| // DEPRECATED. |
| message TimingInfo { |
| // Local HTTP cache lookup time in ms. |
| optional int64 cache1_ms = 1; |
| // Remote HTTP cache lookup time in ms. |
| optional int64 cache2_ms = 2; |
| // Time taken to fetch the http header. |
| optional int64 header_fetch_ms = 3; |
| // Time taken by fastnet to fetch the entire resource. |
| optional int64 fetch_ms = 4; |
| // Time taken to send the first byte back to the client. |
| optional int64 time_to_first_byte_ms = 5; |
| // Absolute time when the request started, in ms since 1970. |
| optional int64 request_start_ms = 6; |
| // Time from the start of the request to when parsing begins. Note that this |
| // is only set for HTML requests that are parsed. |
| optional int64 time_to_start_parse_ms = 7; |
| // Time from the start of the request to when the fetch is triggered. Note |
| // that this is only set for requests that require a fetch. |
| optional int64 time_to_start_fetch_ms = 8; |
| // Time for processing the request, i.e. wall time when the response is fully |
| // generated - request_start_ms - fetch_ms. |
| optional int64 processing_time_ms = 9; |
| // Time from start of request till we begin processing it. |
| optional int64 time_to_start_processing_ms = 10; |
| // Time from start of request till pcache lookup is started. |
| optional int64 time_to_pcache_lookup_start_ms = 11; |
| // Time from start of request till pcache lookup is completed. |
| optional int64 time_to_pcache_lookup_end_ms = 12; |
| } |
| |
| // This proto stores all Blink requests related information. These are logged |
| // in the blink log record. |
| // Next id for BlinkInfo : 8 |
| message BlinkInfo { |
| enum BlinkRequestFlow { |
| BLINK_CACHE_HIT = 1; |
| BLINK_CACHE_MISS_FOUND_RESOURCE = 2; |
| BLINK_CACHE_MISS_FETCH_NON_OK = 3; |
| BLINK_CACHE_MISS_TRIGGERED_REWRITE = 4; |
| FOUND_MALFORMED_HTML = 5; |
| FOUND_LAST_STATUS_CODE_NON_OK = 6; |
| FOUND_CONTENT_LENGTH_OVER_THRESHOLD = 7; |
| // The following is only set in the main log record and not in the blink log |
| // record. |
| BLINK_BLACKLISTED = 8; // Diff mismatch based blacklist active. |
| }; |
| // Tracks the flow of a Blink request. Set in main log record also. |
| optional BlinkRequestFlow blink_request_flow = 1; |
| |
| // The event id of the user request for which blink flow was triggered. |
| // To parse this field, refer: |
| // net/instaweb/util/public/string_util.h#StringToInt64 |
| optional string request_event_id_time_usec = 2; |
| |
| // Tracks whether html change detection full-diff found a match or not. |
| optional bool html_match = 3; |
| |
| enum UserAgent { |
| NOT_SET = 0; |
| BLINK_DESKTOP_WHITELIST = 1; |
| BLINK_DESKTOP_BLACKLIST = 2; |
| BLINK_MOBILE = 3; |
| NULL_OR_EMPTY = 4; |
| NOT_SUPPORT_BLINK = 5; |
| }; |
| // user agent which initiated the blink request. This is set only in main log |
| // record and not in blink log record. |
| optional UserAgent blink_user_agent = 4; |
| |
| // URL of the request. |
| optional string url = 5; |
| |
| // Tracks whether html change detection smart-diff found a match or not. |
| optional bool html_smart_diff_match = 6; |
| |
| // Tracks whether we hit the #mismatches threshold for blacklisting. |
| optional bool mismatch_blacklist_threshold_exceeded = 7; |
| } |
| |
| // This proto stores information related to metadata cache lookups and |
| // rewriting. |
| // Next id for MetadataCacheInfo: 10 |
| message MetadataCacheInfo { |
| // Number of hits. |
| optional int32 num_hits = 1; |
| // Number of "can revalidates". |
| optional int32 num_revalidates = 2; |
| // Number of misses. |
| optional int32 num_misses = 3; |
| |
| // The following fields are only for rewriting from HTML parse flow. |
| |
| // The number of times we successfully revalidated an expired metadata within |
| // the rewrite deadline. This will be 0 if |
| // metadata_cache_staleness_threshold_ms is >0. Will be <= num_revalidates |
| optional int32 num_successful_revalidates = 4; |
| // The number of times we successfully fetched and rewrote a resource (when |
| // metadata cache gave a miss) within the rewrite deadline. Will be <= |
| // num_misses. |
| optional int32 num_successful_rewrites_on_miss = 5; |
| // The number of times an expired resource metadata was used (as stale). This |
| // will be 0 unless metadata_cache_staleness_threshold_ms flag has a value >0. |
| // Will be <= num_hits. |
| optional int32 num_stale_rewrites = 6; |
| // Total number of rewrites that were completed in the rewrite deadline. |
| optional int32 num_rewrites_completed = 7; |
| // Number of rewrites that were disabled and hence no cache lookps were done. |
| optional int32 num_disabled_rewrites = 8; |
| // Number of rewrites that were repeats and hence a previous result was used |
| // (no cache lookps were done). |
| optional int32 num_repeated_rewrites = 9; |
| } |
| |
| message RewritingInfo { |
| } |
| |
| // This proto stores all information related to split_html. |
| // Next id for SplitHtmlInfo : 2 |
| message SplitHtmlInfo { |
| // Total size of below-the-fold JSON. |
| optional int64 json_size = 1; |
| } |
| |
| // This proto stores all information related to property cohorts. |
| // Next is for PropertyCohortInfo: 7 |
| message PropertyCohortInfo { |
| // The name of the property cohort. |
| optional string name = 1; |
| // Whether the cohort was found in the cache |
| optional bool is_cache_hit = 2 [ default = false ]; |
| // The list of properties that were found in the cache. |
| repeated string properties_found = 3; |
| // The device type for which this cohort was looked up. |
| // Refer to net/instaweb/http/public/user_agent_matcher.h to see what the |
| // different values map to. |
| optional int32 device_type = 4; |
| // The cache type for which this cohort was looked up. |
| // Refer to third_party/pagespeed/automatic/proxy_fetch.h to see what |
| // the different values map to. |
| optional int32 cache_type = 5; |
| // Cache result defined as CacheInterface::KeyState in |
| // net/instaweb/util/public/cache_interface.h. |
| optional int32 cache_key_state = 6; |
| } |
| |
| // This proto stores information related to property cache lookups. |
| // Next id for PropertyPageInfo: 2 |
| message PropertyPageInfo { |
| repeated PropertyCohortInfo cohort_info = 1; |
| } |
| |
| // Information related to flush subresources filter. |
| // Next id for FlushEarlyFlowInfo: 2 |
| message FlushEarlyFlowInfo { |
| // An estimate of the time available at the client to download resources |
| // before it starts receiving html content. |
| optional int64 available_time_ms = 1; |
| } |
| |
| // Information related to each resource url considered by the flush subresources |
| // filter. |
| // Next id for FlushEarlyResourceInfo: 5 |
| message FlushEarlyResourceInfo { |
| enum ResourceType { |
| UNKNOWN_TYPE = 0; |
| PAGESPEED = 1; |
| NON_PAGESPEED = 2; |
| PRIVATE_CACHEABLE = 3; |
| DEFERJS_SCRIPT = 4; |
| PUBLIC_CACHEABLE = 5; |
| } |
| |
| enum ContentType { |
| UNKNOWN_CONTENT_TYPE = 0; |
| IMAGE = 1; |
| JS = 2; |
| CSS = 3; |
| } |
| |
| // Content type of the resource. |
| optional ContentType content_type = 1; |
| // Type of the resource based on url and its cache ttl. |
| optional ResourceType resource_type = 2; |
| // Is this resource affected by available bandwidth? |
| optional bool is_bandwidth_affected = 3; |
| // Is the resource in HEAD or BODY? |
| optional bool in_head = 4; |
| } |
| |
| // This proto stores information about the critical CSS filter. |
| // Next id for CriticalCssInfo: 4 |
| message CriticalCssInfo { |
| // Number of bytes of uncompressed critical CSS inlined for one HTML page. |
| optional int64 critical_inlined_bytes = 1; |
| // Number of bytes of uncompressed external CSS (flattened) that corresponds |
| // to the inlined critical CSS. |
| optional int64 original_external_bytes = 2; |
| // Number of bytes of critical CSS inlined plus inline blocks copied |
| // to the full CSS load at the bottom of the page. |
| // Does count the mark-up nor the JavaScript added. |
| optional int64 overhead_bytes = 3; |
| } |
| |
| // This proto stores all Cache Html flow requests related information. |
| // Next id for CacheHtmlLoggingInfo : 8 |
| message CacheHtmlLoggingInfo { |
| enum CacheHtmlRequestFlow { |
| CACHE_HTML_HIT = 1; |
| CACHE_HTML_MISS_FOUND_RESOURCE = 2; |
| CACHE_HTML_MISS_FETCH_NON_OK = 3; |
| CACHE_HTML_MISS_TRIGGERED_REWRITE = 4; |
| FOUND_MALFORMED_HTML = 5; |
| FOUND_CONTENT_LENGTH_OVER_THRESHOLD = 6; |
| // The following is only set in the main log record and not in the cache |
| // html info log record. |
| CACHE_HTML_BLACKLISTED = 7; // Diff mismatch based blacklist active. |
| }; |
| // Tracks the flow of a cache html rewriter request. |
| optional CacheHtmlRequestFlow cache_html_request_flow = 1; |
| |
| // The event id of the user request for which cache html flow was triggered. |
| optional string request_event_id_time_usec = 2; |
| |
| // Tracks whether html change detection full-diff found a match or not. |
| optional bool html_match = 3; |
| |
| // Tracks whether html change detection smart-diff found a match or not. |
| optional bool html_smart_diff_match = 4; |
| |
| // URL of the request. |
| optional string url = 5; |
| |
| enum UserAgent { |
| NOT_SET = 0; |
| CACHE_HTML_DESKTOP_WHITELIST = 1; |
| CACHE_HTML_DESKTOP_BLACKLIST = 2; |
| CACHE_HTML_MOBILE = 3; |
| NULL_OR_EMPTY = 4; |
| NOT_SUPPORT_CACHE_HTML = 5; |
| }; |
| // user agent which initiated the cache html request. |
| // This is set only in main log record and not in cache html info log record. |
| optional UserAgent cache_html_user_agent = 6; |
| |
| // Tracks whether we hit the #mismatches threshold for blacklisting. |
| optional bool mismatch_blacklist_threshold_exceeded = 7; |
| } |
| |
| // Information that applies to a resource. |
| // Next id for RewriteResourceInfo: 9 |
| message RewriteResourceInfo { |
| // True if we inlined the resource. |
| optional bool is_inlined = 1 [ default = false ]; |
| // True if the resource is critical. |
| optional bool is_critical = 2 [ default = false ]; |
| // True if the resource has a pagespeed_no_defer attribute. |
| optional bool has_pagespeed_no_defer = 3 [ default = false ]; |
| // True if the resource is blacklisted. |
| optional bool is_blacklisted = 4 [ default = false ]; |
| // Index of the original resource url in resource url info. |
| optional int32 original_resource_url_index = 5 [ default = -1 ]; |
| // Size (in bytes) of the original resource. |
| optional int32 original_size = 6 [ default = 0 ]; |
| // Size (in bytes) of the optimized resource. |
| optional int32 optimized_size = 7 [ default = 0 ]; |
| // True if the resource has been recompressed. |
| optional bool is_recompressed = 8 [ default = false ]; |
| } |
| |
| // Information related to each resource considered by the image rewrite filter. |
| // Next id for ImageRewriteResourceInfo: 11 |
| message ImageRewriteResourceInfo { |
| // True if the low_res_src html attribute was inserted. |
| optional bool is_low_res_src_inserted = 1 [ default = false ]; |
| // Size of the low resolution image. If it is zero, the low res image was not |
| // found. |
| optional int32 low_res_size = 2 [ default = 0 ]; |
| // Type of the original image. |
| optional net_instaweb.ImageType original_image_type = 3 |
| [ default = IMAGE_UNKNOWN ]; |
| // Type of the optimized image. |
| optional net_instaweb.ImageType optimized_image_type = 4 |
| [ default = IMAGE_UNKNOWN ]; |
| // True if the image has been resized. |
| optional bool is_resized = 5 [ default = false ]; |
| // Original height. |
| optional int32 original_height = 6 [default = 0]; |
| // Original Width. |
| optional int32 original_width = 7 [default = 0]; |
| // True if the image has been resized using rendered_dimensions. |
| optional bool is_resized_using_rendered_dimensions = 8 [ default = false ]; |
| // Resized height. |
| optional int32 resized_height = 9 [default = 0 ]; |
| // Resized width. |
| optional int32 resized_width = 10 [default = 0 ]; |
| } |
| |
| // This proto stores information describing each rewriter's activity in a |
| // request. |
| // Next id for RewriterInfo: 5 |
| message RewriterInfo { |
| // The rewriter's id. |
| optional string id = 1; |
| // Status of this rewriter application. |
| // TODO(gee): Remove this package hack. This is only necessary for the |
| // logging_non_lite_proto build rule. |
| optional net_instaweb.RewriterApplication.Status status = 2; |
| // Flush subresources specific information. |
| optional FlushEarlyResourceInfo flush_early_resource_info = 3; |
| // Information about a resource. |
| optional RewriteResourceInfo rewrite_resource_info = 4; |
| // Image rewrite filter specific information. |
| optional ImageRewriteResourceInfo image_rewrite_resource_info = 5; |
| } |
| |
| // This proto stores all information which related to resource urls. |
| // Next id for ResourceUrlInfo: 2 |
| message ResourceUrlInfo { |
| repeated string url = 1; |
| } |
| |
| // Statistics related to images on the HTML page. |
| // Next id for ImageStats: 3 |
| message ImageStats { |
| // Number of img tags in the page. |
| optional int32 num_img_tags = 1; |
| // Number of img tags in the page which have inlined data. |
| optional int32 num_inlined_img_tags = 2; |
| } |
| |
| message RewriteStatusCount { |
| // Application status. |
| optional net_instaweb.RewriterApplication.Status application_status = 1; |
| // Count for status. |
| optional int32 count = 2; |
| } |
| |
| message RewriterStats { |
| // The rewriter's id. This is a two character string indicating the rewrite |
| // filter used (e.g. "ic" for image compression) on the resource while |
| // proxying the HTML page. |
| optional string id = 1; |
| |
| // Status of rewriter at the Html page level. |
| optional net_instaweb.RewriterHtmlApplication.Status html_status = 2; |
| |
| // Status of rewriter applications on resources. |
| repeated RewriteStatusCount status_counts = 3; |
| } |
| |
| // Information about the device making the request. |
| // Next id for DeviceInfo: 11 |
| message DeviceInfo { |
| // Refer to UserAgentMatcher::DeviceType to interpret this field. |
| optional int32 device_type = 1; |
| // Is image inlining supported. |
| optional bool supports_image_inlining = 2; |
| // Is lazyload images supported. |
| optional bool supports_lazyload_images = 3; |
| // Is critical images beacon supported. |
| optional bool supports_critical_images_beacon = 4; |
| // Is defer javascript supported. |
| optional bool supports_deferjs = 5; |
| // Is webp supported. |
| optional bool supports_webp = 6; |
| // Is webp lossless with alpha supported. |
| optional bool supports_webplossless_alpha = 7; |
| // Is the useragent a bot. |
| optional bool is_bot = 8; |
| // Is split html supported. |
| optional bool supports_split_html = 9; |
| // Is flush early supported. |
| optional bool can_preload_resources = 10; |
| } |
| |
| // This proto stores all information which we would like to log. |
| // Next id for LoggingInfo: 26 |
| message LoggingInfo { |
| // Stores all Blink related information. |
| optional BlinkInfo blink_info = 2; |
| // Sorted list of applied rewriter ids separated by comma. |
| optional string applied_rewriters = 3; |
| // Metadata cache info. |
| optional MetadataCacheInfo metadata_cache_info = 4; |
| // Whether the original resource is cacheable. |
| optional bool is_original_resource_cacheable = 5 [ default = true ]; |
| // Experiment ID used for this request. |
| optional int32 experiment_id = 6; |
| // All information related to split_html. |
| optional SplitHtmlInfo split_html_info = 7; |
| // All information related to the pcache lookup. |
| optional PropertyPageInfo property_page_info = 8; |
| // Rewriter information for this request. |
| repeated RewriterInfo rewriter_info = 9; |
| // Rewriter statistics for this request. |
| repeated RewriterStats rewriter_stats = 22; |
| // Whether the response is HTML. |
| optional bool is_html_response = 10 [ default = false ]; |
| // Whether request URL is disallowed. |
| optional bool is_url_disallowed = 11 [ default = false ]; |
| // RewriteOptions signature hash. |
| optional int64 options_signature_hash = 12; |
| // Whether request is disabled like PageSpeed=off. |
| optional bool is_request_disabled = 13 [ default = false ]; |
| // Information about flush subresources filter. |
| optional FlushEarlyFlowInfo flush_early_flow_info = 14; |
| // Whether the size limit for rewriter_info was exceeded. |
| optional bool rewriter_info_size_limit_exceeded = 15 [ default = false ]; |
| // Whether the request is for a pagespeed resource. |
| optional bool is_pagespeed_resource = 16 [ default = false ]; |
| // Information about the resource urls seen on this page. |
| optional ResourceUrlInfo resource_url_info = 17; |
| // Stores all Cache Html flow related information. |
| optional CacheHtmlLoggingInfo cache_html_logging_info = 18; |
| // Number of critical images on the page. The default is -1 to easily |
| // differentiate between the field being unset and there being no critical |
| // images. |
| optional int32 num_html_critical_images = 19 [ default = -1 ]; |
| // Number of critical images in CSS referenced by the page. The default is -1 |
| // to easily differentiate between the field being unset and there being no |
| // critical images. |
| optional int32 num_css_critical_images = 20 [ default = -1 ]; |
| // Statistics related to images on the HTML page. |
| optional ImageStats image_stats = 21; |
| // Critical CSS info for this request. |
| optional CriticalCssInfo critical_css_info = 23; |
| // Information about the device making the request. |
| optional DeviceInfo device_info = 24; |
| // Is the request an XmlHttpRequest. |
| optional bool is_xhr = 25; |
| |
| // --- DEPRECATED FIELDS FOLLOW --- |
| optional TimingInfo deprecated_timing_info = 1; |
| } |