qontract-reconcile 0.10.1rc535__py3-none-any.whl → 0.10.1rc536__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.
- {qontract_reconcile-0.10.1rc535.dist-info → qontract_reconcile-0.10.1rc536.dist-info}/METADATA +1 -1
- {qontract_reconcile-0.10.1rc535.dist-info → qontract_reconcile-0.10.1rc536.dist-info}/RECORD +10 -9
- reconcile/saas_auto_promotions_manager/merge_request_manager/merge_request_manager_v2.py +24 -1
- reconcile/saas_auto_promotions_manager/merge_request_manager/metrics.py +40 -0
- reconcile/saas_auto_promotions_manager/merge_request_manager/reconciler.py +10 -7
- reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/test_merge_request_manager.py +3 -2
- reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/test_reconciler.py +8 -10
- {qontract_reconcile-0.10.1rc535.dist-info → qontract_reconcile-0.10.1rc536.dist-info}/WHEEL +0 -0
- {qontract_reconcile-0.10.1rc535.dist-info → qontract_reconcile-0.10.1rc536.dist-info}/entry_points.txt +0 -0
- {qontract_reconcile-0.10.1rc535.dist-info → qontract_reconcile-0.10.1rc536.dist-info}/top_level.txt +0 -0
{qontract_reconcile-0.10.1rc535.dist-info → qontract_reconcile-0.10.1rc536.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: qontract-reconcile
|
3
|
-
Version: 0.10.
|
3
|
+
Version: 0.10.1rc536
|
4
4
|
Summary: Collection of tools to reconcile services with their desired state as defined in the app-interface DB.
|
5
5
|
Home-page: https://github.com/app-sre/qontract-reconcile
|
6
6
|
Author: Red Hat App-SRE Team
|
{qontract_reconcile-0.10.1rc535.dist-info → qontract_reconcile-0.10.1rc536.dist-info}/RECORD
RENAMED
@@ -350,9 +350,10 @@ reconcile/saas_auto_promotions_manager/publisher.py,sha256=4_M9Oykhj-kEZPUn05E2D
|
|
350
350
|
reconcile/saas_auto_promotions_manager/subscriber.py,sha256=cLhPlkT71J2LIice3SLmH1WpsqzV46gd0peMxrnqyRw,7452
|
351
351
|
reconcile/saas_auto_promotions_manager/merge_request_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
352
352
|
reconcile/saas_auto_promotions_manager/merge_request_manager/merge_request.py,sha256=BeAJWLow7b4HQyZ9zz398sQkPeIz8chpMkCts2NU27c,1282
|
353
|
-
reconcile/saas_auto_promotions_manager/merge_request_manager/merge_request_manager_v2.py,sha256=
|
353
|
+
reconcile/saas_auto_promotions_manager/merge_request_manager/merge_request_manager_v2.py,sha256=mU6csC1-2WjEHhYNCeEDDmN63QQIprp0zkqQ5UH5xNM,6817
|
354
|
+
reconcile/saas_auto_promotions_manager/merge_request_manager/metrics.py,sha256=mI9yYwCiNePmtox16yKH1mU5ijsMeQYjQBgRiZq101A,878
|
354
355
|
reconcile/saas_auto_promotions_manager/merge_request_manager/mr_parser.py,sha256=x8Gg-YjEFWEeDPJH3Y8SrfcJbwhLuAqCz4kIhfEyaaA,7060
|
355
|
-
reconcile/saas_auto_promotions_manager/merge_request_manager/reconciler.py,sha256=
|
356
|
+
reconcile/saas_auto_promotions_manager/merge_request_manager/reconciler.py,sha256=nst5ZynEQs9Hy9Z2DAjN8_ALIS_5XnrbJh7KG4YVRrE,7789
|
356
357
|
reconcile/saas_auto_promotions_manager/merge_request_manager/renderer.py,sha256=huslpgeXNf_VmEVmWHIYYSwEcT67zsbuubYMk2P9ezc,6959
|
357
358
|
reconcile/saas_auto_promotions_manager/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
358
359
|
reconcile/saas_auto_promotions_manager/utils/saas_files_inventory.py,sha256=mihuWynroB1Cea1Lsvf6V8Nb8PGiBdcLC0uhCX_52Y0,6966
|
@@ -458,9 +459,9 @@ reconcile/test/saas_auto_promotions_manager/merge_request_manager/__init__.py,sh
|
|
458
459
|
reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
459
460
|
reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/conftest.py,sha256=7O3lbk1EmEtUofqGncfiwMYvDPXrkQNPB59zlQ_zXkM,4588
|
460
461
|
reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/data_keys.py,sha256=Z1IV51OUuzhd-3S8W-k7ixC-fkaglCokn0eakK0Z73s,606
|
461
|
-
reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/test_merge_request_manager.py,sha256=
|
462
|
+
reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/test_merge_request_manager.py,sha256=h8lnorFPZIxTtbaaXGLoiEsBbB4Qj-Mg9BKV62ZqEBQ,2389
|
462
463
|
reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/test_mr_parser.py,sha256=dcGHzxuafKSxmswSO1qF2WlKaqsmEvtERC6Lb8kDAN0,10019
|
463
|
-
reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/test_reconciler.py,sha256=
|
464
|
+
reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/test_reconciler.py,sha256=_bzfJzjFJgubu--7wyXIiusUrdbmLtFbHmkbat4SX_M,17828
|
464
465
|
reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
465
466
|
reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/conftest.py,sha256=2rCSstewp4LPoEJHm5N7dGJexEtY8ndLHvoGZYjmpsc,1678
|
466
467
|
reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/data_keys.py,sha256=beHYQ9kgDLeBZgC2FvxQA3tHx1PO-RAMN8_kVcSdikI,90
|
@@ -667,8 +668,8 @@ tools/test/test_app_interface_metrics_exporter.py,sha256=SX7qL3D1SIRKFo95FoQztvf
|
|
667
668
|
tools/test/test_qontract_cli.py,sha256=d18KrdhtUGqoC7_kWZU128U0-VJEj-0rjFkLVufcI6I,2755
|
668
669
|
tools/test/test_sd_app_sre_alert_report.py,sha256=v363r9zM7__0kR5K6mvJoGFcM9BvE33fWAayrqkpojA,2116
|
669
670
|
tools/test/test_sre_checkpoints.py,sha256=SKqPPTl9ua0RFdSSofnoQX-JZE6dFLO3LRhfQzqtfh8,2607
|
670
|
-
qontract_reconcile-0.10.
|
671
|
-
qontract_reconcile-0.10.
|
672
|
-
qontract_reconcile-0.10.
|
673
|
-
qontract_reconcile-0.10.
|
674
|
-
qontract_reconcile-0.10.
|
671
|
+
qontract_reconcile-0.10.1rc536.dist-info/METADATA,sha256=BZPcvTsEmz0tR4NJmj-JZM7l_J2qAMSglos5FuteOCo,2349
|
672
|
+
qontract_reconcile-0.10.1rc536.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
673
|
+
qontract_reconcile-0.10.1rc536.dist-info/entry_points.txt,sha256=rTjAv28I_CHLM8ID3OPqMI_suoQ9s7tFbim4aYjn9kk,376
|
674
|
+
qontract_reconcile-0.10.1rc536.dist-info/top_level.txt,sha256=l5ISPoXzt0SdR4jVdkfa7RPSKNc8zAHYWAnR-Dw8Ey8,24
|
675
|
+
qontract_reconcile-0.10.1rc536.dist-info/RECORD,,
|
@@ -7,6 +7,15 @@ from gitlab.exceptions import GitlabGetError
|
|
7
7
|
from reconcile.saas_auto_promotions_manager.merge_request_manager.merge_request import (
|
8
8
|
SAPMMR,
|
9
9
|
)
|
10
|
+
from reconcile.saas_auto_promotions_manager.merge_request_manager.metrics import (
|
11
|
+
SAPMClosedMRsCounter as MRClosedCounter,
|
12
|
+
)
|
13
|
+
from reconcile.saas_auto_promotions_manager.merge_request_manager.metrics import (
|
14
|
+
SAPMOpenedMRsCounter as MROpenedCounter,
|
15
|
+
)
|
16
|
+
from reconcile.saas_auto_promotions_manager.merge_request_manager.metrics import (
|
17
|
+
SAPMParallelOpenMRsGauge as ParallelOpenMRGauge,
|
18
|
+
)
|
10
19
|
from reconcile.saas_auto_promotions_manager.merge_request_manager.mr_parser import (
|
11
20
|
MRParser,
|
12
21
|
)
|
@@ -19,6 +28,7 @@ from reconcile.saas_auto_promotions_manager.merge_request_manager.renderer impor
|
|
19
28
|
Renderer,
|
20
29
|
)
|
21
30
|
from reconcile.saas_auto_promotions_manager.subscriber import Subscriber
|
31
|
+
from reconcile.utils import metrics
|
22
32
|
from reconcile.utils.mr.labels import AUTO_MERGE
|
23
33
|
from reconcile.utils.vcs import VCS
|
24
34
|
|
@@ -138,19 +148,32 @@ class MergeRequestManagerV2:
|
|
138
148
|
|
139
149
|
def reconcile(self, subscribers: Iterable[Subscriber]) -> None:
|
140
150
|
current_state = self._mr_parser.retrieve_open_mrs(label=SAPM_LABEL)
|
151
|
+
metrics.set_gauge(ParallelOpenMRGauge(), len(current_state))
|
152
|
+
|
141
153
|
desired_state = self._aggregate_desired_state(subscribers=subscribers)
|
154
|
+
|
142
155
|
diff = self._reconciler.reconcile(
|
143
156
|
batch_limit=BATCH_SIZE_LIMIT,
|
144
157
|
desired_promotions=desired_state,
|
145
158
|
open_mrs=current_state,
|
146
159
|
)
|
147
160
|
for deletion in diff.deletions:
|
161
|
+
metrics.inc_counter(
|
162
|
+
MRClosedCounter(
|
163
|
+
reason=deletion.reason.name,
|
164
|
+
),
|
165
|
+
)
|
148
166
|
self._vcs.close_app_interface_mr(
|
149
167
|
mr=deletion.mr.raw,
|
150
|
-
comment=deletion.reason,
|
168
|
+
comment=deletion.reason.value,
|
151
169
|
)
|
152
170
|
|
153
171
|
for addition in diff.additions:
|
172
|
+
metrics.inc_counter(
|
173
|
+
MROpenedCounter(
|
174
|
+
is_batchable=addition.batchable,
|
175
|
+
),
|
176
|
+
)
|
154
177
|
self._render_mr(addition=addition)
|
155
178
|
|
156
179
|
for rendered_mr in self._sapm_mrs:
|
@@ -0,0 +1,40 @@
|
|
1
|
+
from pydantic import BaseModel
|
2
|
+
|
3
|
+
from reconcile.utils.metrics import (
|
4
|
+
CounterMetric,
|
5
|
+
GaugeMetric,
|
6
|
+
)
|
7
|
+
|
8
|
+
|
9
|
+
class SAPMBaseMetric(BaseModel):
|
10
|
+
"Base class for SAPM MR metrics"
|
11
|
+
|
12
|
+
integration: str = "saas_auto_promotions_manager"
|
13
|
+
|
14
|
+
|
15
|
+
class SAPMOpenedMRsCounter(SAPMBaseMetric, CounterMetric):
|
16
|
+
"Counter for the number of opened auto-promotion MRs"
|
17
|
+
|
18
|
+
is_batchable: bool
|
19
|
+
|
20
|
+
@classmethod
|
21
|
+
def name(cls) -> str:
|
22
|
+
return "sapm_opened_mrs"
|
23
|
+
|
24
|
+
|
25
|
+
class SAPMClosedMRsCounter(SAPMBaseMetric, CounterMetric):
|
26
|
+
"Counter for the number of closed auto-promotion MRs"
|
27
|
+
|
28
|
+
reason: str
|
29
|
+
|
30
|
+
@classmethod
|
31
|
+
def name(cls) -> str:
|
32
|
+
return "sapm_closed_mrs"
|
33
|
+
|
34
|
+
|
35
|
+
class SAPMParallelOpenMRsGauge(SAPMBaseMetric, GaugeMetric):
|
36
|
+
"Gauge for the number of parallel open auto-promotion MRs"
|
37
|
+
|
38
|
+
@classmethod
|
39
|
+
def name(cls) -> str:
|
40
|
+
return "sapm_parallel_open_mrs"
|
@@ -1,14 +1,17 @@
|
|
1
1
|
from collections.abc import Iterable
|
2
2
|
from dataclasses import dataclass
|
3
|
+
from enum import Enum
|
3
4
|
from typing import Optional
|
4
5
|
|
5
6
|
from reconcile.saas_auto_promotions_manager.merge_request_manager.mr_parser import (
|
6
7
|
OpenMergeRequest,
|
7
8
|
)
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
|
11
|
+
class Reason(Enum):
|
12
|
+
MISSING_UNBATCHING = "Closing this MR because it failed MR check and isn't marked as un-batchable yet. cc @kfischer"
|
13
|
+
OUTDATED_CONTENT = "Closing this MR because it has out-dated content."
|
14
|
+
NEW_BATCH = "Closing this MR in favor of a new batch MR."
|
12
15
|
|
13
16
|
|
14
17
|
@dataclass
|
@@ -20,7 +23,7 @@ class Promotion:
|
|
20
23
|
@dataclass
|
21
24
|
class Deletion:
|
22
25
|
mr: OpenMergeRequest
|
23
|
-
reason:
|
26
|
+
reason: Reason
|
24
27
|
|
25
28
|
|
26
29
|
@dataclass
|
@@ -70,7 +73,7 @@ class Reconciler:
|
|
70
73
|
diff.deletions.append(
|
71
74
|
Deletion(
|
72
75
|
mr=mr,
|
73
|
-
reason=
|
76
|
+
reason=Reason.MISSING_UNBATCHING,
|
74
77
|
)
|
75
78
|
)
|
76
79
|
else:
|
@@ -112,7 +115,7 @@ class Reconciler:
|
|
112
115
|
diff.deletions.append(
|
113
116
|
Deletion(
|
114
117
|
mr=mr,
|
115
|
-
reason=
|
118
|
+
reason=Reason.OUTDATED_CONTENT,
|
116
119
|
)
|
117
120
|
)
|
118
121
|
self._open_mrs = open_mrs_after_deletion
|
@@ -163,7 +166,7 @@ class Reconciler:
|
|
163
166
|
diff.deletions.append(
|
164
167
|
Deletion(
|
165
168
|
mr=batch_with_capacity,
|
166
|
-
reason=
|
169
|
+
reason=Reason.NEW_BATCH,
|
167
170
|
)
|
168
171
|
)
|
169
172
|
|
@@ -14,6 +14,7 @@ from reconcile.saas_auto_promotions_manager.merge_request_manager.reconciler imp
|
|
14
14
|
Addition,
|
15
15
|
Deletion,
|
16
16
|
Diff,
|
17
|
+
Reason,
|
17
18
|
Reconciler,
|
18
19
|
)
|
19
20
|
from reconcile.saas_auto_promotions_manager.merge_request_manager.renderer import (
|
@@ -48,7 +49,7 @@ def test_reconcile(
|
|
48
49
|
failed_mr_check=False,
|
49
50
|
is_batchable=True,
|
50
51
|
),
|
51
|
-
reason=
|
52
|
+
reason=Reason.NEW_BATCH,
|
52
53
|
)
|
53
54
|
|
54
55
|
additions = [
|
@@ -76,7 +77,7 @@ def test_reconcile(
|
|
76
77
|
|
77
78
|
assert len(manager._sapm_mrs) == len(additions)
|
78
79
|
vcs.close_app_interface_mr.assert_has_calls([
|
79
|
-
call(deletion.mr.raw, deletion.reason),
|
80
|
+
call(deletion.mr.raw, deletion.reason.value),
|
80
81
|
])
|
81
82
|
vcs.open_app_interface_merge_request.assert_has_calls([
|
82
83
|
call(mr) for mr in manager._sapm_mrs
|
@@ -8,13 +8,11 @@ from reconcile.saas_auto_promotions_manager.merge_request_manager.mr_parser impo
|
|
8
8
|
OpenMergeRequest,
|
9
9
|
)
|
10
10
|
from reconcile.saas_auto_promotions_manager.merge_request_manager.reconciler import (
|
11
|
-
MSG_MISSING_UNBATCHING,
|
12
|
-
MSG_NEW_BATCH,
|
13
|
-
MSG_OUTDATED_CONTENT,
|
14
11
|
Addition,
|
15
12
|
Deletion,
|
16
13
|
Diff,
|
17
14
|
Promotion,
|
15
|
+
Reason,
|
18
16
|
Reconciler,
|
19
17
|
)
|
20
18
|
|
@@ -110,7 +108,7 @@ def _aggregate_channels(items: Sequence[Addition | Deletion]) -> set[str]:
|
|
110
108
|
failed_mr_check=True,
|
111
109
|
is_batchable=True,
|
112
110
|
),
|
113
|
-
reason=
|
111
|
+
reason=Reason.MISSING_UNBATCHING,
|
114
112
|
),
|
115
113
|
Deletion(
|
116
114
|
mr=OpenMergeRequest(
|
@@ -120,7 +118,7 @@ def _aggregate_channels(items: Sequence[Addition | Deletion]) -> set[str]:
|
|
120
118
|
failed_mr_check=False,
|
121
119
|
is_batchable=True,
|
122
120
|
),
|
123
|
-
reason=
|
121
|
+
reason=Reason.OUTDATED_CONTENT,
|
124
122
|
),
|
125
123
|
Deletion(
|
126
124
|
mr=OpenMergeRequest(
|
@@ -130,7 +128,7 @@ def _aggregate_channels(items: Sequence[Addition | Deletion]) -> set[str]:
|
|
130
128
|
failed_mr_check=False,
|
131
129
|
is_batchable=False,
|
132
130
|
),
|
133
|
-
reason=
|
131
|
+
reason=Reason.OUTDATED_CONTENT,
|
134
132
|
),
|
135
133
|
Deletion(
|
136
134
|
mr=OpenMergeRequest(
|
@@ -140,7 +138,7 @@ def _aggregate_channels(items: Sequence[Addition | Deletion]) -> set[str]:
|
|
140
138
|
failed_mr_check=True,
|
141
139
|
is_batchable=False,
|
142
140
|
),
|
143
|
-
reason=
|
141
|
+
reason=Reason.OUTDATED_CONTENT,
|
144
142
|
),
|
145
143
|
],
|
146
144
|
additions=[],
|
@@ -181,7 +179,7 @@ def _aggregate_channels(items: Sequence[Addition | Deletion]) -> set[str]:
|
|
181
179
|
failed_mr_check=True,
|
182
180
|
is_batchable=True,
|
183
181
|
),
|
184
|
-
reason=
|
182
|
+
reason=Reason.MISSING_UNBATCHING,
|
185
183
|
)
|
186
184
|
],
|
187
185
|
additions=[
|
@@ -263,7 +261,7 @@ def _aggregate_channels(items: Sequence[Addition | Deletion]) -> set[str]:
|
|
263
261
|
failed_mr_check=False,
|
264
262
|
is_batchable=True,
|
265
263
|
),
|
266
|
-
reason=
|
264
|
+
reason=Reason.NEW_BATCH,
|
267
265
|
)
|
268
266
|
],
|
269
267
|
additions=[
|
@@ -321,7 +319,7 @@ def _aggregate_channels(items: Sequence[Addition | Deletion]) -> set[str]:
|
|
321
319
|
failed_mr_check=False,
|
322
320
|
is_batchable=True,
|
323
321
|
),
|
324
|
-
reason=
|
322
|
+
reason=Reason.NEW_BATCH,
|
325
323
|
)
|
326
324
|
],
|
327
325
|
additions=[
|
File without changes
|
File without changes
|
{qontract_reconcile-0.10.1rc535.dist-info → qontract_reconcile-0.10.1rc536.dist-info}/top_level.txt
RENAMED
File without changes
|