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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qontract-reconcile
3
- Version: 0.10.1rc535
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
@@ -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=Efl4PBOt78UgB-NL_j3_FXabtpQvkJhCEXaHwyspVcE,6006
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=lxQUJgpwfnzvGZTNpmLOeTSiXzzJta1aSezMF9HRTwg,7734
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=ryROiiQNtZvuG820CB-RQ9FMmLAGshezyMDNDiJNA_E,2369
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=to7lRzKTqN1cwEcnzDUKPWbIAzffI9jD870en0-zif8,17868
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.1rc535.dist-info/METADATA,sha256=mnMNUfrE1xFYJmiIcrSIdaiF0EYFAOaEH494u33aBcw,2349
671
- qontract_reconcile-0.10.1rc535.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
672
- qontract_reconcile-0.10.1rc535.dist-info/entry_points.txt,sha256=rTjAv28I_CHLM8ID3OPqMI_suoQ9s7tFbim4aYjn9kk,376
673
- qontract_reconcile-0.10.1rc535.dist-info/top_level.txt,sha256=l5ISPoXzt0SdR4jVdkfa7RPSKNc8zAHYWAnR-Dw8Ey8,24
674
- qontract_reconcile-0.10.1rc535.dist-info/RECORD,,
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
- MSG_MISSING_UNBATCHING = "Closing this MR because it failed MR check and isn't marked as un-batchable yet. cc @kfischer"
10
- MSG_OUTDATED_CONTENT = "Closing this MR because it has out-dated content."
11
- MSG_NEW_BATCH = "Closing this MR in favor of a new batch MR."
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: str
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=MSG_MISSING_UNBATCHING,
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=MSG_OUTDATED_CONTENT,
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=MSG_NEW_BATCH,
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="some 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=MSG_MISSING_UNBATCHING,
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=MSG_OUTDATED_CONTENT,
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=MSG_OUTDATED_CONTENT,
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=MSG_OUTDATED_CONTENT,
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=MSG_MISSING_UNBATCHING,
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=MSG_NEW_BATCH,
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=MSG_NEW_BATCH,
322
+ reason=Reason.NEW_BATCH,
325
323
  )
326
324
  ],
327
325
  additions=[