blob: 850d8a6817d70369dc3740b246f6e9fc88edbb4a [file] [log] [blame]
// 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;
}