Skip to content

Commit

Permalink
Pull request update/240826
Browse files Browse the repository at this point in the history
c6f3a35 OS-7787. Regenerated live demo
06125f0 OS-7734. Update resource_owner_violation_alert email template
e8dd6a8 OS-7724. Update pool_exceed_report email template
8d8c597 OS-7783. Fixed getting disk metrics for nebius
  • Loading branch information
stanfra authored Aug 26, 2024
2 parents 24ee53e + c6f3a35 commit a3d2a99
Show file tree
Hide file tree
Showing 8 changed files with 933 additions and 1,196 deletions.
2 changes: 0 additions & 2 deletions docker_images/herald_executor/worker.py
Original file line number Diff line number Diff line change
Expand Up @@ -620,10 +620,8 @@ def execute_constraint_violated(self, object_id, organization_id, meta,
'template_params': {
'texts': {
'organization': self._get_organization_params(organization),
'user': user,
'total_violated': len(hit_list),
'violated_resources': hit_list,
'title': 'Resource Constraint Violation Alert',
}
}
}
Expand Down
1,071 changes: 476 additions & 595 deletions herald/modules/email_generator/templates/pool_exceed_report.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

46 changes: 14 additions & 32 deletions herald/send_templates.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,12 +158,10 @@
},
'pool_exceed_report': {
'email': ['[email protected]'],
'subject': 'Action Required: Hystax OptScale Pool Exceed Alert',
'subject': 'Action Required: Hystax OptScale Pool Limit Exceed Alert',
'template_type': 'pool_exceed_report',
'template_params': {
'texts': {
'title': 'Pool Exceed Alert',
'total_cost': 293.5,
'total_forecast': 293.5,
'exceeded': [
{
Expand All @@ -172,29 +170,24 @@
'limit': 50,
'pool_name': 'AQA_1617018508.3637385. It is very very very very very very very very very '
'very very very very very very very long name',
'total_expenses': 293.5},
'total_expenses': 293.5
},
{
'forecast': 293.5,
'id': '9e07786f-c476-484e-adc5-43d76815bd1d',
'limit': 100,
'pool_name': 'AQA_CA_1617018508.3637757_find_report',
'total_expenses': 293.5}],
'total_expenses': 293.5
}
],
'organization': {
'id': '6946211f-47ff-43a3-a9a3-3e5f57d52415',
'name': 'AQA_1617018508.3637385',
'currency_code': '$'
},
'user': {
'assignment_id': 'f3b2a722-9674-4042-a08a-81f41b926647',
'assignment_resource_id': '943cb6e0-2cbe-4974-a937-2c480aa9934f',
'assignment_type_id': 2,
'role_id': 3,
'role_name': 'Manager',
'role_purpose': 'optscale_manager',
'role_scope_id': None,
'user_display_name': 'james31',
'user_email': '[email protected]',
'user_id': '4a50413a-9703-4586-ab39-96aa289e979e'}}}},
}
}
}
},
'pool_exceed_resources_report': {
'email': ['[email protected]'],
'subject': 'Action Required: Hystax OptScale Pool Exceed Alert',
Expand Down Expand Up @@ -721,25 +714,12 @@
"subject": "Action required: Hystax OptScale Resource Constraint Violation Alert",
"template_params": {
"texts": {
"title": "Resource Constraint Violation Alert",
"total_violated": 2,
"organization": {
"id": "2254d0c7-d341-45cd-a2b4-200f8df8112a",
"name": "Renaissance science",
"currency_code": "$"
},
"user": {
"assignment_id": "355ab271-aacc-440d-975c-b14586fc0965",
"assignment_resource_id": "b3299698-7d47-4a67-980a-55369841b228",
"assignment_type_id": 2,
"role_id": 3,
"role_name": "Manager",
"role_purpose": "optscale_manager",
"role_scope_id": "None",
"user_display_name": "I0Gun",
"user_email": "[email protected]",
"user_id": "02398e36-4b53-40d3-9781-62d83609386b"
},
"violated_resources": [
{
"cloud_resource_id": "hystax-eu-fra",
Expand All @@ -750,7 +730,8 @@
"pool_name": "IK_ORG",
"resource_name": "hystax-eu-fra. It is very very very very very very very very very very very "
"very very very very very long name",
"type": "ttl"
"type": "ttl",
"resource_id": "e2b0412d-d3d3-425e-bd1e-e27ac881d58e",
},
{
"cloud_resource_id": "hystax-eu-fra",
Expand All @@ -760,7 +741,8 @@
"pool_id": "3f575a6a-237d-4f4d-a4b4-1f8005451432",
"pool_name": "IK_ORG",
"resource_name": "hystax-eu-fra",
"type": "expense_limit"
"type": "expense_limit",
"resource_id": "2b2dd58e-366d-4138-ad72-756aec545eca",
}
]
}
Expand Down
2 changes: 0 additions & 2 deletions katara/katara_worker/reports_generators/pool_limit_exceed.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,7 @@ def generate(self):
'currency_code': self.get_currency_code(
organization['currency'])
},
'user': self.report_data,
'exceeded': exceeded,
'title': 'Pool Limit Exceed Alert',
'total_cost': round(organization_total_cost, 2),
'total_forecast': round(organization_forecast, 2)
}
Expand Down
33 changes: 18 additions & 15 deletions metroculus/metroculus_worker/processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -640,33 +640,36 @@ def get_nebius_metrics(self, cloud_account_id, cloud_resource_ids,
metrics = defaultdict(lambda: defaultdict(dict))
resource_metrics_map = {
'Instance': {
'cpu': 'cpu_usage',
'disk_read_io': 'disk_read_ops',
'disk_write_io': 'disk_write_ops',
'network_in_io': 'network_received_bytes',
'network_out_io': 'network_sent_bytes'},
'cpu': ('cpu_usage', 'resource_id'),
'disk_read_io': ('disk.read_ops', 'instance'),
'disk_write_io': ('disk.write_ops', 'instance'),
'network_in_io': ('network_received_bytes', 'resource_id'),
'network_out_io': ('network_sent_bytes', 'resource_id')},
'RDS Instance': {
'cpu': 'load.avg_15min',
'disk_read_io': 'io.read_count',
'disk_write_io': 'io.write_count',
'network_in_io': 'net.bytes_recv',
'network_out_io': 'net.bytes_sent',
'ram': 'mem.used_bytes',
'ram_size': 'mem.total_bytes'
'cpu': ('load.avg_15min', 'resource_id'),
'disk_read_io': ('io.read_count', 'resource_id'),
'disk_write_io': ('io.write_count', 'resource_id'),
'network_in_io': ('net.bytes_recv', 'resource_id'),
'network_out_io': ('net.bytes_sent', 'resource_id'),
'ram': ('mem.used_bytes', 'resource_id'),
'ram_size': ('mem.total_bytes', 'resource_id'),
}
}
metric_names_map = resource_metrics_map.get(r_type)
folders = adapter.folders
for metric_name, cloud_metric_name in metric_names_map.items():
for metric_name, cloud_metric_data in metric_names_map.items():
cloud_metric_name, filter_by = cloud_metric_data
for folder in folders:
try:
response = adapter.get_metric(
cloud_metric_name, cloud_resource_ids, start_date,
end_date, METRIC_INTERVAL, folder)
end_date, METRIC_INTERVAL, folder, filter_by)
for resp_metrics in response['metrics']:
timestamps = resp_metrics['timeseries']['timestamps']
values = resp_metrics['timeseries']['doubleValues']
cloud_resource_id = resp_metrics['labels']['resource_id']
cloud_resource_id = resp_metrics['labels'].get(
'resource_id') or resp_metrics['labels'].get(
'instance')
if r_type == 'RDS Instance':
cloud_resource_id = resp_metrics['labels']['host']
if cloud_resource_id not in resource_ids_map:
Expand Down
Binary file modified rest_api/live_demo.tar.xz
Binary file not shown.
7 changes: 5 additions & 2 deletions tools/cloud_adapter/clouds/nebius.py
Original file line number Diff line number Diff line change
Expand Up @@ -891,7 +891,7 @@ def get_service_account_metrics(self, service_accounts_ids, start_date,
downsampling)

def get_metric(self, metric_name, instance_ids, start_date, end_date,
interval=0, folder_id=None):
interval=0, folder_id=None, filter_by=None):
"""
Get metric for instances
Expand All @@ -901,10 +901,13 @@ def get_metric(self, metric_name, instance_ids, start_date, end_date,
:param end_date: metric end datetime date
:param interval: time interval in seconds
:param folder_id: id of folder
:param filter_by: name of a field to filter by
:return: dict
"""
resource_ids_str = '|'.join(instance_ids)
query = "%s{resource_id=\"%s\"}" % (metric_name, resource_ids_str)
if not filter_by:
filter_by = 'resource_id'
query = "%s{%s=\"%s\"}" % (metric_name, filter_by, resource_ids_str)
downsampling = {
"gridInterval": str(interval * MSEC_IN_SEC),
"gapFilling": "NONE"
Expand Down

0 comments on commit a3d2a99

Please sign in to comment.