Skip to content

Commit

Permalink
fix(api): update secret k8s and prometheus basic connectivity test (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
talboren authored Apr 18, 2024
1 parent a3d7630 commit 3cfbf0a
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 9 deletions.
27 changes: 22 additions & 5 deletions keep/providers/prometheus_provider/prometheus_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
from keep.api.models.alert import AlertDto, AlertSeverity, AlertStatus
from keep.contextmanager.contextmanager import ContextManager
from keep.providers.base.base_provider import BaseProvider
from keep.providers.models.provider_config import ProviderConfig
from keep.providers.models.provider_config import ProviderConfig, ProviderScope


@pydantic.dataclasses.dataclass
Expand Down Expand Up @@ -77,6 +77,12 @@ class PrometheusProvider(BaseProvider):
"resolved": AlertStatus.RESOLVED,
}

PROVIDER_SCOPES = [
ProviderScope(
name="connectivity", description="Connectivity Test", mandatory=True
)
]

def __init__(
self, context_manager: ContextManager, provider_id: str, config: ProviderConfig
):
Expand All @@ -90,6 +96,14 @@ def validate_config(self):
**self.config.authentication
)

def validate_scopes(self) -> dict[str, bool | str]:
validated_scopes = {"connectivity": True}
try:
self._get_alerts()
except Exception as e:
validated_scopes["connectivity"] = str(e)
return validated_scopes

def _query(self, query):
"""
Executes a query against the Prometheus server.
Expand All @@ -109,10 +123,12 @@ def _query(self, query):
response = requests.get(
f"{self.authentication_config.url}/api/v1/query",
params={"query": query},
auth=auth
if self.authentication_config.username
and self.authentication_config.password
else None,
auth=(
auth
if self.authentication_config.username
and self.authentication_config.password
else None
),
)

if response.status_code != 200:
Expand All @@ -130,6 +146,7 @@ def _get_alerts(self) -> list[AlertDto]:
f"{self.authentication_config.url}/api/v1/alerts",
auth=auth,
)
response.raise_for_status()
if not response.ok:
return []
alerts_data = response.json().get("data", {})
Expand Down
24 changes: 20 additions & 4 deletions keep/secretmanager/kubernetessecretmanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,17 +35,33 @@ def write_secret(self, secret_name: str, secret_value: str) -> None:
secret_name = secret_name.replace("_", "-")
self.logger.info("Writing secret", extra={"secret_name": secret_name})

body = kubernetes.client.V1Secret(
metadata=kubernetes.client.V1ObjectMeta(name=secret_name),
data={"value": base64.b64encode(secret_value.encode()).decode()},
)
try:
body = kubernetes.client.V1Secret(
metadata=kubernetes.client.V1ObjectMeta(name=secret_name),
data={"value": base64.b64encode(secret_value.encode()).decode()},
)
self.api.create_namespaced_secret(namespace=self.namespace, body=body)
self.logger.info(
"Secret created/updated successfully",
extra={"secret_name": secret_name},
)
except ApiException as e:
if e.status == 409:
# Secret exists, try to patch it
try:
self.api.patch_namespaced_secret(
name=secret_name, namespace=self.namespace, body=body
)
self.logger.info(
"Secret updated successfully",
extra={"secret_name": secret_name},
)
except kubernetes.client.exceptions.ApiException as patch_error:
self.logger.error(
"Error updating secret",
extra={"secret_name": secret_name, "error": str(patch_error)},
)
raise patch_error
self.logger.error(
"Error writing secret",
extra={"secret_name": secret_name, "error": str(e)},
Expand Down

0 comments on commit 3cfbf0a

Please sign in to comment.