Tolerate missing deps in get-stats.py
In order to run on systems where not all requirements are present,
we should be tolerant of missing external dependencies, such as
psutil and pymysql. Print a warning (to stderr) and just leave out
those stats in that case.
Also make running the stats collector use ignore_errors:yes to avoid
failures in the future. I think the stats is not critical enough to
fail a job for bugs like this.
Related-Bug: #1970195
Change-Id: I132b0e1f5033c4f109a8b8cc776c0877574c4a49
diff --git a/tools/get-stats.py b/tools/get-stats.py
index dc0bd0f..2418c85 100755
--- a/tools/get-stats.py
+++ b/tools/get-stats.py
@@ -6,12 +6,24 @@
import itertools
import json
import os
-import psutil
import re
import socket
import subprocess
import sys
-import pymysql
+
+try:
+ import psutil
+except ImportError:
+ psutil = None
+ print('No psutil, process information will not be included',
+ file=sys.stderr)
+
+try:
+ import pymysql
+except ImportError:
+ pymysql = None
+ print('No pymysql, database information will not be included',
+ file=sys.stderr)
# https://www.elastic.co/blog/found-crash-elasticsearch#mapping-explosion
@@ -144,10 +156,10 @@
data = {
'services': get_services_stats(),
- 'db': args.db_pass and get_db_stats(args.db_host,
- args.db_user,
- args.db_pass) or [],
- 'processes': get_processes_stats(args.process),
+ 'db': pymysql and args.db_pass and get_db_stats(args.db_host,
+ args.db_user,
+ args.db_pass) or [],
+ 'processes': psutil and get_processes_stats(args.process) or [],
'api': get_http_stats(args.apache_log),
'report': get_report_info(),
}