76 lines
2.3 KiB
Python
76 lines
2.3 KiB
Python
"""Extracts the Lighthouse scores from the JSON files in the specified directory and inserts them into the database."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
from utils import send_data_to_posthog
|
|
|
|
|
|
def insert_benchmarking_data(
|
|
lighthouse_data: dict,
|
|
commit_sha: str,
|
|
):
|
|
"""Insert the benchmarking data into the database.
|
|
|
|
Args:
|
|
lighthouse_data: The Lighthouse data to insert.
|
|
commit_sha: The commit SHA to insert.
|
|
"""
|
|
properties = {
|
|
"distinct_id": commit_sha,
|
|
"lighthouse_data": lighthouse_data,
|
|
}
|
|
|
|
# Send the data to PostHog
|
|
send_data_to_posthog("lighthouse_benchmark", properties)
|
|
|
|
|
|
def get_lighthouse_scores(directory_path: str | Path) -> dict:
|
|
"""Extracts the Lighthouse scores from the JSON files in the specified directory.
|
|
|
|
Args:
|
|
directory_path (str): The path to the directory containing the JSON files.
|
|
|
|
Returns:
|
|
dict: The Lighthouse scores.
|
|
"""
|
|
scores = {}
|
|
directory_path = Path(directory_path)
|
|
try:
|
|
for filename in directory_path.iterdir():
|
|
if filename.suffix == ".json" and filename.stem != "manifest":
|
|
data = json.loads(filename.read_text())
|
|
# Extract scores and add them to the dictionary with the filename as key
|
|
scores[data["finalUrl"].replace("http://localhost:3000/", "/")] = {
|
|
"performance_score": data["categories"]["performance"]["score"],
|
|
"accessibility_score": data["categories"]["accessibility"]["score"],
|
|
"best_practices_score": data["categories"]["best-practices"][
|
|
"score"
|
|
],
|
|
"seo_score": data["categories"]["seo"]["score"],
|
|
}
|
|
except Exception as e:
|
|
return {"error": e}
|
|
|
|
return scores
|
|
|
|
|
|
def main():
|
|
"""Runs the benchmarks and inserts the results into the database."""
|
|
# Get the commit SHA and JSON directory from the command line arguments
|
|
commit_sha = sys.argv[1]
|
|
json_dir = sys.argv[2]
|
|
|
|
# Get the Lighthouse scores
|
|
lighthouse_scores = get_lighthouse_scores(json_dir)
|
|
|
|
# Insert the data into the database
|
|
insert_benchmarking_data(lighthouse_scores, commit_sha)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|