[autotest] Use the metrics_mock object in case chromite is not set up.
BUG=chromium:688166
TEST=unittest
Change-Id: Ic0077cb2dba75a8d820f229060f3f70f507850a1
Reviewed-on: https://chromium-review.googlesource.com/438754
Commit-Ready: Dan Shi <[email protected]>
Tested-by: Dan Shi <[email protected]>
Reviewed-by: Dan Shi <[email protected]>
diff --git a/client/common_lib/cros/autoupdater.py b/client/common_lib/cros/autoupdater.py
index 6ef829d..3e50332 100644
--- a/client/common_lib/cros/autoupdater.py
+++ b/client/common_lib/cros/autoupdater.py
@@ -18,8 +18,8 @@
try:
from chromite.lib import metrics
-except:
- metrics = None
+except ImportError:
+ metrics = utils.metrics_mock
# Local stateful update path is relative to the CrOS source directory.
LOCAL_STATEFUL_UPDATE_PATH = 'src/platform/dev/stateful_update'
@@ -221,24 +221,23 @@
self._base_update_handler(run_args, err_prefix)
except Exception as e:
to_raise = e
- if metrics:
- build_name = url_to_image_name(self.update_url)
- try:
- board, build_type, milestone, _ = server_utils.ParseBuildName(
- build_name)
- except server_utils.ParseBuildNameException:
- logging.warning('Unable to parse build name %s for metrics. '
- 'Continuing anyway.', build_name)
- board, build_type, milestone = ('', '', '')
- c = metrics.Counter(
- 'chromeos/autotest/autoupdater/trigger')
- f = {'dev_server':
- dev_server.get_hostname(self.update_url),
- 'success': to_raise is None,
- 'board': board,
- 'build_type': build_type,
- 'milestone': milestone}
- c.increment(fields=f)
+
+ build_name = url_to_image_name(self.update_url)
+ try:
+ board, build_type, milestone, _ = server_utils.ParseBuildName(
+ build_name)
+ except server_utils.ParseBuildNameException:
+ logging.warning('Unable to parse build name %s for metrics. '
+ 'Continuing anyway.', build_name)
+ board, build_type, milestone = ('', '', '')
+ c = metrics.Counter('chromeos/autotest/autoupdater/trigger')
+ f = {'dev_server':
+ dev_server.get_hostname(self.update_url),
+ 'success': to_raise is None,
+ 'board': board,
+ 'build_type': build_type,
+ 'milestone': milestone}
+ c.increment(fields=f)
if to_raise:
raise to_raise
@@ -271,24 +270,23 @@
self._base_update_handler(run_args, err_prefix)
except Exception as e:
to_raise = e
- if metrics:
- build_name = url_to_image_name(self.update_url)
- try:
- board, build_type, milestone, _ = server_utils.ParseBuildName(
- build_name)
- except server_utils.ParseBuildNameException:
- logging.warning('Unable to parse build name %s for metrics. '
- 'Continuing anyway.', build_name)
- board, build_type, milestone = ('', '', '')
- c = metrics.Counter(
- 'chromeos/autotest/autoupdater/update')
- f = {'dev_server':
- dev_server.get_hostname(self.update_url),
- 'success': to_raise is None,
- 'board': board,
- 'build_type': build_type,
- 'milestone': milestone}
- c.increment(fields=f)
+
+ build_name = url_to_image_name(self.update_url)
+ try:
+ board, build_type, milestone, _ = server_utils.ParseBuildName(
+ build_name)
+ except server_utils.ParseBuildNameException:
+ logging.warning('Unable to parse build name %s for metrics. '
+ 'Continuing anyway.', build_name)
+ board, build_type, milestone = ('', '', '')
+ c = metrics.Counter('chromeos/autotest/autoupdater/update')
+ f = {'dev_server':
+ dev_server.get_hostname(self.update_url),
+ 'success': to_raise is None,
+ 'board': board,
+ 'build_type': build_type,
+ 'milestone': milestone}
+ c.increment(fields=f)
if to_raise:
raise to_raise
self._verify_update_completed()
diff --git a/client/common_lib/cros/dev_server.py b/client/common_lib/cros/dev_server.py
index 9139c92..6c4999a 100644
--- a/client/common_lib/cros/dev_server.py
+++ b/client/common_lib/cros/dev_server.py
@@ -27,8 +27,9 @@
try:
from chromite.lib import metrics
-except:
- metrics = None
+except ImportError:
+ metrics = utils.metrics_mock
+
CONFIG = global_config.global_config
# This file is generated at build time and specifies, per suite and per test,
@@ -1972,41 +1973,39 @@
'AU failed, trying IP instead of hostname: %s',
host_name_ip)
- if metrics:
- try:
- board, build_type, milestone, _ = server_utils.ParseBuildName(
- build_name)
- except server_utils.ParseBuildNameException:
- logging.warning('Unable to parse build name %s for metrics. '
- 'Continuing anyway.', build_name)
- board, build_type, milestone = ('', '', '')
+ # Upload data to metrics
+ try:
+ board, build_type, milestone, _ = server_utils.ParseBuildName(
+ build_name)
+ except server_utils.ParseBuildNameException:
+ logging.warning('Unable to parse build name %s for metrics. '
+ 'Continuing anyway.', build_name)
+ board, build_type, milestone = ('', '', '')
- # Note: To avoid reaching or exceeding the monarch field cardinality
- # limit, we avoid a metric that includes both dut hostname and other
- # high cardinality fields.
- # Per-devserver cros_update metric.
- c = metrics.Counter(
- 'chromeos/autotest/provision/cros_update_by_devserver')
- # Add a field |error| here. Current error's pattern is manually
- # specified in _EXCEPTION_PATTERNS.
- raised_error = self._classify_exceptions(error_list)
- f = {'dev_server': self.resolved_hostname,
- 'success': is_au_success,
- 'board': board,
- 'build_type': build_type,
- 'milestone': milestone,
- 'error': raised_error}
- c.increment(fields=f)
+ # Note: To avoid reaching or exceeding the monarch field cardinality
+ # limit, we avoid a metric that includes both dut hostname and other
+ # high cardinality fields.
+ # Per-devserver cros_update metric.
+ c = metrics.Counter(
+ 'chromeos/autotest/provision/cros_update_by_devserver')
+ # Add a field |error| here. Current error's pattern is manually
+ # specified in _EXCEPTION_PATTERNS.
+ raised_error = self._classify_exceptions(error_list)
+ f = {'dev_server': self.resolved_hostname,
+ 'success': is_au_success,
+ 'board': board,
+ 'build_type': build_type,
+ 'milestone': milestone,
+ 'error': raised_error}
+ c.increment(fields=f)
- # Per-DUT cros_update metric.
- c = metrics.Counter(
- 'chromeos/autotest/provision/cros_update_per_dut')
- f = {'success': is_au_success,
- 'board': board,
- 'error': raised_error,
- 'dut_host_name': host_name}
- c.increment(fields=f)
-
+ # Per-DUT cros_update metric.
+ c = metrics.Counter('chromeos/autotest/provision/cros_update_per_dut')
+ f = {'success': is_au_success,
+ 'board': board,
+ 'error': raised_error,
+ 'dut_host_name': host_name}
+ c.increment(fields=f)
if not is_au_success:
# If errors happen in the CrOS AU process, report the first error
diff --git a/scheduler/agent_task.py b/scheduler/agent_task.py
index 5b3f778..6cc3fd0 100644
--- a/scheduler/agent_task.py
+++ b/scheduler/agent_task.py
@@ -112,8 +112,6 @@
import urllib
import time
-from chromite.lib import metrics
-
from autotest_lib.client.common_lib import global_config
from autotest_lib.client.common_lib import utils
from autotest_lib.frontend.afe import models
@@ -124,6 +122,12 @@
from autotest_lib.server import autoserv_utils
from autotest_lib.server import system_utils
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
+
+
CONFIG = global_config.global_config
AUTOSERV_NICE_LEVEL = 10
diff --git a/scheduler/drone_manager.py b/scheduler/drone_manager.py
index b296b65..ae331e6 100644
--- a/scheduler/drone_manager.py
+++ b/scheduler/drone_manager.py
@@ -2,15 +2,21 @@
import os
import logging
-from chromite.lib import metrics
-
import common
-from autotest_lib.client.common_lib import error, global_config, utils
-from autotest_lib.scheduler import drone_utility, drones
+from autotest_lib.client.common_lib import error
+from autotest_lib.client.common_lib import global_config
+from autotest_lib.client.common_lib import utils
+from autotest_lib.scheduler import drones
+from autotest_lib.scheduler import drone_utility
from autotest_lib.scheduler import drone_task_queue
from autotest_lib.scheduler import scheduler_config
from autotest_lib.scheduler import thread_lib
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
+
# results on drones will be placed under the drone_installation_directory in a
# directory with this name
diff --git a/scheduler/host_scheduler.py b/scheduler/host_scheduler.py
index fb6265f..5300e05 100755
--- a/scheduler/host_scheduler.py
+++ b/scheduler/host_scheduler.py
@@ -62,10 +62,8 @@
import common
from autotest_lib.frontend import setup_django_environment
-from chromite.lib import metrics
-from chromite.lib import ts_mon_config
-
from autotest_lib.client.common_lib import global_config
+from autotest_lib.client.common_lib import utils
from autotest_lib.scheduler import email_manager
from autotest_lib.scheduler import query_managers
from autotest_lib.scheduler import rdb_lib
@@ -76,6 +74,14 @@
from autotest_lib.site_utils import metadata_reporter
from autotest_lib.site_utils import server_manager_utils
+try:
+ from chromite.lib import metrics
+ from chromite.lib import ts_mon_config
+except ImportError:
+ metrics = utils.metrics_mock
+ ts_mon_config = utils.metrics_mock
+
+
_db_manager = None
_shutdown = False
_tick_pause_sec = global_config.global_config.get_config_value(
diff --git a/scheduler/monitor_db.py b/scheduler/monitor_db.py
index f082b69..405f65f 100755
--- a/scheduler/monitor_db.py
+++ b/scheduler/monitor_db.py
@@ -20,8 +20,6 @@
from autotest_lib.frontend import setup_django_environment
import django.db
-from chromite.lib import metrics
-from chromite.lib import ts_mon_config
from autotest_lib.client.common_lib import control_data
from autotest_lib.client.common_lib import global_config
@@ -41,6 +39,13 @@
from autotest_lib.site_utils import metadata_reporter
from autotest_lib.site_utils import server_manager_utils
+try:
+ from chromite.lib import metrics
+ from chromite.lib import ts_mon_config
+except ImportError:
+ metrics = utils.metrics_mock
+ ts_mon_config = utils.metrics_mock
+
BABYSITTER_PID_FILE_PREFIX = 'monitor_db_babysitter'
PID_FILE_PREFIX = 'monitor_db'
diff --git a/scheduler/monitor_db_cleanup.py b/scheduler/monitor_db_cleanup.py
index fd5d73b..5c1ae87 100644
--- a/scheduler/monitor_db_cleanup.py
+++ b/scheduler/monitor_db_cleanup.py
@@ -7,14 +7,18 @@
import random
import time
-from chromite.lib import metrics
-
+from autotest_lib.client.common_lib import utils
from autotest_lib.frontend.afe import models
from autotest_lib.scheduler import email_manager
from autotest_lib.scheduler import scheduler_config
from autotest_lib.client.common_lib import global_config
from autotest_lib.client.common_lib import host_protections
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
+
class PeriodicCleanup(object):
"""Base class to schedule periodical cleanup work.
diff --git a/scheduler/pidfile_monitor.py b/scheduler/pidfile_monitor.py
index 5caac71..7cccc44 100644
--- a/scheduler/pidfile_monitor.py
+++ b/scheduler/pidfile_monitor.py
@@ -10,13 +10,16 @@
import common
-from chromite.lib import metrics
-
+from autotest_lib.client.common_lib import utils
from autotest_lib.client.common_lib import global_config
from autotest_lib.client.common_lib.cros.graphite import autotest_stats
from autotest_lib.scheduler import drone_manager
from autotest_lib.scheduler import scheduler_config
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
def _get_pidfile_timeout_secs():
diff --git a/scheduler/postjob_task.py b/scheduler/postjob_task.py
index 9310c57..67733f5 100644
--- a/scheduler/postjob_task.py
+++ b/scheduler/postjob_task.py
@@ -10,13 +10,18 @@
import os
+from autotest_lib.client.common_lib import utils
from autotest_lib.frontend.afe import models, model_attributes
from autotest_lib.scheduler import agent_task, drones, drone_manager
from autotest_lib.scheduler import email_manager, pidfile_monitor
from autotest_lib.scheduler import scheduler_config
from autotest_lib.server import autoserv_utils
-from chromite.lib import metrics
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
+
_parser_path = os.path.join(drones.AUTOTEST_INSTALL_DIR, 'tko', 'parse')
diff --git a/scheduler/query_managers.py b/scheduler/query_managers.py
index 1dc19ad..57f287f 100644
--- a/scheduler/query_managers.py
+++ b/scheduler/query_managers.py
@@ -13,12 +13,18 @@
import common
from autotest_lib.frontend import setup_django_environment
+
+from autotest_lib.client.common_lib import utils
from autotest_lib.frontend.afe import models
from autotest_lib.server.cros.dynamic_suite import constants
from autotest_lib.scheduler import scheduler_models
from autotest_lib.scheduler import scheduler_lib
-from chromite.lib import metrics
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
+
_job_timer_name = 'chromeos/autotest/scheduler/job_query_durations/%s'
class AFEJobQueryManager(object):
diff --git a/scheduler/rdb.py b/scheduler/rdb.py
index 98d785e..5cfe969 100644
--- a/scheduler/rdb.py
+++ b/scheduler/rdb.py
@@ -19,7 +19,11 @@
from autotest_lib.scheduler import rdb_utils
from autotest_lib.server import utils
-from chromite.lib import metrics
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
+
_rdb_timer_name = 'chromeos/autotest/scheduler/rdb/durations/%s'
_is_master = not utils.is_shard()
diff --git a/scheduler/rdb_cache_manager.py b/scheduler/rdb_cache_manager.py
index 2117750..08f9a00 100644
--- a/scheduler/rdb_cache_manager.py
+++ b/scheduler/rdb_cache_manager.py
@@ -81,10 +81,15 @@
import logging
import common
+from autotest_lib.client.common_lib import utils
from autotest_lib.client.common_lib.global_config import global_config
from autotest_lib.scheduler import rdb_utils
-from chromite.lib import metrics
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
+
MEMOIZE_KEY = 'memoized_hosts'
diff --git a/scheduler/rdb_hosts.py b/scheduler/rdb_hosts.py
index 0b92004..58c4b87 100644
--- a/scheduler/rdb_hosts.py
+++ b/scheduler/rdb_hosts.py
@@ -20,9 +20,9 @@
import time
from django.core import exceptions as django_exceptions
-from chromite.lib import metrics
import common
+from autotest_lib.client.common_lib import utils
from autotest_lib.frontend.afe import rdb_model_extensions as rdb_models
from autotest_lib.frontend.afe import models as afe_models
from autotest_lib.scheduler import rdb_requests
@@ -31,6 +31,11 @@
from autotest_lib.site_utils import metadata_reporter
from autotest_lib.site_utils.suite_scheduler import constants
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
+
class RDBHost(object):
"""A python host object representing a django model for the host."""
diff --git a/scheduler/rdb_utils.py b/scheduler/rdb_utils.py
index 24f5d03..342634a 100644
--- a/scheduler/rdb_utils.py
+++ b/scheduler/rdb_utils.py
@@ -11,8 +11,13 @@
import common
from autotest_lib.client.common_lib import priorities
+from autotest_lib.client.common_lib import utils
-from chromite.lib import metrics
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
+
RDB_STATS_KEY = 'rdb'
diff --git a/scheduler/scheduler_models.py b/scheduler/scheduler_models.py
index 23fd919..60436b8 100644
--- a/scheduler/scheduler_models.py
+++ b/scheduler/scheduler_models.py
@@ -38,7 +38,10 @@
from autotest_lib.server import afe_urls
from autotest_lib.server.cros import provision
-from chromite.lib import metrics
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
_notify_email_statuses = []
diff --git a/scheduler/shard/shard_client.py b/scheduler/shard/shard_client.py
index 0c86a78..e01e16f 100755
--- a/scheduler/shard/shard_client.py
+++ b/scheduler/shard/shard_client.py
@@ -24,11 +24,17 @@
from autotest_lib.scheduler import scheduler_lib
from autotest_lib.server.cros.dynamic_suite import frontend_wrappers
from autotest_lib.server import utils as server_utils
-from chromite.lib import metrics
-from chromite.lib import ts_mon_config
from chromite.lib import timeout_util
from django.db import transaction
+try:
+ from chromite.lib import metrics
+ from chromite.lib import ts_mon_config
+except ImportError:
+ metrics = server_utils.metrics_mock
+ ts_mon_config = server_utils.metrics_mock
+
+
"""
Autotest shard client
diff --git a/server/autoserv b/server/autoserv
index 54760c3..66ee795 100755
--- a/server/autoserv
+++ b/server/autoserv
@@ -27,7 +27,10 @@
from autotest_lib.client.common_lib import utils
from autotest_lib.client.common_lib.cros.graphite import autotest_es
-from chromite.lib import metrics
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
try:
from autotest_lib.puppylab import results_mocker
diff --git a/server/autotest.py b/server/autotest.py
index 72bac39..3dd5ce4 100644
--- a/server/autotest.py
+++ b/server/autotest.py
@@ -4,8 +4,6 @@
import re, os, sys, traceback, time, glob, tempfile
import logging
-from chromite.lib import metrics
-
import common
from autotest_lib.server import installable_object, prebuild, utils
from autotest_lib.client.common_lib import base_job, error, autotemp
@@ -13,6 +11,12 @@
from autotest_lib.client.common_lib import global_config
from autotest_lib.client.common_lib import utils as client_utils
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = client_utils.metrics_mock
+
+
AUTOTEST_SVN = 'svn://test.kernel.org/autotest/trunk/client'
AUTOTEST_HTTP = 'http://test.kernel.org/svn/autotest/trunk/client'
diff --git a/server/control_segments/cleanup b/server/control_segments/cleanup
index 90034c7..6305a62 100644
--- a/server/control_segments/cleanup
+++ b/server/control_segments/cleanup
@@ -1,12 +1,16 @@
import logging
import os
-from chromite.lib import metrics
-
from autotest_lib.client.common_lib import error
from autotest_lib.server import utils
from autotest_lib.server.cros import provision
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
+
+
DURATION_METRIC = 'chromeos/autotest/autoserv/cleanup_duration'
diff --git a/server/control_segments/provision b/server/control_segments/provision
index b0e84ce..580134b 100644
--- a/server/control_segments/provision
+++ b/server/control_segments/provision
@@ -5,12 +5,16 @@
import datetime
import re
-from chromite.lib import metrics
-
from autotest_lib.client.cros import constants
from autotest_lib.server import utils
from autotest_lib.server.cros import provision
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
+
+
LABEL_REGEX = r',.*:'
_LABEL_UPDATE_DURATION_METRIC = metrics.SecondsDistribution(
'chromeos/autotest/provision/label_update_durations')
diff --git a/server/control_segments/reset b/server/control_segments/reset
index 4f044f5..3935c75 100644
--- a/server/control_segments/reset
+++ b/server/control_segments/reset
@@ -1,10 +1,14 @@
import sys
-from chromite.lib import metrics
-
from autotest_lib.server import utils
from autotest_lib.server.cros import provision
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
+
+
DURATION_METRIC = 'chromeos/autotest/autoserv/reset_duration'
diff --git a/server/control_segments/verify b/server/control_segments/verify
index f390f4f..0af7e1b 100644
--- a/server/control_segments/verify
+++ b/server/control_segments/verify
@@ -1,8 +1,12 @@
-from chromite.lib import metrics
-
from autotest_lib.server import utils
from autotest_lib.server.cros import provision
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
+
+
DURATION_METRIC = 'chromeos/autotest/autoserv/verify_duration'
diff --git a/server/crashcollect.py b/server/crashcollect.py
index 0902cde..dca2f5e 100644
--- a/server/crashcollect.py
+++ b/server/crashcollect.py
@@ -6,13 +6,16 @@
import shutil
import time
-from chromite.lib import metrics
-
from autotest_lib.client.common_lib import error
from autotest_lib.client.common_lib import global_config
from autotest_lib.client.cros import constants
from autotest_lib.server import utils
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
+
# The amortized max filesize to collect. For example, if _MAX_FILESIZE is 10
# then we would collect a file with size 20 half the time, and a file with size
diff --git a/server/cros/dynamic_suite/reporting.py b/server/cros/dynamic_suite/reporting.py
index 1ef8499..004f21f 100644
--- a/server/cros/dynamic_suite/reporting.py
+++ b/server/cros/dynamic_suite/reporting.py
@@ -7,14 +7,12 @@
import collections
import HTMLParser
import logging
-import os
import re
import textwrap
from xml.parsers import expat
import common
-from chromite.lib import metrics
from autotest_lib.client.common_lib import error
from autotest_lib.client.common_lib import global_config
@@ -26,6 +24,12 @@
from autotest_lib.server.cros.dynamic_suite import tools
from autotest_lib.site_utils import gmail_lib
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = site_utils.metrics_mock
+
+
# Try importing the essential bug reporting libraries.
try:
from autotest_lib.site_utils import phapi_lib
diff --git a/server/frontend.py b/server/frontend.py
index 2e2eccc..7820a5f 100644
--- a/server/frontend.py
+++ b/server/frontend.py
@@ -20,7 +20,6 @@
import re
import common
-from chromite.lib import metrics
from autotest_lib.frontend.afe import rpc_client_lib
from autotest_lib.client.common_lib import control_data
@@ -29,6 +28,10 @@
from autotest_lib.client.common_lib import utils
from autotest_lib.tko import db
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
try:
from autotest_lib.server.site_common import site_utils as server_utils
diff --git a/server/hosts/cros_host.py b/server/hosts/cros_host.py
index d98284d..4819112 100644
--- a/server/hosts/cros_host.py
+++ b/server/hosts/cros_host.py
@@ -46,8 +46,9 @@
# older chromite version.
try:
from chromite.lib import metrics
-except:
- metrics = None
+except ImportError:
+ metrics = utils.metrics_mock
+
CONFIG = global_config.global_config
ENABLE_DEVSERVER_TRIGGER_AUTO_UPDATE = CONFIG.get_config_value(
@@ -393,22 +394,24 @@
'branch': branch,
'devserver': devserver.replace('.', '_'),
}
- if metrics:
- monarch_fields = {
- 'board': board,
- 'build_type': build_type,
- # TODO(akeshet): To be consistent with most other metrics,
- # consider changing the following field to be named
- # 'milestone'.
- 'branch': branch,
- 'dev_server': devserver,
- }
- metrics.Counter(
- 'chromeos/autotest/provision/verify_url'
- ).increment(fields=monarch_fields)
- metrics.SecondsDistribution(
- 'chromeos/autotest/provision/verify_url_duration'
- ).add(stage_time, fields=monarch_fields)
+
+ monarch_fields = {
+ 'board': board,
+ 'build_type': build_type,
+ # TODO(akeshet): To be consistent with most other metrics,
+ # consider changing the following field to be named
+ # 'milestone'.
+ 'branch': branch,
+ 'dev_server': devserver,
+ }
+ metrics.Counter(
+ 'chromeos/autotest/provision/verify_url'
+ ).increment(fields=monarch_fields)
+ metrics.SecondsDistribution(
+ 'chromeos/autotest/provision/verify_url_duration'
+ ).add(stage_time, fields=monarch_fields)
+
+
def stage_server_side_package(self, image=None):
"""Stage autotest server-side package on devserver.
@@ -701,17 +704,14 @@
server_name)
logging.info('Staging build for AU: %s', update_url)
devserver.trigger_download(build, synchronous=False)
- if metrics:
- c = metrics.Counter(
- 'chromeos/autotest/provision/failover_download')
- c.increment(fields=monarch_fields)
+ c = metrics.Counter(
+ 'chromeos/autotest/provision/failover_download')
+ c.increment(fields=monarch_fields)
else:
logging.info('Staging build for AU: %s', update_url)
devserver.trigger_download(build, synchronous=False)
- if metrics:
- c = metrics.Counter(
- 'chromeos/autotest/provision/trigger_download')
- c.increment(fields=monarch_fields)
+ c = metrics.Counter('chromeos/autotest/provision/trigger_download')
+ c.increment(fields=monarch_fields)
# Report provision stats.
(metrics.Counter('chromeos/autotest/provision/install_with_devserver')
@@ -719,9 +719,8 @@
logging.debug('Resolved devserver for auto-update: %s', devserver.url())
# and other metrics from this function.
- if metrics:
- metrics.Counter('chromeos/autotest/provision/resolve',
- ).increment(fields=monarch_fields)
+ metrics.Counter('chromeos/autotest/provision/resolve'
+ ).increment(fields=monarch_fields)
devserver.auto_update(self.hostname, build,
log_dir=self.job.resultdir,
@@ -1378,16 +1377,15 @@
raise
finally:
duration = int(time.time() - t0)
- if metrics:
- metrics.Counter(
- 'chromeos/autotest/autoserv/reboot_count').increment(
- fields=metric_fields)
- metrics.Counter(
- 'chromeos/autotest/autoserv/reboot_debug').increment(
- fields=metric_debug_fields)
- metrics.SecondsDistribution(
- 'chromeos/autotest/autoserv/reboot_duration').add(
- duration, fields=metric_fields)
+ metrics.Counter(
+ 'chromeos/autotest/autoserv/reboot_count').increment(
+ fields=metric_fields)
+ metrics.Counter(
+ 'chromeos/autotest/autoserv/reboot_debug').increment(
+ fields=metric_debug_fields)
+ metrics.SecondsDistribution(
+ 'chromeos/autotest/autoserv/reboot_duration').add(
+ duration, fields=metric_fields)
def suspend(self, **dargs):
diff --git a/server/hosts/servo_host.py b/server/hosts/servo_host.py
index c74a378..7c938fe 100644
--- a/server/hosts/servo_host.py
+++ b/server/hosts/servo_host.py
@@ -38,7 +38,11 @@
from autotest_lib.server.hosts import ssh_host
from autotest_lib.site_utils.rpm_control_system import rpm_client
-from chromite.lib import metrics
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
+
# Names of the host attributes in the database that represent the values for
# the servo_host and servo_port for a servo connected to the DUT.
diff --git a/server/hosts/ssh_host.py b/server/hosts/ssh_host.py
index ab3dbf2..130337f 100644
--- a/server/hosts/ssh_host.py
+++ b/server/hosts/ssh_host.py
@@ -13,7 +13,8 @@
import inspect
import logging
import re
-from autotest_lib.client.common_lib import error, pxssh
+from autotest_lib.client.common_lib import error
+from autotest_lib.client.common_lib import pxssh
from autotest_lib.server import utils
from autotest_lib.server.hosts import abstract_ssh
@@ -21,8 +22,8 @@
# older chromite version.
try:
from chromite.lib import metrics
-except:
- metrics = None
+except ImportError:
+ metrics = utils.metrics_mock
class SSHHost(abstract_ssh.AbstractSSHHost):
@@ -130,24 +131,22 @@
@param counter_name: string indicating which counter to use
@param failure_name: string indentifying an error, or 'success'
"""
- if metrics:
- if counter_name == 'call':
- # ssh_counter records the outcome of each ssh invocation
- # inside _run(), including exceptions.
- ssh_counter = metrics.Counter('chromeos/autotest/ssh/calls')
- fields = {'error' : failure_name or 'success',
- 'attempt' : ssh_call_count}
- ssh_counter.increment(fields=fields)
+ if counter_name == 'call':
+ # ssh_counter records the outcome of each ssh invocation
+ # inside _run(), including exceptions.
+ ssh_counter = metrics.Counter('chromeos/autotest/ssh/calls')
+ fields = {'error' : failure_name or 'success',
+ 'attempt' : ssh_call_count}
+ ssh_counter.increment(fields=fields)
- if counter_name == 'run':
- # run_counter records each call to _run() with its result
- # and how many tries were made. Calls are recorded when
- # _run() exits (including exiting with an exception)
- run_counter = metrics.Counter('chromeos/autotest/ssh/runs')
- fields = {'error' : failure_name or 'success',
- 'attempt' : ssh_call_count}
- run_counter.increment(fields=fields)
-
+ if counter_name == 'run':
+ # run_counter records each call to _run() with its result
+ # and how many tries were made. Calls are recorded when
+ # _run() exits (including exiting with an exception)
+ run_counter = metrics.Counter('chromeos/autotest/ssh/runs')
+ fields = {'error' : failure_name or 'success',
+ 'attempt' : ssh_call_count}
+ run_counter.increment(fields=fields)
# If ssh_failure_retry_ok is True, retry twice on timeouts and generic
# error 255: if a simple retry doesn't work, kill the ssh master
diff --git a/server/site_crashcollect.py b/server/site_crashcollect.py
index 9601c08..892a8a0 100644
--- a/server/site_crashcollect.py
+++ b/server/site_crashcollect.py
@@ -14,7 +14,10 @@
from autotest_lib.server.crashcollect import collect_log_file
from autotest_lib.server import utils
-from chromite.lib import metrics
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = client_utils.metrics_mock
def generate_minidump_stacktrace(minidump_path):
diff --git a/server/site_tests/cheets_CTS/cheets_CTS.py b/server/site_tests/cheets_CTS/cheets_CTS.py
index 3189380..c64fe83 100644
--- a/server/site_tests/cheets_CTS/cheets_CTS.py
+++ b/server/site_tests/cheets_CTS/cheets_CTS.py
@@ -21,10 +21,11 @@
from autotest_lib.client.common_lib import error
from autotest_lib.server import utils
from autotest_lib.server.cros import tradefed_test
+
try:
from chromite.lib import metrics
-except:
- metrics = None
+except ImportError:
+ metrics = utils.metrics_mock
# Notice if there are only a few failures each RETRY step currently (08/01/2016)
# takes a bit more than 6 minutes (mostly for reboot, login, starting ARC).
@@ -165,12 +166,9 @@
m = 'chromeos/autotest/infra_benchmark/cheets/push_media/duration'
fields = {'success': False,
'dut_host_name': self._host.hostname}
- if metrics:
- with metrics.SecondsTimer(m, fields=fields) as c:
- self._copy_media(media)
- c['success'] = True
- else:
+ with metrics.SecondsTimer(m, fields=fields) as c:
self._copy_media(media)
+ c['success'] = True
if not self._verify_media(media):
raise error.TestFail('Error: saw corruption pushing media files.')
diff --git a/server/site_tests/dummy_PassServer/control b/server/site_tests/dummy_PassServer/control
index 9cda02e..127064b 100644
--- a/server/site_tests/dummy_PassServer/control
+++ b/server/site_tests/dummy_PassServer/control
@@ -16,7 +16,13 @@
This is a helper test that will succeed.
"""
-from chromite.lib import metrics
+from autotest_lib.client.common_lib import utils
+
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
+
def run(machine):
job.run_test('dummy_PassServer',
diff --git a/site_utils/check_hung_proc.py b/site_utils/check_hung_proc.py
index e8b72cd..4b0326cf 100755
--- a/site_utils/check_hung_proc.py
+++ b/site_utils/check_hung_proc.py
@@ -20,7 +20,11 @@
import subprocess
from autotest_lib.server import site_utils
-from chromite.lib import metrics
+
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = site_utils.metrics_mock
PROGRAM_TO_CHECK_SET = set(['gsutil', 'autoserv'])
diff --git a/site_utils/collect_host_stats.py b/site_utils/collect_host_stats.py
index 89e8dae..460c7dc 100755
--- a/site_utils/collect_host_stats.py
+++ b/site_utils/collect_host_stats.py
@@ -15,14 +15,20 @@
from datetime import timedelta
import common
-from chromite.lib import metrics
-from chromite.lib import ts_mon_config
from autotest_lib.client.common_lib import time_utils
+from autotest_lib.client.common_lib import utils
from autotest_lib.site_utils import gmail_lib
from autotest_lib.site_utils import host_history
from autotest_lib.site_utils import host_history_utils
from autotest_lib.site_utils import host_label_utils
+try:
+ from chromite.lib import metrics
+ from chromite.lib import ts_mon_config
+except ImportError:
+ metrics = utils.metrics_mock
+ ts_mon_config = utils.metrics_mock
+
_MACHINE_UTILIZATION_RATE_HOURLY = metrics.Float(
'chromeos/autotest/host/machine_utilization_rate/hourly')
diff --git a/site_utils/count_jobs.py b/site_utils/count_jobs.py
index 19d61fb..6fe9056 100755
--- a/site_utils/count_jobs.py
+++ b/site_utils/count_jobs.py
@@ -14,7 +14,12 @@
from autotest_lib.frontend import setup_django_environment
from autotest_lib.frontend.afe import models
from autotest_lib.server import site_utils
-from chromite.lib import metrics
+
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = site_utils.metrics_mock
+
def number_of_jobs_since(delta):
"""Returns the number of jobs kicked off in the last |duration| minutes.
diff --git a/site_utils/gmail_lib.py b/site_utils/gmail_lib.py
index e604ae7..2659292 100755
--- a/site_utils/gmail_lib.py
+++ b/site_utils/gmail_lib.py
@@ -40,7 +40,11 @@
# of a sys.path war between chromite and autotest crbug.com/622988
from autotest_lib.server import utils as server_utils
from chromite.lib import retry_util
-from chromite.lib import metrics
+
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = site_utils.metrics_mock
DEFAULT_CREDS_FILE = global_config.global_config.get_config_value(
diff --git a/site_utils/gs_offloader.py b/site_utils/gs_offloader.py
index 657acf3..a323503 100755
--- a/site_utils/gs_offloader.py
+++ b/site_utils/gs_offloader.py
@@ -21,7 +21,6 @@
import re
import shutil
import signal
-import socket
import subprocess
import sys
import tempfile
@@ -38,15 +37,22 @@
from autotest_lib.site_utils import pubsub_utils
from autotest_lib.tko import models
-from chromite.lib import metrics
-from chromite.lib import parallel
-from chromite.lib import ts_mon_config
+# Autotest requires the psutil module from site-packages, so it must be imported
+# after "import common"
try:
# Does not exist, nor is needed, on moblab.
import psutil
except ImportError:
psutil = None
+from chromite.lib import parallel
+try:
+ from chromite.lib import metrics
+ from chromite.lib import ts_mon_config
+except ImportError:
+ metrics = site_utils.metrics_mock
+ ts_mon_config = site_utils.metrics_mock
+
GS_OFFLOADING_ENABLED = global_config.global_config.get_config_value(
'CROS', 'gs_offloading_enabled', type=bool, default=True)
@@ -270,7 +276,7 @@
ignore_status=True).stdout.strip()
try:
count = int(count)
- except ValueError, TypeError:
+ except (ValueError, TypeError):
logging.warning('Fail to get the file count in folder %s.', dir_entry)
return
if count < MAX_FILE_COUNT:
diff --git a/site_utils/lxc.py b/site_utils/lxc.py
index 4b73cc0..c81efe8 100644
--- a/site_utils/lxc.py
+++ b/site_utils/lxc.py
@@ -38,7 +38,11 @@
from autotest_lib.site_utils import lxc_config
from autotest_lib.site_utils import lxc_utils
-from chromite.lib import metrics
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
+
config = global_config.global_config
diff --git a/site_utils/stats/mysql_stats.py b/site_utils/stats/mysql_stats.py
index e208d3c..02e100e 100755
--- a/site_utils/stats/mysql_stats.py
+++ b/site_utils/stats/mysql_stats.py
@@ -16,10 +16,15 @@
import common
-from chromite.lib import ts_mon_config
-from chromite.lib import metrics
-
from autotest_lib.client.common_lib import global_config
+from autotest_lib.client.common_lib import utils
+
+try:
+ from chromite.lib import metrics
+ from chromite.lib import ts_mon_config
+except ImportError:
+ metrics = utils.metrics_mock
+ ts_mon_config = utils.metrics_mock
AT_DIR='/usr/local/autotest'
diff --git a/site_utils/suite_scheduler/deduping_scheduler.py b/site_utils/suite_scheduler/deduping_scheduler.py
index 0158c90..d0587b8 100644
--- a/site_utils/suite_scheduler/deduping_scheduler.py
+++ b/site_utils/suite_scheduler/deduping_scheduler.py
@@ -12,7 +12,11 @@
from autotest_lib.server import site_utils
from autotest_lib.server.cros import provision
from autotest_lib.server.cros.dynamic_suite import frontend_wrappers, reporting
-from chromite.lib import metrics
+
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = site_utils.metrics_mock
CONFIG = global_config.global_config
diff --git a/site_utils/suite_scheduler/driver.py b/site_utils/suite_scheduler/driver.py
index 68eb282..7651d81 100644
--- a/site_utils/suite_scheduler/driver.py
+++ b/site_utils/suite_scheduler/driver.py
@@ -11,9 +11,14 @@
import task, timed_event
import common
+from autotest_lib.client.common_lib import utils
from autotest_lib.server import utils
-from chromite.lib import metrics
+try:
+ from chromite.lib import metrics
+except ImportError:
+ metrics = utils.metrics_mock
+
POOL_SIZE = 32
diff --git a/site_utils/suite_scheduler/suite_scheduler.py b/site_utils/suite_scheduler/suite_scheduler.py
index 2a48a89..ba60657 100755
--- a/site_utils/suite_scheduler/suite_scheduler.py
+++ b/site_utils/suite_scheduler/suite_scheduler.py
@@ -40,6 +40,7 @@
import board_enumerator, deduping_scheduler, driver, forgiving_config_parser
import manifest_versions, sanity, task
from autotest_lib.client.common_lib import global_config
+from autotest_lib.client.common_lib import utils
from autotest_lib.client.common_lib import logging_config, logging_manager
from autotest_lib.server.cros.dynamic_suite import frontend_wrappers
try:
@@ -51,7 +52,11 @@
server_manager_utils = None
logging.debug('Could not load server_manager_utils module, expected '
'if you are running sanity check or pre-submit hook')
-from chromite.lib import ts_mon_config
+
+try:
+ from chromite.lib import ts_mon_config
+except ImportError:
+ ts_mon_config = utils.metrics_mock
CONFIG_SECTION = 'SCHEDULER'