1# Copyright 2018, The Android Open Source Project 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15"""Metrics class.""" 16 17from atest import constants 18from atest.metrics import metrics_base 19 20 21class AtestStartEvent(metrics_base.MetricsBase): 22 """Create Atest start event and send to clearcut. 23 24 Usage: 25 metrics.AtestStartEvent( 26 command_line='example_atest_command', 27 test_references=['example_test_reference'], 28 cwd='example/working/dir', 29 os='example_os') 30 """ 31 32 _EVENT_NAME = 'atest_start_event' 33 command_line = constants.INTERNAL 34 test_references = constants.INTERNAL 35 cwd = constants.INTERNAL 36 os = constants.INTERNAL 37 38 39class AtestExitEvent(metrics_base.MetricsBase): 40 """Create Atest exit event and send to clearcut. 41 42 Usage: 43 metrics.AtestExitEvent( 44 duration=metrics_utils.convert_duration(end-start), 45 exit_code=0, 46 stacktrace='some_trace', 47 logs='some_logs') 48 """ 49 50 _EVENT_NAME = 'atest_exit_event' 51 duration = constants.EXTERNAL 52 exit_code = constants.EXTERNAL 53 stacktrace = constants.INTERNAL 54 logs = constants.INTERNAL 55 56 57class FindTestFinishEvent(metrics_base.MetricsBase): 58 """Create find test finish event and send to clearcut. 59 60 Occurs after a SINGLE test reference has been resolved to a test or 61 not found. 62 63 Usage: 64 metrics.FindTestFinishEvent( 65 duration=metrics_utils.convert_duration(end-start), 66 success=true, 67 test_reference='hello_world_test', 68 test_finders=['example_test_reference', 'ref2'], 69 test_info="test_name: hello_world_test - 70 test_runner:AtestTradefedTestRunner - 71 build_targets: 72 set(['MODULES-IN-platform_testing-tests-example-native']) - 73 data:{'rel_config': 74 'platform_testing/tests/example/native/AndroidTest.xml', 75 'filter': frozenset([])} - 76 suite:None - module_class: ['NATIVE_TESTS'] - 77 install_locations:set(['device', 'host'])") 78 """ 79 80 _EVENT_NAME = 'find_test_finish_event' 81 duration = constants.EXTERNAL 82 success = constants.EXTERNAL 83 test_reference = constants.INTERNAL 84 test_finders = constants.INTERNAL 85 test_info = constants.INTERNAL 86 87 88class BuildFinishEvent(metrics_base.MetricsBase): 89 """Create build finish event and send to clearcut. 90 91 Occurs after the build finishes, either successfully or not. 92 93 Usage: 94 metrics.BuildFinishEvent( 95 duration=metrics_utils.convert_duration(end-start), 96 success=true, 97 targets=['target1', 'target2']) 98 """ 99 100 _EVENT_NAME = 'build_finish_event' 101 duration = constants.EXTERNAL 102 success = constants.EXTERNAL 103 targets = constants.INTERNAL 104 105 106class RunnerFinishEvent(metrics_base.MetricsBase): 107 """Create run finish event and send to clearcut. 108 109 Occurs when a single test runner has completed. 110 111 Usage: 112 metrics.RunnerFinishEvent( 113 duration=metrics_utils.convert_duration(end-start), 114 success=true, 115 runner_name='AtestTradefedTestRunner' 116 test=[{name:'hello_world_test', result:0, stacktrace:''}, 117 {name:'test2', result:1, stacktrace:'xxx'}]) 118 """ 119 120 _EVENT_NAME = 'runner_finish_event' 121 duration = constants.EXTERNAL 122 success = constants.EXTERNAL 123 runner_name = constants.EXTERNAL 124 test = constants.INTERNAL 125 126 127class RunTestsFinishEvent(metrics_base.MetricsBase): 128 """Create run tests finish event and send to clearcut. 129 130 Occurs after all test runners and tests have finished. 131 132 Usage: 133 metrics.RunTestsFinishEvent( 134 duration=metrics_utils.convert_duration(end-start)) 135 """ 136 137 _EVENT_NAME = 'run_tests_finish_event' 138 duration = constants.EXTERNAL 139 140 141class LocalDetectEvent(metrics_base.MetricsBase): 142 """Create local detection event and send it to clearcut. 143 144 Usage: 145 metrics.LocalDetectEvent( 146 detect_type=0, 147 result=0) 148 """ 149 150 _EVENT_NAME = 'local_detect_event' 151 detect_type = constants.EXTERNAL 152 result = constants.EXTERNAL 153 154 155def get_run_id() -> str: 156 """Returns the unique run id set for the current invocation.""" 157 return metrics_base.MetricsBase.get_run_id() 158 159 160def is_internal_user() -> bool: 161 """Returns whether the user is a google internal user.""" 162 return metrics_base.get_user_type() == metrics_base.INTERNAL_USER 163