Skip to content

Commit bae8fc5

Browse files
committed
chore: track generation time for discoveryengine
1 parent d4e6a4a commit bae8fc5

File tree

3 files changed

+87
-4296
lines changed

3 files changed

+87
-4296
lines changed

.generator/cli.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import subprocess
2424
import sys
2525
import tempfile
26+
import time
2627
import yaml
2728
from datetime import date, datetime
2829
from functools import lru_cache
@@ -31,6 +32,40 @@
3132
import build.util
3233
import parse_googleapis_content
3334

35+
logging.basicConfig(stream=sys.stdout, level=logging.INFO)
36+
37+
import functools
38+
39+
PERF_LOGGING_ENABLED = os.environ.get("ENABLE_PERF_LOGS") == "1"
40+
41+
if PERF_LOGGING_ENABLED:
42+
perf_logger = logging.getLogger("performance_metrics")
43+
perf_logger.setLevel(logging.INFO)
44+
perf_handler = logging.FileHandler("performance_metrics.log", mode='w')
45+
perf_formatter = logging.Formatter('%(asctime)s | %(message)s', datefmt='%H:%M:%S')
46+
perf_handler.setFormatter(perf_formatter)
47+
perf_logger.addHandler(perf_handler)
48+
perf_logger.propagate = False
49+
50+
def track_time(func):
51+
"""
52+
Decorator. Usage: @track_time
53+
If logging is OFF, it returns the original function (Zero Overhead).
54+
If logging is ON, it wraps the function to measure execution time.
55+
"""
56+
if not PERF_LOGGING_ENABLED:
57+
return func
58+
59+
@functools.wraps(func)
60+
def wrapper(*args, **kwargs):
61+
start_time = time.perf_counter()
62+
try:
63+
return func(*args, **kwargs)
64+
finally:
65+
duration = time.perf_counter() - start_time
66+
perf_logger.info(f"{func.__name__:<30} | {duration:.4f} seconds")
67+
68+
return wrapper
3469

3570
try:
3671
import synthtool
@@ -320,6 +355,7 @@ def _get_library_id(request_data: Dict) -> str:
320355
return library_id
321356

322357

358+
@track_time
323359
def _run_post_processor(output: str, library_id: str, is_mono_repo: bool):
324360
"""Runs the synthtool post-processor on the output directory.
325361
@@ -389,6 +425,7 @@ def _add_header_to_files(directory: str) -> None:
389425
f.writelines(lines)
390426

391427

428+
@track_time
392429
def _copy_files_needed_for_post_processing(
393430
output: str, input: str, library_id: str, is_mono_repo: bool
394431
):
@@ -435,6 +472,7 @@ def _copy_files_needed_for_post_processing(
435472
)
436473

437474

475+
@track_time
438476
def _clean_up_files_after_post_processing(
439477
output: str, library_id: str, is_mono_repo: bool
440478
):
@@ -581,6 +619,7 @@ def _get_repo_name_from_repo_metadata(base: str, library_id: str, is_mono_repo:
581619
return repo_name
582620

583621

622+
@track_time
584623
def _generate_repo_metadata_file(
585624
output: str, library_id: str, source: str, apis: List[Dict], is_mono_repo: bool
586625
):
@@ -622,6 +661,7 @@ def _generate_repo_metadata_file(
622661
_write_json_file(output_repo_metadata, metadata_content)
623662

624663

664+
@track_time
625665
def _copy_readme_to_docs(output: str, library_id: str, is_mono_repo: bool):
626666
"""Copies the README.rst file for a generated library to docs/README.rst.
627667
@@ -663,6 +703,7 @@ def _copy_readme_to_docs(output: str, library_id: str, is_mono_repo: bool):
663703
f.write(content)
664704

665705

706+
@track_time
666707
def handle_generate(
667708
librarian: str = LIBRARIAN_DIR,
668709
source: str = SOURCE_DIR,
@@ -924,6 +965,7 @@ def _stage_gapic_library(tmp_dir: str, staging_dir: str) -> None:
924965
shutil.copytree(tmp_dir, staging_dir, dirs_exist_ok=True)
925966

926967

968+
@track_time
927969
def _generate_api(
928970
api_path: str,
929971
library_id: str,

.librarian/generate-request.json

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"id": "google-cloud-discoveryengine",
3+
"version": "0.4.0",
4+
"apis": [
5+
{
6+
"path": "google/cloud/discoveryengine/v1",
7+
"service_config": "discoveryengine_v1.yaml"
8+
},
9+
{
10+
"path": "google/cloud/discoveryengine/v1beta",
11+
"service_config": "discoveryengine_v1beta.yaml"
12+
},
13+
{
14+
"path": "google/cloud/discoveryengine/v1alpha",
15+
"service_config": "discoveryengine_v1alpha.yaml"
16+
}
17+
],
18+
"source_roots": [
19+
"packages/google-cloud-discoveryengine"
20+
],
21+
"preserve_regex": [
22+
"packages/google-cloud-discoveryengine/CHANGELOG.md",
23+
"docs/CHANGELOG.md",
24+
"samples/README.txt",
25+
"samples/snippets/README.rst",
26+
"tests/system"
27+
],
28+
"remove_regex": [
29+
"packages/google-cloud-discoveryengine/"
30+
],
31+
"tag_format": "{id}-v{version}"
32+
}

0 commit comments

Comments
 (0)