argus-alm 0.12.3__py3-none-any.whl → 0.12.4b1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- argus/backend/controller/admin_api.py +26 -0
- argus/backend/controller/api.py +26 -1
- argus/backend/controller/main.py +21 -0
- argus/backend/controller/testrun_api.py +16 -0
- argus/backend/controller/view_api.py +162 -0
- argus/backend/models/web.py +16 -0
- argus/backend/plugins/core.py +25 -10
- argus/backend/plugins/driver_matrix_tests/controller.py +39 -0
- argus/backend/plugins/driver_matrix_tests/model.py +251 -3
- argus/backend/plugins/driver_matrix_tests/raw_types.py +27 -0
- argus/backend/plugins/driver_matrix_tests/service.py +18 -0
- argus/backend/plugins/driver_matrix_tests/udt.py +14 -13
- argus/backend/plugins/generic/model.py +5 -2
- argus/backend/plugins/sct/service.py +13 -1
- argus/backend/service/argus_service.py +116 -20
- argus/backend/service/build_system_monitor.py +37 -7
- argus/backend/service/jenkins_service.py +2 -1
- argus/backend/service/release_manager.py +14 -0
- argus/backend/service/stats.py +147 -11
- argus/backend/service/testrun.py +44 -5
- argus/backend/service/views.py +258 -0
- argus/backend/template_filters.py +7 -0
- argus/backend/util/common.py +14 -2
- argus/client/driver_matrix_tests/cli.py +110 -0
- argus/client/driver_matrix_tests/client.py +56 -193
- argus_alm-0.12.4b1.dist-info/METADATA +129 -0
- {argus_alm-0.12.3.dist-info → argus_alm-0.12.4b1.dist-info}/RECORD +30 -27
- {argus_alm-0.12.3.dist-info → argus_alm-0.12.4b1.dist-info}/entry_points.txt +1 -0
- argus_alm-0.12.3.dist-info/METADATA +0 -207
- {argus_alm-0.12.3.dist-info → argus_alm-0.12.4b1.dist-info}/LICENSE +0 -0
- {argus_alm-0.12.3.dist-info → argus_alm-0.12.4b1.dist-info}/WHEEL +0 -0
|
@@ -1,216 +1,79 @@
|
|
|
1
|
-
from functools import reduce
|
|
2
|
-
from datetime import datetime
|
|
3
|
-
from typing import TypedDict, Literal
|
|
4
|
-
import re
|
|
5
|
-
import logging
|
|
6
1
|
from uuid import UUID
|
|
7
|
-
from pathlib import Path
|
|
8
|
-
from pprint import pformat
|
|
9
|
-
from glob import glob
|
|
10
|
-
from xml.etree import ElementTree
|
|
11
|
-
|
|
12
2
|
from argus.backend.util.enums import TestStatus
|
|
13
3
|
from argus.client.base import ArgusClient
|
|
14
|
-
from argus.backend.plugins.driver_matrix_tests.raw_types import RawMatrixTestResult, RawMatrixTestCase
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
LOGGER = logging.getLogger(__name__)
|
|
18
|
-
|
|
19
|
-
TestTypeType = Literal['java', 'cpp', 'python', 'gocql']
|
|
20
|
-
|
|
21
|
-
class AdaptedXUnitData(TypedDict):
|
|
22
|
-
timestamp: str
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def python_driver_matrix_adapter(xml: ElementTree.ElementTree) -> AdaptedXUnitData:
|
|
26
|
-
testsuites = list(xml.getroot().iter("testsuite"))
|
|
27
|
-
|
|
28
|
-
return {
|
|
29
|
-
"timestamp": testsuites[0].attrib.get("timestamp"),
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
def java_driver_matrix_adapter(xml: ElementTree.ElementTree) -> AdaptedXUnitData:
|
|
34
|
-
testsuites = xml.getroot()
|
|
35
|
-
ts_now = datetime.utcnow().timestamp()
|
|
36
|
-
try:
|
|
37
|
-
time_taken = float(testsuites.attrib.get("time"))
|
|
38
|
-
except ValueError:
|
|
39
|
-
time_taken = 0.0
|
|
40
|
-
|
|
41
|
-
timestamp = datetime.utcfromtimestamp(ts_now - time_taken).isoformat()
|
|
42
|
-
|
|
43
|
-
return {
|
|
44
|
-
"timestamp": timestamp,
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
def cpp_driver_matrix_adapter(xml: ElementTree.ElementTree) -> AdaptedXUnitData:
|
|
49
|
-
testsuites = xml.getroot()
|
|
50
|
-
|
|
51
|
-
return {
|
|
52
|
-
"timestamp": testsuites.attrib.get("timestamp"),
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
def gocql_driver_matrix_adapter(xml: ElementTree.ElementTree) -> AdaptedXUnitData:
|
|
57
|
-
testsuites = list(xml.getroot().iter("testsuite"))
|
|
58
|
-
|
|
59
|
-
return {
|
|
60
|
-
"timestamp": testsuites[0].attrib.get("timestamp"),
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
def generic_adapter(xml: ElementTree.ElementTree) -> AdaptedXUnitData:
|
|
65
|
-
return {
|
|
66
|
-
"timestamp": datetime.utcnow().isoformat()
|
|
67
|
-
}
|
|
68
4
|
|
|
69
5
|
|
|
70
6
|
class ArgusDriverMatrixClient(ArgusClient):
|
|
71
7
|
test_type = "driver-matrix-tests"
|
|
72
|
-
schema_version: None = "
|
|
8
|
+
schema_version: None = "v2"
|
|
73
9
|
|
|
74
|
-
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"gocql": gocql_driver_matrix_adapter,
|
|
79
|
-
}
|
|
10
|
+
class Routes(ArgusClient.Routes):
|
|
11
|
+
SUBMIT_DRIVER_RESULT = "/driver_matrix/result/submit"
|
|
12
|
+
SUBMIT_DRIVER_FAILURE = "/driver_matrix/result/fail"
|
|
13
|
+
SUBMIT_ENV = "/driver_matrix/env/submit"
|
|
80
14
|
|
|
81
15
|
def __init__(self, run_id: UUID, auth_token: str, base_url: str, api_version="v1") -> None:
|
|
82
16
|
super().__init__(auth_token, base_url, api_version)
|
|
83
17
|
self.run_id = run_id
|
|
84
18
|
|
|
85
|
-
def
|
|
86
|
-
with open(Path(env_path), mode="rt", encoding="utf-8") as env_file:
|
|
87
|
-
raw_env = env_file.read()
|
|
88
|
-
|
|
89
|
-
result = {}
|
|
90
|
-
for line in raw_env.split("\n"):
|
|
91
|
-
if not line:
|
|
92
|
-
continue
|
|
93
|
-
LOGGER.debug("ENV: %s", line)
|
|
94
|
-
key, val = line.split(": ")
|
|
95
|
-
result[key] = val.strip()
|
|
96
|
-
|
|
97
|
-
return result
|
|
98
|
-
|
|
99
|
-
def get_test_cases(self, cases: list[ElementTree.Element]) -> list[RawMatrixTestCase]:
|
|
100
|
-
raw_cases = []
|
|
101
|
-
for case in cases:
|
|
102
|
-
children = list(case.findall("./*"))
|
|
103
|
-
if len(children) > 0:
|
|
104
|
-
status = children[0].tag
|
|
105
|
-
message = f"{children[0].attrib.get('message', 'no-message')} ({children[0].attrib.get('type', 'no-type')})"
|
|
106
|
-
else:
|
|
107
|
-
status = "passed"
|
|
108
|
-
message = ""
|
|
109
|
-
|
|
110
|
-
raw_cases.append({
|
|
111
|
-
"name": case.attrib["name"],
|
|
112
|
-
"status": status,
|
|
113
|
-
"time": float(case.attrib.get("time", 0.0)),
|
|
114
|
-
"classname": case.attrib.get("classname", ""),
|
|
115
|
-
"message": message,
|
|
116
|
-
})
|
|
117
|
-
|
|
118
|
-
return raw_cases
|
|
119
|
-
|
|
120
|
-
def get_driver_info(self, xml_name: str, test_type: TestTypeType) -> dict[str, str]:
|
|
121
|
-
if test_type == "cpp":
|
|
122
|
-
filename_re = r"TEST-(?P<driver_name>[\w]*)-(?P<version>[\d\.]*)\.xml"
|
|
123
|
-
else:
|
|
124
|
-
filename_re = r"(?P<name>[\w]*)\.(?P<driver_name>[\w]*)\.(?P<proto>v\d)\.(?P<version>[\d\.]*)\.xml"
|
|
125
|
-
|
|
126
|
-
match = re.match(filename_re, xml_name)
|
|
127
|
-
|
|
128
|
-
return match.groupdict() if match else {}
|
|
129
|
-
|
|
130
|
-
def get_passed_count(self, suite_attribs: dict[str, str]) -> int:
|
|
131
|
-
if (pass_count := suite_attribs.get("passed")):
|
|
132
|
-
return int(pass_count)
|
|
133
|
-
total = int(suite_attribs.get("tests", 0))
|
|
134
|
-
errors = int(suite_attribs.get("errors", 0))
|
|
135
|
-
skipped = int(suite_attribs.get("skipped", 0))
|
|
136
|
-
failures = int(suite_attribs.get("failures", 0))
|
|
137
|
-
|
|
138
|
-
return total - errors - skipped - failures
|
|
139
|
-
|
|
140
|
-
def parse_result_xml(self, xml_path: Path, test_type: TestTypeType) -> RawMatrixTestResult:
|
|
141
|
-
with xml_path.open(mode="rt", encoding="utf-8") as xml_file:
|
|
142
|
-
xml = ElementTree.parse(source=xml_file)
|
|
143
|
-
LOGGER.info("%s", pformat(xml))
|
|
144
|
-
testsuites = xml.getroot()
|
|
145
|
-
adapted_data = self.TEST_ADAPTERS.get(test_type, generic_adapter)(xml)
|
|
146
|
-
|
|
147
|
-
driver_info = self.get_driver_info(xml_path.name, test_type)
|
|
148
|
-
test_collection = {
|
|
149
|
-
"timestamp": adapted_data["timestamp"],
|
|
150
|
-
"name": xml_path.stem,
|
|
151
|
-
"driver_name": driver_info.get("driver_name"),
|
|
152
|
-
"tests": 0,
|
|
153
|
-
"failures": 0,
|
|
154
|
-
"errors": 0,
|
|
155
|
-
"disabled": 0,
|
|
156
|
-
"skipped": 0,
|
|
157
|
-
"passed": 0,
|
|
158
|
-
"time": 0.0,
|
|
159
|
-
}
|
|
160
|
-
all_suites = []
|
|
161
|
-
for suite in testsuites.iter("testsuite"):
|
|
162
|
-
raw_suite = {
|
|
163
|
-
"name": suite.attrib["name"],
|
|
164
|
-
"tests": int(suite.attrib.get("tests", 0)),
|
|
165
|
-
"failures": int(suite.attrib.get("failures", 0)),
|
|
166
|
-
"disabled": int(0),
|
|
167
|
-
"passed": self.get_passed_count(suite.attrib),
|
|
168
|
-
"skipped": int(suite.attrib.get("skipped", 0)),
|
|
169
|
-
"errors": int(suite.attrib.get("errors", 0)),
|
|
170
|
-
"time": float(suite.attrib["time"]),
|
|
171
|
-
"cases": self.get_test_cases(list(suite.iter("testcase")))
|
|
172
|
-
}
|
|
173
|
-
all_suites.append(raw_suite)
|
|
174
|
-
test_collection["tests"] += raw_suite["tests"]
|
|
175
|
-
test_collection["failures"] += raw_suite["failures"]
|
|
176
|
-
test_collection["errors"] += raw_suite["errors"]
|
|
177
|
-
test_collection["disabled"] += raw_suite["disabled"]
|
|
178
|
-
test_collection["skipped"] += raw_suite["skipped"]
|
|
179
|
-
test_collection["passed"] += raw_suite["passed"]
|
|
180
|
-
test_collection["time"] += raw_suite["time"]
|
|
181
|
-
|
|
182
|
-
return {
|
|
183
|
-
**test_collection,
|
|
184
|
-
"suites": all_suites
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
def get_results(self, result_path: str, test_type: TestTypeType) -> list[RawMatrixTestResult]:
|
|
188
|
-
xmls = glob(f"{result_path}/**/*.xml", recursive=True)
|
|
189
|
-
LOGGER.info("Will use following XMLs: %s", pformat(xmls))
|
|
190
|
-
results = []
|
|
191
|
-
for xml in xmls:
|
|
192
|
-
result = self.parse_result_xml(Path(xml), test_type)
|
|
193
|
-
results.append(result)
|
|
194
|
-
return results
|
|
195
|
-
|
|
196
|
-
def submit(self, build_id: str, build_url: str, env_path: str, result_path: str, test_type: TestTypeType):
|
|
197
|
-
env = self.parse_build_environment(env_path)
|
|
198
|
-
results = self.get_results(result_path, test_type)
|
|
199
|
-
|
|
200
|
-
self.submit_driver_matrix_run(job_name=build_id, job_url=build_url, test_environment=env, results=results)
|
|
201
|
-
|
|
202
|
-
def submit_driver_matrix_run(self, job_name: str, job_url: str,
|
|
203
|
-
results: list[RawMatrixTestResult], test_environment: dict[str, str]) -> None:
|
|
19
|
+
def submit_driver_matrix_run(self, job_name: str, job_url: str) -> None:
|
|
204
20
|
response = super().submit_run(run_type=self.test_type, run_body={
|
|
205
21
|
"run_id": str(self.run_id),
|
|
206
22
|
"job_name": job_name,
|
|
207
|
-
"job_url": job_url
|
|
208
|
-
"test_environment": test_environment,
|
|
209
|
-
"matrix_results": results
|
|
23
|
+
"job_url": job_url
|
|
210
24
|
})
|
|
211
25
|
|
|
212
26
|
self.check_response(response)
|
|
213
27
|
|
|
28
|
+
def submit_driver_result(self, driver_name: str, driver_type: str, raw_junit_data: bytes):
|
|
29
|
+
"""
|
|
30
|
+
Submit results of a single driver run
|
|
31
|
+
"""
|
|
32
|
+
response = self.post(
|
|
33
|
+
endpoint=self.Routes.SUBMIT_DRIVER_RESULT,
|
|
34
|
+
location_params={},
|
|
35
|
+
body={
|
|
36
|
+
**self.generic_body,
|
|
37
|
+
"run_id": str(self.run_id),
|
|
38
|
+
"driver_name": driver_name,
|
|
39
|
+
"driver_type": driver_type,
|
|
40
|
+
"raw_xml": str(raw_junit_data, encoding="utf-8"),
|
|
41
|
+
}
|
|
42
|
+
)
|
|
43
|
+
self.check_response(response)
|
|
44
|
+
|
|
45
|
+
def submit_driver_failure(self, driver_name: str, driver_type: str, failure_reason: str):
|
|
46
|
+
"""
|
|
47
|
+
Submit a failure to run of a specific driver test
|
|
48
|
+
"""
|
|
49
|
+
response = self.post(
|
|
50
|
+
endpoint=self.Routes.SUBMIT_DRIVER_FAILURE,
|
|
51
|
+
location_params={},
|
|
52
|
+
body={
|
|
53
|
+
**self.generic_body,
|
|
54
|
+
"run_id": str(self.run_id),
|
|
55
|
+
"driver_name": driver_name,
|
|
56
|
+
"driver_type": driver_type,
|
|
57
|
+
"failure_reason": failure_reason,
|
|
58
|
+
}
|
|
59
|
+
)
|
|
60
|
+
self.check_response(response)
|
|
61
|
+
|
|
62
|
+
def submit_env(self, env_info: str):
|
|
63
|
+
"""
|
|
64
|
+
Submit env-info file (Build-00.txt)
|
|
65
|
+
"""
|
|
66
|
+
response = self.post(
|
|
67
|
+
endpoint=self.Routes.SUBMIT_ENV,
|
|
68
|
+
location_params={},
|
|
69
|
+
body={
|
|
70
|
+
**self.generic_body,
|
|
71
|
+
"run_id": str(self.run_id),
|
|
72
|
+
"raw_env": env_info,
|
|
73
|
+
}
|
|
74
|
+
)
|
|
75
|
+
self.check_response(response)
|
|
76
|
+
|
|
214
77
|
def set_matrix_status(self, status: TestStatus):
|
|
215
78
|
response = super().set_status(run_type=self.test_type, run_id=self.run_id, new_status=status)
|
|
216
79
|
self.check_response(response)
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: argus-alm
|
|
3
|
+
Version: 0.12.4b1
|
|
4
|
+
Summary: Argus
|
|
5
|
+
Home-page: https://github.com/scylladb/argus
|
|
6
|
+
License: Apache-2.0
|
|
7
|
+
Author: Alexey Kartashov
|
|
8
|
+
Author-email: alexey.kartashov@scylladb.com
|
|
9
|
+
Requires-Python: >=3.10,<4.0
|
|
10
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Requires-Dist: click (>=8.1.3,<9.0.0)
|
|
16
|
+
Requires-Dist: requests (>=2.26.0,<3.0.0)
|
|
17
|
+
Project-URL: Repository, https://github.com/scylladb/argus
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
|
|
20
|
+
# Argus
|
|
21
|
+
|
|
22
|
+
## Description
|
|
23
|
+
|
|
24
|
+
Argus is a test tracking system intended to provide observability into automated test pipelines which use long-running resources. It allows observation of a test status, its events and its allocated resources. It also allows easy comparison between particular runs of a specific test.
|
|
25
|
+
|
|
26
|
+
## Installation notes
|
|
27
|
+
|
|
28
|
+
### Development
|
|
29
|
+
|
|
30
|
+
For development setup instructions, see [dev-setup.md](./docs/dev-setup.md).
|
|
31
|
+
|
|
32
|
+
### Prerequisites
|
|
33
|
+
|
|
34
|
+
- Python >=3.10.0 (system-wide or pyenv)
|
|
35
|
+
|
|
36
|
+
- NodeJS >=16 (with npm)
|
|
37
|
+
|
|
38
|
+
- Yarn (can be installed globally with `npm -g install yarn`)
|
|
39
|
+
|
|
40
|
+
- nginx
|
|
41
|
+
|
|
42
|
+
- poetry >=1.2.0b1
|
|
43
|
+
|
|
44
|
+
### From source
|
|
45
|
+
|
|
46
|
+
#### Production
|
|
47
|
+
|
|
48
|
+
Perform the following steps:
|
|
49
|
+
|
|
50
|
+
Create a user that will be used by uwsgi:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
useradd -m -s /bin/bash argus
|
|
54
|
+
sudo -iu argus
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
(Optional) Install pyenv and create a virtualenv for this user:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
pyenv install 3.10.0
|
|
61
|
+
pyenv virtualenv argus
|
|
62
|
+
pyenv activate argus
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Clone the project into a directory somewhere where user has full write permissions
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
git clone https://github.com/scylladb/argus ~/app
|
|
69
|
+
cd ~/app
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Install project dependencies:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
poetry install --with default,dev,web-backend,docker-image
|
|
76
|
+
yarn install
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Compile frontend files from `/frontend` into `/public/dist`
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
yarn webpack
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Create a `argus.local.yaml` configuration file (used to configure database connection) and a `argus_web.yaml` (used for webapp secrets) in your application install directory.
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
cp argus_web.example.yaml argus_web.yaml
|
|
89
|
+
cp argus.yaml argus.local.yaml
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Open `argus.local.yaml` and add the database connection information (contact_points, user, password and keyspace name).
|
|
93
|
+
|
|
94
|
+
Open `argus_web.yaml` and change the `SECRET_KEY` value to something secure, like a sha512 digest of random bytes. Fill out GITHUB_* variables with their respective values.
|
|
95
|
+
|
|
96
|
+
Copy nginx configuration file from `docs/configs/argus.nginx.conf` to nginx virtual hosts directory:
|
|
97
|
+
|
|
98
|
+
Ubuntu:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
sudo cp docs/configs/argus.nginx.conf /etc/nginx/sites-available/argus
|
|
102
|
+
sudo ln -s /etc/nginx/sites-enabled/argus /etc/nginx/sites-available/argus
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
RHEL/Centos/Alma/Fedora:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
sudo cp docs/configs/argus.nginx.conf /etc/nginx/conf.d/argus.conf
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Adjust the webhost settings in that file as necessary, particularly `listen` and `server_name` directives.
|
|
112
|
+
|
|
113
|
+
Copy systemd service file from `docs/config/argus.service` to `/etc/systemd/system` directory:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
sudo cp docs/config/argus.service /etc/systemd/system
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Open it and adjust the path to the `start_argus.sh` script in the `ExecStart=` directive and the user/group, then reload systemd daemon configuration and enable (and optionally start) the service.
|
|
120
|
+
|
|
121
|
+
WARNING: `start_argus.sh` assumes pyenv is installed into `~/.pyenv`
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
sudo systemctl daemon-reload
|
|
125
|
+
sudo systemctl enable --now argus.service
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
@@ -4,37 +4,38 @@ argus/backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
4
4
|
argus/backend/cli.py,sha256=fWSS1m0mhQeCwfH58Qfs4Cicxc95IKi9vwmQn3SUYs0,1346
|
|
5
5
|
argus/backend/controller/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
6
|
argus/backend/controller/admin.py,sha256=2z29RX7ZQO_VTklSKH9RrEj-Ag2SsvyOaIzWDKr0ahQ,575
|
|
7
|
-
argus/backend/controller/admin_api.py,sha256=
|
|
8
|
-
argus/backend/controller/api.py,sha256=
|
|
7
|
+
argus/backend/controller/admin_api.py,sha256=I2eQbU5f5rlQeL7eI4t9mRoxM3SJ5O-6fqLsHf0wcEU,6975
|
|
8
|
+
argus/backend/controller/api.py,sha256=HvjpR4ug5NXiTdBlrFTBeq57YQ5Vl_jca-IT35sAuas,14203
|
|
9
9
|
argus/backend/controller/auth.py,sha256=nwF_5uZLxPOCLm2ljLyw2OxGur6fmPM7WAAoGJLI_kk,2030
|
|
10
10
|
argus/backend/controller/client_api.py,sha256=SM6HRlnoguxkPrqHzm42b5JsoQ2b8-1hTtfLWe832hc,3007
|
|
11
|
-
argus/backend/controller/main.py,sha256=
|
|
11
|
+
argus/backend/controller/main.py,sha256=gYA0pqUBlLhpedkOetUX0V82qfe489frOEHPEtM-iHQ,8992
|
|
12
12
|
argus/backend/controller/notification_api.py,sha256=wz7V4nE6Mxclpq78P8gNnCyeQ7xA9BBJjZ-dPhLLd2I,1964
|
|
13
13
|
argus/backend/controller/notifications.py,sha256=zMSJln72BGU6Q_nQvJesMnuvJ57Ucbov4M2ZI-37Bxo,290
|
|
14
14
|
argus/backend/controller/team.py,sha256=G6LdIBaYgfG0Qr4RhNQ53MZVdh4wcuotsIIpFwhTJ3w,3101
|
|
15
15
|
argus/backend/controller/team_ui.py,sha256=B7N1_Kzl6Rac8BV3FbKj55pGAS_dht47rYhAi94PC8A,589
|
|
16
|
-
argus/backend/controller/testrun_api.py,sha256=
|
|
16
|
+
argus/backend/controller/testrun_api.py,sha256=92VI_FngMxr9SpKMhlEdSzambvbL4dpMtfx26Z3_Eso,12264
|
|
17
|
+
argus/backend/controller/view_api.py,sha256=rI7LwcS7keK37nYx76D9StFV_rLHcNkHan8OhFgBrhM,4106
|
|
17
18
|
argus/backend/db.py,sha256=bBiraYD05Qex28yZHjSP1bRlcMsc6oTYGt792zXmaHo,4101
|
|
18
19
|
argus/backend/error_handlers.py,sha256=IEjz7Vzfldv1PTOeHrpRWmRsgBrHtAW0PXHUJZDovAE,480
|
|
19
20
|
argus/backend/events/event_processors.py,sha256=bsmBayiXvlGn3aqiT2z9WgwnVBRtn2cRqkgn4pLodck,1291
|
|
20
21
|
argus/backend/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
|
-
argus/backend/models/web.py,sha256=
|
|
22
|
+
argus/backend/models/web.py,sha256=nl9sCOaPT53UKcZwguQB1DVm523Scgw7d2Rs4xaC9x4,12943
|
|
22
23
|
argus/backend/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
|
-
argus/backend/plugins/core.py,sha256=
|
|
24
|
-
argus/backend/plugins/driver_matrix_tests/controller.py,sha256=
|
|
25
|
-
argus/backend/plugins/driver_matrix_tests/model.py,sha256=
|
|
24
|
+
argus/backend/plugins/core.py,sha256=kMp2zrEcgAZP0D4yw_dzY5uD8DcC19CoZ_E7urH0f0k,8608
|
|
25
|
+
argus/backend/plugins/driver_matrix_tests/controller.py,sha256=GdPpProzsVXQw8A4h2IS8inUPdr_Q4IN93i6ocOThS8,2213
|
|
26
|
+
argus/backend/plugins/driver_matrix_tests/model.py,sha256=Wqot8rOYqroYV7cn60ltlarnuIuYrL2qyrk13NwLeT4,15419
|
|
26
27
|
argus/backend/plugins/driver_matrix_tests/plugin.py,sha256=72ESU7s8C6ovVMfJTlYwtaokdvRp_HJF1_czm1UMhKg,745
|
|
27
|
-
argus/backend/plugins/driver_matrix_tests/raw_types.py,sha256=
|
|
28
|
-
argus/backend/plugins/driver_matrix_tests/service.py,sha256=
|
|
29
|
-
argus/backend/plugins/driver_matrix_tests/udt.py,sha256=
|
|
30
|
-
argus/backend/plugins/generic/model.py,sha256=
|
|
28
|
+
argus/backend/plugins/driver_matrix_tests/raw_types.py,sha256=KwbwsvS52RzOZb7_PT7kkYkChNzRH-MpKoO_eeZNDIk,1153
|
|
29
|
+
argus/backend/plugins/driver_matrix_tests/service.py,sha256=98m6IyPsbenq0O-EtGaW0tiQVuM2yGX41xNCO3icmnc,2524
|
|
30
|
+
argus/backend/plugins/driver_matrix_tests/udt.py,sha256=WRtnJU1dZcLXZJQgfU0mgjNzK_DyVhNgLTzr-aXX8K8,1394
|
|
31
|
+
argus/backend/plugins/generic/model.py,sha256=QLVO7QhGr38Hz0VO-BlDYF7LhRX7Pl049vw4W_VMT8o,3302
|
|
31
32
|
argus/backend/plugins/generic/plugin.py,sha256=5URbQVUCizrk-KZqb6I0P_8nLUekjYh-Js7ZLKVoBAA,407
|
|
32
33
|
argus/backend/plugins/generic/types.py,sha256=jlZUcQ7r153ziyl3ZJmix7AzL2G1aX9N_z-4Kw9trWc,267
|
|
33
34
|
argus/backend/plugins/loader.py,sha256=6PUrMjXKoCSDazMRkUHt8qxpniRhuqhY8Tof8lzeunk,1390
|
|
34
35
|
argus/backend/plugins/sct/controller.py,sha256=NF11JLoUJ13whghlxRrVex9rLMgFtlkczUAAKAM9vYg,5738
|
|
35
36
|
argus/backend/plugins/sct/plugin.py,sha256=_sOMcXLoFfeG9jwj_t48C4IFvY87juK8ApR6tfSw6q4,1007
|
|
36
37
|
argus/backend/plugins/sct/resource_setup.py,sha256=hwfAOu-oKOH42tjtzJhiqwq_MtUE9_HevoFyql8JKqY,10120
|
|
37
|
-
argus/backend/plugins/sct/service.py,sha256=
|
|
38
|
+
argus/backend/plugins/sct/service.py,sha256=ygAL85BkyyovJ1xHktlCQJdJS8CrerJZ_Tbr3EXqsg4,22021
|
|
38
39
|
argus/backend/plugins/sct/testrun.py,sha256=NopC3Gnzf2m65S_E4DedAlgnbFvyaMQH5aLJip6ZPrE,9660
|
|
39
40
|
argus/backend/plugins/sct/types.py,sha256=Gw1y4iqYguqNqTh_GopLDFho8vuGaOGuK7fjaHYhAOQ,1326
|
|
40
41
|
argus/backend/plugins/sct/udt.py,sha256=V_x8_yw8rV7Q_QRBYayqtTNsPdZvjzOxWpRhXP1XAzs,3119
|
|
@@ -42,19 +43,20 @@ argus/backend/plugins/sirenada/model.py,sha256=KVnI75BacuBryc5lR_Aai-mEOs7CB9xxh
|
|
|
42
43
|
argus/backend/plugins/sirenada/plugin.py,sha256=AlQAakwy3u-OqAqqK3RonUR5oDm-JoiwBUDUF3YEVP4,447
|
|
43
44
|
argus/backend/plugins/sirenada/types.py,sha256=Gm3XMK9YJoozVaeM9XE7n8iRxA6PKBrS23Mo2vJfdLs,697
|
|
44
45
|
argus/backend/service/admin.py,sha256=_VnWl3CkZBOAie_pPbd9sbXZUpBf2SApyNoFZLfB_QI,637
|
|
45
|
-
argus/backend/service/argus_service.py,sha256=
|
|
46
|
-
argus/backend/service/build_system_monitor.py,sha256=
|
|
46
|
+
argus/backend/service/argus_service.py,sha256=d1NrCQmcE_1NmkV761dheBL43Vk0n-oP0S4IZtQzJUQ,28832
|
|
47
|
+
argus/backend/service/build_system_monitor.py,sha256=E8Ro1HBMfktxqcCHLPuXwzohkdgrls7pYro-VSG_CMs,8248
|
|
47
48
|
argus/backend/service/client_service.py,sha256=CS5esppd9s-SgUYE-HVLkfz-MrN8zxPouf9e4VlPV_M,2326
|
|
48
49
|
argus/backend/service/event_service.py,sha256=iYeqxN2QCYTjYB1WPPv4BEFLXG0Oz3TvskkaK4v9pVY,654
|
|
49
|
-
argus/backend/service/jenkins_service.py,sha256=
|
|
50
|
+
argus/backend/service/jenkins_service.py,sha256=PKmu44kAEWl-Dw7f8gXkKhwRkV4yWy-B4CmFxv7c6-8,9685
|
|
50
51
|
argus/backend/service/notification_manager.py,sha256=h00Ej_-hH9H7pq0wah_1TH8dnpPyPNsgVJNO1rwJi7o,7011
|
|
51
|
-
argus/backend/service/release_manager.py,sha256=
|
|
52
|
-
argus/backend/service/stats.py,sha256
|
|
52
|
+
argus/backend/service/release_manager.py,sha256=d1J6llBb4aKgFPrsPTPYpV9NnGx772jeORZjs-ojYGE,7771
|
|
53
|
+
argus/backend/service/stats.py,sha256=-V94A8EUlQBvwG53oJTL4U1EzR4vciEF7Niu-efTL6Y,22713
|
|
53
54
|
argus/backend/service/team_manager_service.py,sha256=zY5dvy3ffvQbJuXBvlWKE5dS5LQ3ss6tkFE-cwFZsdw,3010
|
|
54
|
-
argus/backend/service/testrun.py,sha256=
|
|
55
|
+
argus/backend/service/testrun.py,sha256=ZM0D38IQpbrmia1GlCfLK02ZLwp_pbpUuQPN8BwibAw,21432
|
|
55
56
|
argus/backend/service/user.py,sha256=N3t43rgKMnSsPXU5R9bigEEGbPjYrc6MsJtof3z7kDE,9027
|
|
56
|
-
argus/backend/
|
|
57
|
-
argus/backend/
|
|
57
|
+
argus/backend/service/views.py,sha256=amkyOQgHSP3YEDqiFHAhOiNzNCLk2sLkruTB2_IagDQ,11244
|
|
58
|
+
argus/backend/template_filters.py,sha256=04PHl0DiN4PBHQ82HMAmTfww09fGMXcYy-I5BU_b1s4,682
|
|
59
|
+
argus/backend/util/common.py,sha256=vLMit9ZBBN8S4-dw32LIhjtaEOX_5hwWneHILS_SNBg,1723
|
|
58
60
|
argus/backend/util/config.py,sha256=Sm0LCRkabYaSUkXNPglyjMr45GCDBNXqJLkmB_s51f0,860
|
|
59
61
|
argus/backend/util/encoders.py,sha256=VxOnUanHP9FjcaobYupV-pZ3Udzrrrq7zZcbNpVXaKM,646
|
|
60
62
|
argus/backend/util/enums.py,sha256=EhTQrgedlEz5sDYJ1gFnE2eC2nc1neQCRgzOgssQvWY,749
|
|
@@ -63,7 +65,8 @@ argus/backend/util/module_loaders.py,sha256=AcIlX-VRmUQ2THFKT8DLefLSE62Eub2hCxIo
|
|
|
63
65
|
argus/backend/util/send_email.py,sha256=Bb2Hta7WlBCvDKga0_WPFWgxWJEfKpectOGypgf9xzo,3217
|
|
64
66
|
argus/client/__init__.py,sha256=bO9_j5_jK5kvTHR46KEZ0Y-p0li7CBW8QSd-K5Ez4vA,42
|
|
65
67
|
argus/client/base.py,sha256=-R-BINTolY06lUQLOLGlsWzza4fBdtLBW-4V3NT64vg,6755
|
|
66
|
-
argus/client/driver_matrix_tests/
|
|
68
|
+
argus/client/driver_matrix_tests/cli.py,sha256=YOhXL6yS2jBJoiSmVfwWKAosvrad7jIwTvC7XXtRj-8,6321
|
|
69
|
+
argus/client/driver_matrix_tests/client.py,sha256=UPryBku2rg6IV2wKKDkclXHnH3r6EYwWdds65wLC-KU,2748
|
|
67
70
|
argus/client/generic/cli.py,sha256=IJkgEZ5VOAeqp5SlLM13Y5m8e34Cqnyz8WkfeKoN7so,2208
|
|
68
71
|
argus/client/generic/client.py,sha256=l4PDjDy65Mm2OI9ZLSnyd8_2i4Ei1Pp9yRt3bRX8s2Y,1114
|
|
69
72
|
argus/client/sct/client.py,sha256=DtRA0Ra3ycUcedDYfZZW1jER0nc8vdYHaY6DT0te4x0,11341
|
|
@@ -77,8 +80,8 @@ argus/db/db_types.py,sha256=iLbmrUaDzrBw0kDCnvW0FSZ9-kNc3uQY-fsbIPymV4E,3612
|
|
|
77
80
|
argus/db/interface.py,sha256=HroyA1Yijz5cXLdYbxorHCEu0GH9VeMMqB36IHTlcew,17146
|
|
78
81
|
argus/db/testrun.py,sha256=0YG7FIH5FLQeNlYULxC6rhhyru2rziSMe3qKtYzTBnc,26014
|
|
79
82
|
argus/db/utils.py,sha256=YAWsuLjUScSgKgdaL5aF4Sgr13gqH29Mb5cLctX4V_w,337
|
|
80
|
-
argus_alm-0.12.
|
|
81
|
-
argus_alm-0.12.
|
|
82
|
-
argus_alm-0.12.
|
|
83
|
-
argus_alm-0.12.
|
|
84
|
-
argus_alm-0.12.
|
|
83
|
+
argus_alm-0.12.4b1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
84
|
+
argus_alm-0.12.4b1.dist-info/METADATA,sha256=8--mwnEtPjOCF5SIHNZLfk7YtoLKsyBJfoSq75nJo2I,3510
|
|
85
|
+
argus_alm-0.12.4b1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
86
|
+
argus_alm-0.12.4b1.dist-info/entry_points.txt,sha256=pcYW8nxZuDaymxE8tn86K0dq8eEodUdiS0sSvwEQ_zU,137
|
|
87
|
+
argus_alm-0.12.4b1.dist-info/RECORD,,
|