diff options
author | Tausif Rahman <tausif.rahman@mongodb.com> | 2022-10-24 19:22:48 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-10-24 19:52:20 +0000 |
commit | 4e0c546d125852f44893d18b23812b3ed8ed468c (patch) | |
tree | 265013a12ea7e645f853f2fbd5a6a61c346c8b79 /evergreen | |
parent | bc579302c004c192fa91d56c092331418eea5639 (diff) | |
download | mongo-4e0c546d125852f44893d18b23812b3ed8ed468c.tar.gz |
SERVER-69837 Cron to publish metrics collected from project
Diffstat (limited to 'evergreen')
-rwxr-xr-x | evergreen/publish_metrics.py | 63 | ||||
-rw-r--r-- | evergreen/vpc_connectivity.py | 11 |
2 files changed, 63 insertions, 11 deletions
diff --git a/evergreen/publish_metrics.py b/evergreen/publish_metrics.py new file mode 100755 index 00000000000..d2536e0b6a8 --- /dev/null +++ b/evergreen/publish_metrics.py @@ -0,0 +1,63 @@ +import datetime +import subprocess +import sys +import os + +from pydantic import ValidationError + +# Get relative imports to work when the package is not installed on the PYTHONPATH. +if __name__ == "__main__" and __package__ is None: + sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from buildscripts.metrics.metrics_datatypes import ToolingMetrics +from buildscripts.metrics.tooling_metrics import _get_internal_tooling_metrics_client +from evergreen.api import RetryingEvergreenApi + +# Check cluster connectivity +try: + client = _get_internal_tooling_metrics_client() + print(client.server_info()) +except Exception as exc: + print("Could not connect to Atlas cluster") + raise exc + +try: + # Get metrics for the last week + one_week_ago_datetime = datetime.datetime.utcnow() - datetime.timedelta(days=7) + last_week_metrics = client.metrics.tooling_metrics.find( + {"utc_starttime": {"$gt": one_week_ago_datetime}}) + + malformed_metrics = [] + invalid_metrics = [] + total_docs = 0 + + # Find any malformed/invalid documents in the cluster + for doc in last_week_metrics: + total_docs += 1 + try: + metrics = ToolingMetrics(**doc) + if metrics.is_malformed(): + malformed_metrics.append(doc['_id']) + except ValidationError: + invalid_metrics.append(doc['_id']) + + metrics_detailed = ("METRICS DETAILED:\n" + f"malformed_metrics_last_week: {malformed_metrics}\n" + f"invalid_metrics_last_week: {invalid_metrics}\n" + f"total_docs_last_week: {total_docs}") + metrics_overview = ( + "METRICS OVERVIEW:\n" + f"malformed_metrics_last_week: {len(malformed_metrics)} ({len(malformed_metrics)/total_docs*100:.2f}%)\n" + f"invalid_metrics_last_week: {len(invalid_metrics)} ({len(invalid_metrics)/total_docs*100:.2f}%)\n" + f"total_docs_last_week: {total_docs}") + + print(metrics_overview) + print(metrics_detailed) + + # Publish metrics to SDP Slack Channel + evg_api = RetryingEvergreenApi.get_api(config_file="./.evergreen.yml") + evg_api.send_slack_message(target="#server-sdp-bfs", msg=metrics_overview) + +except Exception as exc: + print("Unexpected failure while getting metrics") + raise exc diff --git a/evergreen/vpc_connectivity.py b/evergreen/vpc_connectivity.py deleted file mode 100644 index 2512d2e657c..00000000000 --- a/evergreen/vpc_connectivity.py +++ /dev/null @@ -1,11 +0,0 @@ -import sys -import os - -# Get relative imports to work when the package is not installed on the PYTHONPATH. -if __name__ == "__main__" and __package__ is None: - sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) - -from buildscripts.metrics.tooling_metrics import _get_internal_tooling_metrics_client - -client = _get_internal_tooling_metrics_client() -print(client.server_info()) |