Commit b06f55ba authored by Ira Burak's avatar Ira Burak Committed by Commit Bot

Use the date of the last major branch as a base date for expiring histograms.

Bug: 753485
Change-Id: Ieed576a7150cb2c39e728e623645ab2126eff9e3
Reviewed-on: https://chromium-review.googlesource.com/665391Reviewed-by: default avatarJesse Doherty <jwd@chromium.org>
Reviewed-by: default avatarAlexei Svitkine <asvitkine@chromium.org>
Commit-Queue: Ira Burak <iburak@google.com>
Cr-Commit-Position: refs/heads/master@{#502902}
parent 6b032dd4
...@@ -11,4 +11,5 @@ generate_expired_histograms_array("expired_histograms_array") { ...@@ -11,4 +11,5 @@ generate_expired_histograms_array("expired_histograms_array") {
] ]
namespace = "chrome_metrics" namespace = "chrome_metrics"
header_filename = "expired_histograms_array.h" header_filename = "expired_histograms_array.h"
major_branch_date_filepath = "//chrome/MAJOR_BRANCH_DATE"
} }
...@@ -17,6 +17,9 @@ ...@@ -17,6 +17,9 @@
# header_filename: # header_filename:
# Name of the generated header file. # Name of the generated header file.
# #
# major_branch_date_filepath:
# A path to the file with the base date.
#
template("generate_expired_histograms_array") { template("generate_expired_histograms_array") {
action(target_name) { action(target_name) {
header_filename = "$target_gen_dir/" + invoker.header_filename header_filename = "$target_gen_dir/" + invoker.header_filename
...@@ -27,6 +30,7 @@ template("generate_expired_histograms_array") { ...@@ -27,6 +30,7 @@ template("generate_expired_histograms_array") {
] ]
inputs = invoker.inputs inputs = invoker.inputs
major_branch_date_filepath = invoker.major_branch_date_filepath
args = [] args = []
...@@ -37,6 +41,7 @@ template("generate_expired_histograms_array") { ...@@ -37,6 +41,7 @@ template("generate_expired_histograms_array") {
args += [ args += [
"-o" + rebase_path(root_gen_dir, root_build_dir), "-o" + rebase_path(root_gen_dir, root_build_dir),
"-H" + rebase_path(header_filename, root_gen_dir), "-H" + rebase_path(header_filename, root_gen_dir),
"-d" + rebase_path(major_branch_date_filepath, root_build_dir),
] + rebase_path(inputs, root_build_dir) ] + rebase_path(inputs, root_build_dir)
} }
} }
...@@ -14,6 +14,8 @@ import sys ...@@ -14,6 +14,8 @@ import sys
import extract_histograms import extract_histograms
import merge_xml import merge_xml
_DATE_FILE_PATTERN = r".*MAJOR_BRANCH_DATE=(.+).*"
_SCRIPT_NAME = "generate_expired_histograms_array.py" _SCRIPT_NAME = "generate_expired_histograms_array.py"
_HASH_DATATYPE = "uint64_t" _HASH_DATATYPE = "uint64_t"
_HEADER = """// Generated from {script_name}. Do not edit! _HEADER = """// Generated from {script_name}. Do not edit!
...@@ -72,6 +74,34 @@ def _GetExpiredHistograms(histograms, base_date): ...@@ -72,6 +74,34 @@ def _GetExpiredHistograms(histograms, base_date):
return expired_histograms_names return expired_histograms_names
def _GetBaseDate(content, pattern):
"""Fetches base date from |content| to compare expiry dates with.
Args:
content: A string with the base date.
pattern(str): A regular expression that matches the base date.
Returns:
A base date as datetime.date object.
Raises:
Error if |content| doesn't match |pattern| or the matched date has invalid
format.
"""
match_result = re.search(pattern, content)
if not match_result:
raise Error("Unable to match {pattern} with provided content: {content}".
format(pattern=pattern, content=content))
base_date_str = match_result.group(1)
try:
base_date = datetime.datetime.strptime(
base_date_str, extract_histograms.EXPIRY_DATE_PATTERN).date()
return base_date
except ValueError:
raise Error("Unable to parse base date {date} from {content}.".
format(date=base_date_str, content=content))
def _HashName(name): def _HashName(name):
"""Returns hash for the given histogram |name|.""" """Returns hash for the given histogram |name|."""
return "0x" + hashlib.md5(name).hexdigest()[:16] return "0x" + hashlib.md5(name).hexdigest()[:16]
...@@ -134,8 +164,10 @@ def _GenerateFile(arguments): ...@@ -134,8 +164,10 @@ def _GenerateFile(arguments):
extract_histograms.ExtractHistogramsFromDom(descriptions)) extract_histograms.ExtractHistogramsFromDom(descriptions))
if had_errors: if had_errors:
raise Error("Error parsing inputs.") raise Error("Error parsing inputs.")
today = datetime.datetime.now().date() with open(arguments.major_branch_date_filepath, "r") as date_file:
expired_histograms_names = _GetExpiredHistograms(histograms, today) file_content = date_file.read()
base_date = _GetBaseDate(file_content, _DATE_FILE_PATTERN)
expired_histograms_names = _GetExpiredHistograms(histograms, base_date)
expired_histograms_map = _GetHashToNameMap(expired_histograms_names) expired_histograms_map = _GetHashToNameMap(expired_histograms_names)
header_file_content = _GenerateHeaderFileContent( header_file_content = _GenerateHeaderFileContent(
arguments.header_filename, arguments.namespace, arguments.header_filename, arguments.namespace,
...@@ -165,6 +197,11 @@ def _ParseArguments(): ...@@ -165,6 +197,11 @@ def _ParseArguments():
default="", default="",
help="Namespace of the generated factory function (code will be in " help="Namespace of the generated factory function (code will be in "
"the global namespace if this is omitted).") "the global namespace if this is omitted).")
arg_parser.add_argument(
"--major_branch_date_filepath",
"-d",
default="",
help="A path to the file with the base date.")
arg_parser.add_argument( arg_parser.add_argument(
"inputs", "inputs",
nargs="+", nargs="+",
......
...@@ -82,13 +82,39 @@ class ExpiredHistogramsTest(unittest.TestCase): ...@@ -82,13 +82,39 @@ class ExpiredHistogramsTest(unittest.TestCase):
base_date = datetime.date(2000, 10, 01) base_date = datetime.date(2000, 10, 01)
with self.assertRaises(generate_expired_histograms_array.Error) as error: with self.assertRaises(generate_expired_histograms_array.Error) as error:
_ = generate_expired_histograms_array._GetExpiredHistograms(histograms, generate_expired_histograms_array._GetExpiredHistograms(histograms,
base_date) base_date)
self.assertEqual( self.assertEqual(
"Unable to parse expiry date 2000-10-01 in histogram SecondHistogram.", "Unable to parse expiry date 2000-10-01 in histogram SecondHistogram.",
str(error.exception)) str(error.exception))
def testGetBaseDate(self):
pattern = generate_expired_histograms_array._DATE_FILE_PATTERN
# Does not match the pattern.
content = "MAJOR_BRANCH__FAKE_DATE=2017/09/09"
with self.assertRaises(generate_expired_histograms_array.Error):
generate_expired_histograms_array._GetBaseDate(content, pattern)
# Has invalid format.
content = "MAJOR_BRANCH_DATE=2010-01-01"
with self.assertRaises(generate_expired_histograms_array.Error):
generate_expired_histograms_array._GetBaseDate(content, pattern)
# Has invalid format.
content = "MAJOR_BRANCH_DATE=2010/20/02"
with self.assertRaises(generate_expired_histograms_array.Error):
generate_expired_histograms_array._GetBaseDate(content, pattern)
# Has invalid date.
content = "MAJOR_BRANCH_DATE=2017/02/29"
with self.assertRaises(generate_expired_histograms_array.Error):
generate_expired_histograms_array._GetBaseDate(content, pattern)
content = "!!FOO!\nMAJOR_BRANCH_DATE=2010/01/01\n!FOO!!"
base_date = generate_expired_histograms_array._GetBaseDate(content, pattern)
self.assertEqual(base_date, datetime.date(2010, 01, 01))
def testGenerateHeaderFileContent(self): def testGenerateHeaderFileContent(self):
header_filename = "test/test.h" header_filename = "test/test.h"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment