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