mirror of
https://github.com/Dvorinka/excalidraw-full.git
synced 2026-06-03 22:02:57 +00:00
fix: convert cf-kv and excalidraw-libraries from submodules to regular files
- Remove stale cloudflare-worker submodule entry from .gitmodules - Remove .git dirs from cf-kv and excalidraw-libraries so Git tracks them as regular files - Fixes 'No url found for submodule path cf-kv' CI error
This commit is contained in:
@@ -0,0 +1,169 @@
|
||||
from apiclient.discovery import build
|
||||
from datetime import date
|
||||
from datetime import timedelta
|
||||
from oauth2client.service_account import ServiceAccountCredentials
|
||||
import os
|
||||
import json
|
||||
|
||||
|
||||
SCOPES = ["https://www.googleapis.com/auth/analytics.readonly"]
|
||||
VIEW_ID = "208661610"
|
||||
|
||||
THRESSHOLD = 10
|
||||
|
||||
ROOT_DIR = os.path.dirname(os.path.realpath(__file__))
|
||||
STATS_DIR = os.path.join(ROOT_DIR, "stats")
|
||||
KEY_FILE = os.path.join(ROOT_DIR, "excalidraw-key.json")
|
||||
|
||||
MAP = {
|
||||
"Android": "g-script-android",
|
||||
"Apple Devices Frames": "franky47-apple-devices-frames",
|
||||
"Charts": "g-script-charts",
|
||||
"Data Viz": "dbssticky-data-viz",
|
||||
"dbssticky-DataViz": "dbssticky-data-viz",
|
||||
"Dropdowns": "h7y-dropdowns",
|
||||
"excalidraw_art-excalidraw_art": "drwnio-drwnio",
|
||||
"Forms": "g-script-forms",
|
||||
"Gadgets": "morgemoensch-gadgets",
|
||||
"Hearts": "dwelle-hearts",
|
||||
"Information Architecture": "inwardmovement-information-architecture",
|
||||
"IT Logos": "pclainchard-it-logos",
|
||||
"Medias": "g-script-medias",
|
||||
"Polygons": "lipis-polygons",
|
||||
"RaspberryPI": "revolunet-raspberrypi3",
|
||||
"raspberrypi-raspberrypi-zero": "marcottebear-raspberrypi-zero",
|
||||
"Software Architecture": "youritjang-software-architecture",
|
||||
"Stars": "lipis-stars",
|
||||
"Stick figures": "youritjang-stick-figures",
|
||||
"Stick Figures": "youritjang-stick-figures",
|
||||
"Technology Logos": "drwnio-drwnio",
|
||||
"anna-pastushko-aws-architecture-icons": "childishgirl-aws-architecture-icons",
|
||||
}
|
||||
|
||||
|
||||
def initialize_analyticsreporting():
|
||||
credentials = ServiceAccountCredentials.from_json_keyfile_name(KEY_FILE, SCOPES)
|
||||
return build("analyticsreporting", "v4", credentials=credentials)
|
||||
|
||||
|
||||
def get_library_report(analytics, day="yesterday"):
|
||||
return (
|
||||
analytics.reports()
|
||||
.batchGet(
|
||||
body={
|
||||
"reportRequests": [
|
||||
{
|
||||
"viewId": VIEW_ID,
|
||||
"dateRanges": [{"startDate": day, "endDate": day}],
|
||||
"metrics": [{"expression": "ga:totalEvents"}],
|
||||
"dimensions": [
|
||||
{"name": "ga:eventCategory"},
|
||||
{"name": "ga:eventAction"},
|
||||
{"name": "ga:eventLabel"},
|
||||
],
|
||||
}
|
||||
]
|
||||
}
|
||||
)
|
||||
.execute()
|
||||
)
|
||||
|
||||
|
||||
def print_library_response(response):
|
||||
counts = {}
|
||||
for report in response.get("reports", []):
|
||||
for row in report.get("data", {}).get("rows", []):
|
||||
dimensions = row.get("dimensions", [])
|
||||
metrics = row.get("metrics", [])
|
||||
if not (
|
||||
dimensions[0] == "library"
|
||||
and dimensions[1] in ["download", "import"]
|
||||
and dimensions[2] != "(not set)"
|
||||
):
|
||||
continue
|
||||
|
||||
label = dimensions[2]
|
||||
label = label if label not in MAP else MAP[label]
|
||||
value = int(metrics[0]["values"][0])
|
||||
if label in counts:
|
||||
counts[label] += value
|
||||
else:
|
||||
counts[label] = value
|
||||
for download in counts:
|
||||
print(download, ":", counts[download])
|
||||
return counts
|
||||
|
||||
|
||||
def get_libraries_from_analytics(analytics, day):
|
||||
print()
|
||||
print(day)
|
||||
print("-" * 40)
|
||||
response = get_library_report(analytics, day)
|
||||
libraries = print_library_response(response)
|
||||
print()
|
||||
return libraries
|
||||
|
||||
|
||||
def main():
|
||||
if not os.path.exists(KEY_FILE):
|
||||
print("Key file not found", KEY_FILE)
|
||||
return
|
||||
|
||||
today = date.today()
|
||||
current_date = date(2020, 12, 11)
|
||||
stats = {}
|
||||
analytics = initialize_analyticsreporting()
|
||||
total_downloads = 0
|
||||
total_downloads_day = 0
|
||||
total_downloads_week = 0
|
||||
|
||||
while current_date <= today:
|
||||
month = current_date.strftime("%Y-%m")
|
||||
month_path = os.path.join(STATS_DIR, month)
|
||||
if not os.path.isdir(month_path):
|
||||
os.mkdir(month_path)
|
||||
day = current_date.strftime("%Y-%m-%d")
|
||||
# Load data from JSON if it's older than N days
|
||||
if current_date < today + timedelta(days=-2):
|
||||
libraries_file = os.path.join(month_path, day + ".json")
|
||||
try:
|
||||
with open(libraries_file, "r") as day_totals:
|
||||
libraries = json.load(day_totals)
|
||||
except FileNotFoundError:
|
||||
libraries = get_libraries_from_analytics(analytics, day)
|
||||
else:
|
||||
libraries = get_libraries_from_analytics(analytics, day)
|
||||
|
||||
for library in libraries:
|
||||
total = libraries[library]
|
||||
total_downloads += total
|
||||
if library in stats:
|
||||
stats[library]["total"] += total
|
||||
else:
|
||||
stats[library] = {"total": total, "week": 0}
|
||||
if current_date > today + timedelta(days=-7):
|
||||
total_downloads_week += total
|
||||
stats[library]["week"] += total
|
||||
if current_date == today:
|
||||
total_downloads_day += total
|
||||
|
||||
with open(os.path.join(month_path, day + ".json"), "w") as outfile:
|
||||
json.dump(libraries, outfile, indent=2, sort_keys=True)
|
||||
with open(os.path.join(ROOT_DIR, "stats.json"), "w") as outfile:
|
||||
json.dump(stats, outfile, indent=2, sort_keys=True)
|
||||
with open(os.path.join(ROOT_DIR, "total.json"), "w") as outfile:
|
||||
json.dump(
|
||||
{
|
||||
"total": total_downloads,
|
||||
"week": total_downloads_week,
|
||||
"day": total_downloads_day,
|
||||
},
|
||||
outfile,
|
||||
indent=2,
|
||||
sort_keys=True,
|
||||
)
|
||||
current_date += timedelta(days=1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user